SSAS在两个日期之间获得活动记录计数

时间:2015-12-10 12:14:34

标签: ssas mdx data-warehouse olap-cube

请您根据以下要求告诉我设计数据仓库和维度建模(SSAS多维数据集)的最佳方法。 这里的要求是,如果用户从图像中显示的下拉菜单中选择年份(2015),则必须获得当月活动的学生计数。抓住这里没有选择将enrollstartdate和enrollenddate选为两个不同的日期(没有角色扮演维度),只有一个过滤器,即年份。

Requirement to get the active student count as of that month

1 个答案:

答案 0 :(得分:0)

有几种可能的方法可以想到。第一个是periodic snapshot fact table,另一个是timespan accumulating snapshot fact table

在我看来,第一个更容易实现,所以我在下面提供了一些细节,希望你会发现它有用。

CREATE TABLE FactEnrollmentSnapshot
(
    DateKey INT NOT NULL -- Reference to Date dimension table
    , StudentKey INT NOT NULL -- Reference to Student dimension table
);

CREATE TABLE DimStudent
(
    StudentKey INT NOT NULL
    StudentId ?
    ...Other Student Attributes...
);

CREATE TABLE DimDate
(
    DateKey INT NOT NULL
    , FullDate DATETIME NOT NULL
    , Year SMALLINT
);

假设您的日期维度是日粮,您可以存储每日快照,或者只在每个月的15日存储快照。

根据您是否需要在2015年获得唯一学生数量或2015年最近学生人数,您可以使用DISTINCT COUNT聚合或SSAS中的LastChild聚合。如果您使用LastChild,请确保将Date尺寸标记为时间类型。

请注意,快照样式事实表会产生半加性事实。

您可以使用源数据和Date维度之间的CROSS JOIN来获取原始数据以从示例源数据填充事实表

SELECT
    StudentTable.StudentID
    , DimDate.FullDate
FROM
    StudentTable
    INNER JOIN DimDate ON (DimDate.FullDate BETWEEN StudentTable.EnrollDate AND ISNULL(StudentTable.DisenrollDate,'9999-12-31'));

为简单起见,我没有包含代理键的查找

然后,您可以获得业务用户的答案,过滤日期维度中的Year属性。

我希望这对您开始采用可能的方法非常有用。

此致 杰西戴森