请您根据以下要求告诉我设计数据仓库和维度建模(SSAS多维数据集)的最佳方法。 这里的要求是,如果用户从图像中显示的下拉菜单中选择年份(2015),则必须获得当月活动的学生计数。抓住这里没有选择将enrollstartdate和enrollenddate选为两个不同的日期(没有角色扮演维度),只有一个过滤器,即年份。
Requirement to get the active student count as of that month
答案 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
属性。
我希望这对您开始采用可能的方法非常有用。
此致 杰西戴森