Определение вычисляемого члена в MDX - фильтрация значения меры - PullRequest
2 голосов
/ 13 октября 2008

Мне нужно определить вычисляемый элемент в MDX (это SAS OLAP, но я в любом случае буду признателен за ответы от людей, которые работают с различными реализациями OLAP).

Значение нового показателя следует рассчитывать на основе существующего показателя с применением дополнительного условия фильтра. Полагаю, будет понятнее с примером:

  • Существующая мера: «Общий трафик»
  • Существующее измерение: «Направление» («Вход» или «Выход»)
  • Мне нужно создать вычисляемый элемент "Входящий трафик", который равен "Общий трафик" с дополнительным фильтром (Direction = "In")

Проблема в том, что я не знаю MDX и у меня очень плотный график (извините за вопрос новичка). Лучшее, что я мог придумать, это:

([Measures].[Total traffic], [Direction].[(All)].[In])

Что почти работает, за исключением ячеек с определенным направлением:

example

Так что похоже, что «встроенный» фильтр в Direction переопределен моим собственным фильтром). Мне нужно пересечение «внутреннего» фильтра и моего собственного. У меня было ощущение, что это связано с пересечением [Direction].[(All)].[In] с внутренними координатами оцениваемой ячейки, но трудно понять, что мне нужно, не прочитав сначала тему:)

[править] Я закончил с

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

.. но, по крайней мере, в SAS OLAP это приводит к выполнению дополнительных запросов (для вычисления значения для [in]) к базовому набору данных, поэтому я не использовал его в конце.

Ответы [ 3 ]

8 голосов
/ 14 октября 2008

Для начала вы можете определить новую вычисляемую меру в своем MDX и сказать ей использовать значение другой меры, но с примененным фильтром:

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

Всякий раз, когда вы показываете новую меру в отчете, она будет вести себя так, как будто на ней есть фильтр «Направление> В», независимо от того, используется ли измерение Направление вообще.

Но в вашем случае вы ХОТИТЕ, чтобы измерение «Направление» имело приоритет при использовании… так что все становится немного грязно. Вам нужно будет определить, используется ли это измерение, и действовать соответственно:

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

Чтобы узнать, используется ли измерение, мы проверяем, использует ли текущая ячейка OUT. Если это так, мы можем вернуть общий трафик как есть. Если нет, мы можем сказать ему использовать IN в нашем кортеже.

1 голос
/ 09 мая 2013

Также взгляните на этот вопрос , он описывает ту же проблему, и там опубликован другой ответ.

1 голос
/ 12 января 2011

Я думаю, вам следует поместить столбец в таблицу фактов общего трафика для индикации IN / OUT и создать таблицу Dim для значений IN и Out. Затем вы можете проанализировать свои данные на основе IN & Out.

...