我有一个场景,必须对结果集进行分区并指定频率。
例如,以下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,则桶应为
这些存储桶是根据上述perc_1指标的最大值和最小值计算得出的;即,0最小,100最大。铲斗计算为(0 + 100)/ 3 - (0-30,31-60,61-100)。
现在,上述结果集中频率分布后的结果应如下所示 -
frequency
0-30 4
31-60 4
61-100 2
我无法访问OLTP设计/ SSAS Cube解决方案。
答案 0 :(得分:2)
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语句。