Определение вычисляемого элемента в многомерных выражениях — фильтрация значения меры

StackOverflow https://stackoverflow.com/questions/197407

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

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

Проблема в том, что я не знаю 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]) к базовому набору данных, поэтому в конце концов я его не использовал.

Это было полезно?

Решение

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

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 в нашем кортеже.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top