所以我有一个值,表示事实表上的天数。我想创建一些查询,按年将这个值分成N个频段(比如4个频段)。有没有办法用CalculatedMembers做到这一点?例如,我想要乐队:< 1年,1 - 3年,3 - 5年,5年以上。我可以用以下几天来做:
0 - 365
365 - 1095
1096 - 1825
1826 - infinity
知道怎么做吗?我正在使用蒙德里安。我想在运行中计算它,而不是添加字段和更改ETL脚本等。
我定义了一个度量,表示使用聚合函数的平均天数(显示为2。4年)。但实际上我想定义一个全新的度量,它是在同一列上计算的度量,其中函数返回它所属的带,如上所述,然后汇总每个带中有多少个。
我开始怀疑我必须在ETL中执行此操作并创建一个新列,将它们放在一个乐队中。这确实是我怀疑的一个新维度(而不是计算量度)。
答案 0 :(得分:2)
我从你的问题中理解你想把乐队作为类别,这意味着你需要他们作为某种等级的成员。您可以在MDX中动态创建成员,但仅适用于现有层次结构。您没有说明一个,因此我假设您有一个事件层次结构,您希望为其填充持续时间,此外我假设包含维度键的层次结构名为[Event].[Event Id]
。你也没有说出"平均持续时间"的名称。测量。因此我假设它被称为Duration
。
然后你可以使用以下MDX:
WITH Member [Event].[Event Id].[< 1 year] AS
Aggregate(Filter([Event].[Event Id].[Event Id].Members,
[Measures].[Duration] < 1.0
)
)
Member [Event].[Event Id].[1-3 years] AS
Aggregate(Filter([Event].[Event Id].[Event Id].Members,
[Measures].[Duration] >= 1.0 AND [Measures].[Duration] < 3.0
)
)
Member [Event].[Event Id].[3-5 years] AS
Aggregate(Filter([Event].[Event Id].[Event Id].Members,
[Measures].[Duration] >= 3.0 AND [Measures].[Duration] < 5.0
)
)
Member [Event].[Event Id].[5+ years] AS
Aggregate(Filter([Event].[Event Id].[Event Id].Members,
[Measures].[Duration] >= 5.0
)
)
SELECT ... // whatever you want to see
ON COLUMNS,
{
[Event].[Event Id].[< 1 year],
[Event].[Event Id].[1-3 years],
[Event].[Event Id].[3-5 years],
[Event].[Event Id].[5+ years]
}
ON ROWS
FROM [YourCube]
将WHERE条件,其他层次结构添加到行或列,根据需要添加子选择。
我不确定这是否真的很快,但它解决了这个问题。