将其构建到您的模型中
只需正确建模:假设您有一个包含您分析的度量的事实表以及人员维度和日期维度的外键,请为包含您要分析的范围的“年龄组”维度添加一个新表。该表将包含例如一条记录“0-9”、一条“10-19”等。
然后将引用年龄组维度的外键列添加到事实表。然后,设置此外键的值将是事实表上的 SQL 更新语句,该语句计算外键引用到日期维度的日期与外键引用到人员维度的人的出生日期之间的差异. 这个差异就是那个日期的年龄。由此,确定年龄组并将其主键用作外键列的值。
最后,只需从年龄组维度的年龄组列中创建一个属性。
即时计算
如果您真的想即时计算,我不确定性能是否良好,但您可以尝试如下:您还需要“年龄组”维度。但是没有必要将它链接到您的事实表。然后像这样定义一个计算成员:
member [Measures].[Age at Date] AS
DateDiff('yyyy',
[Person].[BirthDate].CurrentMember.Properties("Key0", TYPED),
Measures.[Date]
)
Member [Measures].[Person Count per Age Group] AS
CASE
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[0-9] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 0 AND [Measures].[Age at Date] < 10
).Count
WHEN [Age Group].[Age Group].CurrentMember is [Age Group].[Age Group].[10-19] THEN
Filter([Person].[Person Id].[Person Id].Members,
[Measures].[Age at Date] >= 10 AND [Measures].[Age at Date] < 20
).Count
...
END
这假设您Measures.[Date]
在事实表中直接命名的度量中具有每条记录的日期。如果不是这种情况,您可以将该日期作为日期数据类型获取,可能来自日期维度的当前成员,类似于通过Key0
属性派生出生日期的方式。我假设您确实在维度中使用 Date 数据类型作为出生日期属性键,否则可能需要进行类型转换。出于这样的目的,Analysis Services 中提供了许多 VBA 函数(就像DateDiff
我上面使用的那样),如此处所述。