将关系迁移到多维 - 如何从时间戳创建时间维度 - SSAS

Posted

技术标签:

【中文标题】将关系迁移到多维 - 如何从时间戳创建时间维度 - SSAS【英文标题】:Migrating Relational to Multidimensional - How to Create Time Dimension from Timestamp - SSAS 【发布时间】:2017-08-04 11:18:12 【问题描述】:

目标:我有一个关系数据库(RDB)模型。一些表具有属性时间戳。 我想为我的多维模型创建一个日期维度。

查看Microsoft Tutorial 解决方案3,我注意到时间Date 维度表的属性FullDateAlternateKey 与RDB 表中的时间戳属性具有相同的格式。

问题:所以,我想知道是否有一种方法可以自动生成日期维度表模式(以 FullDateAlternateKey 作为主键)并使用 RDB 中时间戳中的数据填充它表?

然后我可以将 RDB 表中的时间戳属性作为我的多维模型中时间维度表的外键。

【问题讨论】:

【参考方案1】:

不要。

首先,确定维度的“粒度”。听起来您想要一个 DATE 维度,因此粒度将是一天。

然后,确定维度中所需的列。例如周数、周数、年数、日期名称、月份名称等。

接下来,针对您需要的日期范围构建一个每个日期包含一行的电子表格,并计算您需要的列。

最后,使用您喜欢的 ETL/ELT 方法从电子表格中加载和处理维度。

您不从传入的数据值构建它的原因是您可能在数据中存在间隙。日期维度应包含所需范围内的所有日期(即 1900-01-01 到 2999-12-31),以便您的 BI 工具最终可以将其用于时间序列报告。如果您没有所有日期,并尝试在图表的 x 轴上显示日期,则会得到错误的可视化效果。

使用电子表格作为源的另一个原因是 DATE 维度是您设计中最不稳定的维度之一。您的用户会要求提供新列和列的变体(例如,“我们可以创建一个日期类似于 2017 年 8 月 4 日的列吗?”),而电子表格是管理数据和重建数据的一种非常快速的方法。必要时标注尺寸。

【讨论】:

数据库中已经存在的数据呢?它将如何匹配时间维度?那是我的问题/怀疑。我需要显示来自关系数据库的数据,因此我需要一种将这些关系表的时间戳属性转换为日期维度的方法,以便我可以显示这些表。还是不行? 我不知道你的加载过程,所以我不能只指出一个解决方案,但一个可行的选择是在你的事实表中添加一个 DATE 列,并用你的时间戳填充它约会。然后,如果您的日期维度以日期为键,则可以连接这两个表。【参考方案2】:

第 1 步: 选择粒度并根据该粒度生成时间维度键。例如,选择粒度小时,需要类似 2001020323 (yyyymmddhh) 的值。

使用 SSAS 没有自动的方法来做到这一点,因此最好使用脚本在底层数据源中构建时间维度表,然后将其导入到 SSAS 中的 DSV 并使用它来构建时间维度。 (like this one)

第 2 步: 我必须匹配时间维度的键,因此我需要一个 ETL 流程/作业/脚本,将我的时间戳作为输入并返回与时间维度表中的键匹配的时间戳的键。

【讨论】:

仅具有在事实中使用的时间戳的维度不能用作时间/日期维度 - 它需要是日期或时间的连续维度,包括未按照 Ron 使用的维度回答。您当然可以通过在 DSV 中查询事实的时间戳来创建维度,但 Ron 是对的:不要。 我必须匹配时间维度的键,因此我需要时间戳上的 ETL。 当然。但是你的时间维度应该独立于你的事实,然后你与之匹配。

以上是关于将关系迁移到多维 - 如何从时间戳创建时间维度 - SSAS的主要内容,如果未能解决你的问题,请参考以下文章

OLAP 多维数据集:具有多个父项的父子维度

引用关系 sql server 分析服务,我该如何创建它

如何从多维数组中获取维度(切片)

Excel如何进行多条件多维度计算?

SSAS Cube 中的维度级别安全性/每用户数据安全性?

多对多维度模型