0

我刚刚开始使用 SSAS,并且正在尝试生成一个数据立方体,该数据立方体允许我生成一个跨越数年的每个季度特定年龄范围内的人数图表。例如:

                 |   $        @$           $
Number of people | # $        @$         #@$
                 | #@$       #@$         #@$
                 +------------------------------
                  2010 Q1   2010 Q2 ... 2014 Q1

其中 # 是 10-20 岁的人,@ 是 20-30 岁的人,$ 是 30-40 岁的人。

我发现的问题是,2010 年某人可能已经 29 岁,因此属于 20-30 岁年龄段,但在 2014 年,我希望将同一个人计入 30-40 岁年龄段,因为他现在将33. 我不知道如何(或者是否有可能)创建一个对日期和时间敏感的维度?

4

1 回答 1

0

将其构建到您的模型中

只需正确建模:假设您有一个包含您分析的度量的事实表以及人员维度和日期维度的外键,请为包含您要分析的范围的“年龄组”维度添加一个新表。该表将包含例如一条记录“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我上面使用的那样),如此所述。

于 2014-07-16T13:12:09.687 回答