实现 SSAS 多维数据集的 TIME SPAN/PERIOD 维度的方法

Posted

技术标签:

【中文标题】实现 SSAS 多维数据集的 TIME SPAN/PERIOD 维度的方法【英文标题】:Approach to implement TIME SPAN/PERIOD dimension for SSAS cube 【发布时间】:2013-10-07 15:20:32 【问题描述】:

我们有一个庞大的流量数据库(通话数据记录)。由于记录数量和硬件限制,我们不能使用源详细记录进行报告。因此,我们以 15 分钟的间隔汇总关系数据库中的记录,然后立即截断源数据。这些汇总记录(一段时间内的事件)存储在仓库中,然后用于事实表 (MOLAP)。时间跨度/周期存储在 SYS_TIME_SLICES 维度表中,简化版本为:

CREATE TABLE [dbo].[SYS_TIME_SLICES] (
  [ID] [int] IDENTITY(1, 1) NOT NULL,
  [DATETIME_START] [datetime] NOT NULL,
  [DATETIME_END] [datetime] NOT NULL
) ON [PRIMARY]

第一条记录是:

DATETIME_START      DATETIME_END
01-Jan-13 00:00:00  01-Jan-13 00:15:00
01-Jan-13 00:15:00  01-Jan-13 00:30:00

现在我们将其放入多维数据集中,但我不确定如何根据最佳实践进行操作。我查了“Step-by-Step”一书,一些关于时间维度和相关BI的互联网教程,仍然没有任何线索。将 TIME_SLICES 维度标记为时间会产生一些奇怪的结果。将 DATETIME_END 标记为 DateEnded 类型会产生更奇怪的结果。

我对 SSAS 比较陌生,但在处理 SQL 和客户报告方面有 15 年的经验,所以我明白我想要什么以及如何在常规 SQL 中做到这一点。

我们必须提供具有小时、日、周和月粒度的报告。这可以很容易地通过手动修改和配置 TIME_SLICES 维度的属性来完成,其中涉及一些层次结构(没有任何 SSAS 特殊魔法)。但我想拥有 TIME 商业智能的所有花里胡哨(日复一日增长等)。

更重要的是,旧数据(6 个月以上)永远不会更新,其源仓库表正在存档。在多维数据集中,我们只需要按天详细级别的旧数据,从而节省服务器空间。这是通过分区以某种方式实现的——但我不确定 TIME 的细节。

鉴于上述考虑因素,是否有针对此 TIME SPAN/PERIOD 维度的推荐/常用方法?有什么提示吗?有没有这方面的书?我们应该改变我们的仓库逻辑吗?

这与SSAS - Facts that happened over a time range 有关,但有一点不同的问题。我们使用的是 2008r2,但可以根据需要升级到 2012。

【问题讨论】:

【参考方案1】:

在大多数情况下,最好使用两个单独的维度来表示日期和时间。在您的情况下,时间将只有 96 (24 * 4) 个成员。这些可以汇总到小时,并根据报告/用户需要到其他时间范围,如班次名称。我会为此使用一个整数键,也许是一个像 1415 这样的“说话键”,用于从下午 2:15 到下午 2:30 的时间跨度(即hour of start * 100 + minutes of start)。这将使从DATETIME_START 列计算事实表中的外键变得容易。但是您也可以为每条记录分配无意义的整数代理键。

日期维度将包含日期作为粒度,并且可能具有星期几假期是/否、月、年、季度等属性...这在很大程度上取决于报告的必要性。最好在这里准备更多而不是更少的属性,因为这使报告变得更容易。并且维度表的记录很少,所以不需要过多限制属性的数量。您可以对该表的整数主键使用类似的结构,例如。 G。 20131009 表示 2013 年 10 月 9 日。但同样,任意整数代理键也可以。

【讨论】:

以上是关于实现 SSAS 多维数据集的 TIME SPAN/PERIOD 维度的方法的主要内容,如果未能解决你的问题,请参考以下文章

SSAS - 是不是可以在不重新部署整个多维数据集的情况下将属性添加到现有维度

BI之SSAS完整实战教程4 -- 部署至SSAS进行简单分析

在 SSAS 中建模多维数据集

如何获取 SSAS 多维数据集维度和维度属性的列表

如何以编程方式检查 SSAS 数据库/多维数据集是不是正在处理?

BI之SSAS完整实战教程3 -- 创建第一个多维数据集.docx