MDX сгибает результирующий набор и назначает частоту

У меня есть сценарий, где набор результатов должен быть сгруппирован и назначить частоту.

Например, следующий запрос MDX:

WITH MEMBER [MEASURES].[PERC_1] AS
    AGGREGATE ( EXISTING  [DIM CUSTOMER].[CUSTOMER ID].[ALL].CHILDREN,[MEASURES].[AMOUNT])

SELECT
[MEASURES].[PERC_1] ON 0,
[DIM CUSTOMER].[CUSTOMER ID].CHILDREN,[DIM CUSTOMER].[NAME].CHILDREN        
FROM [ANALYSIS DW]
WHERE ([DIM CUSTOMER].[ADDRESS].[ALL])

должен вернуть этот результат:

     Perc1
 C1   10
 C2   0
 C3   20
 C4   30
 C5   40
 C6   50
 C7   50 
 C8   50 
 C9   90
 C10  100

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

  • 0-30
  • 31-60
  • 61-100

Эти сегменты рассчитываются на основе максимального и минимального значений меры perc_1, приведенной выше; то есть 0 является минимальным, а 100 - максимальным. Ковши рассчитываются как (0+100)/3 - (0-30, 31-60, 61-100).

Теперь результаты после распределения частот в указанном наборе результатов должны выглядеть следующим образом:

         frequency
 0-30      4
 31-60     4 
 61-100    2

Я не получу доступ к решению OLTP design/SSAS Cube.

1 ответ

Решение
WITH SET [0-30 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 0 AND [MEASURES].[PERC_1] <= 30
               )
     SET [31-60 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 31 AND [MEASURES].[PERC_1] <= 60
               )
     SET [61-100 set] AS
         Filter([DIM CUSTOMER].[CUSTOMER ID].CHILDREN,
                [MEASURES].[PERC_1] >= 61 AND [MEASURES].[PERC_1] <= 100
               )
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[0-30] AS
            NULL
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[31-60] AS
            NULL
     MEMBER [DIM CUSTOMER].[CUSTOMER ID].[61-100] AS
            NULL
     MEMBER [Measures].[frequency] AS
            CASE [DIM CUSTOMER].[CUSTOMER ID].CurrentMember
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[0-30] THEN
                      [0-30 set].Count
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[31-60] THEN
                      [31-60 set].Count
                 WHEN [DIM CUSTOMER].[CUSTOMER ID].[61-100] THEN
                      [61-100 set].Count
            END
SELECT { [Measures].[frequency] } ON 0,
       { 
         [DIM CUSTOMER].[CUSTOMER ID].[0-30],
         [DIM CUSTOMER].[CUSTOMER ID].[31-60],
         [DIM CUSTOMER].[CUSTOMER ID].[61-100]
       } ON 1
  FROM [ANALYSIS DW]
WHERE ([DIM CUSTOMER].[ADDRESS].[ALL])

Я не думаю, что вы можете сделать это полностью в MDX таким образом, что "3" является параметром для запроса MDX, так как вам нужно, по крайней мере, иметь что-то вроде определения элементов для блоков в явном виде в выражении MDX. Предложение WITH (или оператор CREATE уровня сеанса) - это единственное место, где вы можете создавать элементы, показанные на оси строк, даже если они просто используются в качестве заполнителей и не содержат никакой логики.

Вам понадобится внешний инструмент для генерации специфичного для параметра оператора MDX, как показано выше.

Другие вопросы по тегам