MDX рассчитывается Член не допускается несколько иерархии кортежа - PullRequest
0 голосов
/ 22 мая 2018

Я использую таблицу sql для создания фильтров для каждого измерения для значения в кубе SSAS.

SQL Table

Запрос MDX основанв столбце «Запрос» ниже вычисляемый элемент:

   AGGREGATE
    (
      IIF(Query= "" or ISEMPTY(Query),
           [Code].[_KeyQuery].[ALL],
           StrToTuple('('+ Query+')')
           ),[Measures].[Value]
    )

Я должен работать с сводной таблицей в Excel.Это работает отлично, значение корректно фильтруется на каждом элементе измерения.Если я использую такой запрос, это нормально.

[Level].[LevelCode].&[A],[Status].[StatusCode].&[ST]

Но теперь мне нужно добавить возможность фильтрации по нескольким элементам измерений.Например, используя запрос:

[Level].[LevelCode].&[A],[Level].[LevelCode].&[X],[Status].[StatusCode].&[ST]

Это не работает, я пытаюсь изменить запрос следующим образом:

{[Level].[LevelCode].&[A],[Level].[LevelCode].&[X]},[Status].[StatusCode].&[ST]

, но функция StrToTuple () вызывает ошибку.Я не знаю, как фильтровать несколько значений для одной иерархии измерений.

1 Ответ

0 голосов
/ 22 мая 2018

Если это всегда будет кортеж, тогда нет необходимости использовать AGGREGATE, просто кортеж должен вернуть значение:

  IIF(
    Query= "" OR ISEMPTY(Query),
    (
      [Code].[_KeyQuery].[ALL]
     ,[Measures].[Value]
    )
   ,StrToTuple('('+ Query +',[Measures].[Value])')
  )

Или эта версия:

   StrToTuple(
      '('
      + IIF(
          Query= "" OR ISEMPTY(Query)
         ,[Code].[_KeyQuery].[ALL]
         ,Query 
       )
     +',[Measures].[Value])'
    )

возможноподход к решению между кортежем и набором

Добавьте столбец в вашу управляющую таблицу «TupleOrSet» со значениями «T» или «S».Затем вы можете изменить свой код примерно так:

  IIF(
    Query= "" OR ISEMPTY(Query),
    (
      [Code].[_KeyQuery].[ALL]
     ,[Measures].[Value]
    )
   ,IIF(
       TupleOrSet = "T"
      ,StrToTuple('('+ Query +',[Measures].[Value])')
      ,AGGREGATE( StrToSet('{'+ Query +'}'), [Measures].[Value])
    )
  )

note

Кортеж - это определенная точка в пространстве куба, поэтому он не может состоять из двух членов изта же иерархия - это создаст координаты, которые не являются определяющими

...