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, как показано выше.