SSAS 获取两个日期之间的活动记录数
Posted
技术标签:
【中文标题】SSAS 获取两个日期之间的活动记录数【英文标题】:SSAS get active record count between two dates 【发布时间】:2015-12-10 12:14:33 【问题描述】:您能否告诉我根据以下要求设计数据仓库和维度建模(SSAS 多维数据集)的最佳方法。 这里的要求是,如果用户从图像中显示的下拉菜单中选择年份(2015 年),我必须获取截至该月活跃的学生人数。抓住这里,没有选择enrollstartdate和enrollenddate作为两个不同日期的选项(没有角色扮演维度),只有一个过滤器,即年份。
Requirement to get the active student count as of that month
【问题讨论】:
【参考方案1】:我想到了几种可能的方法。第一个是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
聚合或LastChild
SSAS 中的聚合。如果您使用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
属性过滤您的业务用户的答案。
我希望这对您开始使用可能的方法很有用。
问候, 杰西·戴森
【讨论】:
以上是关于SSAS 获取两个日期之间的活动记录数的主要内容,如果未能解决你的问题,请参考以下文章