powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / что делать с производительностью
4 сообщений из 29, страница 2 из 2
что делать с производительностью
    #33336509
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoshaВы можете привести пример такого CM
ну, например
подсчет непустых членов плоского измерения Dim1 - это аналог DistinctCount, который к сожалению не могу использовать в силу его значительных ограничений (в частности использую Calculated Members в др. измерениях)
пусть она будет называться CM1:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IIF(
  IsEmpty(Measures.[PhM]), 
  null, 
  Count(
    CrossJoin(
      Descendants([Dim1].CurrentMember,,LEAVES), 
      {Measures.[PhM]}
    ),
    excludeempty
  )
)
или другой вариант того-же
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IIF(
  IsEmpty(Measures.[PhM]), 
  null, 
  Filter(
    Descendants([Dim1].CurrentMember, [Dim1].[DimLevel1]), 
    Not IsEmpty({Measures.[PhM]})
  ).Count
)

но все бы неплохо, если бы не существовал еще одна CM, назовем его CM2, который пользуется предыдущим, здесь VDim2a, VDim2b и VDim2c виртуальные, построеные на свойствах членов Dim2, но иерархию из них строить нельзя:

Код: plaintext
1.
2.
3.
4.
IIF(
  IsEmpty(Measures.[PhM]), 
  null,
  Measures.[CM1] / (Measures.[CM1], [Dim2].[All], [VDim2a].[All], [VDim2b].[All], [VDim2c].[All])
)

ну и в качестве примера MDX:
Код: plaintext
1.
2.
3.
4.
SELECT 
  {Descendants([TimeDim].[All], [TimeDim].[Months])} ON COLUMNS,
  NON EMPTY {CrossJoin({Descendants([VDim2a].[All], [VDim2a].[VDim2aLevel1])}, {Descendants([Dim2].[All], [Dim2].[Dim2Level1])})} ON ROWS
FROM [VirtualCube]
WHERE (Measures.[CM2], [Dim2c].&[CalculatedMember4])

прошу заметить, MDX не реальный - только пример, в качестве клиента MS Excel.
...
Рейтинг: 0 / 0
что делать с производительностью
    #33341560
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor - пожалуй в обоих случаях можно использовать NEB на PhM. Правда в привиденном Вами примере MDX это все равно не поможет, т.к. там в WHERE clause стоит еще один calculated member.

backfire - NonEmptyCrossJoin не может работать быстрее NON EMPTY с правильно поставленным NEB, а вот медленнее работать может. В моем примере, когда у Вас больше одной оси, то Вам придется писать NonEmptyCrossJoin два раза, т.е. данные будут сканироваться 2 раза, когда как с NON EMPTY они будут сканироваться только один раз.
Я думаю что дискуссию про NECJ vs. NEB пора закрывать - я вроде привел уже все аргументы - NEB работает для generic clients, работает более правильно и быстрее. Если Вы предпочитаете пользоваться NECJ и оно для Вас работает - то тоже хорошо.


Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
что делать с производительностью
    #33341750
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Mosha
только и остается, что добавить: "Спасибо"!
...
Рейтинг: 0 / 0
что делать с производительностью
    #33341834
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что ж закроем
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / что делать с производительностью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]