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 获取两个日期之间的活动记录数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 使用ajax获取两个日期之间的记录

如何在 vb.net 中获取两个日期之间的记录?

使用 Spring Data JPA 获取两个日期之间的记录

sql 获取两个2日期之间的记录

获取不同记录的总和并在两个日期范围之间进行比较

从没有时间戳列的数据库表中增量获取两个日期之间的记录