类型2缓慢更改尺寸并在某个时间点查询历史数据

问题描述 投票:0回答:1

我有一个小星型模式,表示Jira中问题的时间条目。我有一个IssueAttributes类型2维表,然后是一个TimeEntry事实表。

尺寸表的简化视图:

+----------+---------+-------------+-----------+-----------+------------+----------+
| IssueKey | IssueID | IssueNumber | IssueName | IsCurrent | ValidFrom  | ValidTo  |
+----------+---------+-------------+-----------+-----------+------------+----------+
| 1        | 123456  | PR-1000     | Original  |  0        | 2000-01-01 |2020-04-09|
+----------+---------+-------------+-----------+-----------+------------+----------+
| 2        | 123456  | PR-1000     | Changed   |  1        | 2020-04-10 |9999-1231 |
+----------+---------+-------------+-----------+-----------+------------+----------+

事实表的简化视图:

+--------------+---------+-----------+
| TimeEntryKey | IssueKey| TimeEntry |
+--------------+---------+-----------+
| 11111        | 1       | 1.25      |
+--------------+---------+-----------+
| 11112        | 2       | 1.5       |
+--------------+---------+-----------+

当我插入事实表时,我正在使用维度表中当前的IssueKey,这似乎是正确的方法。但是,如果我想获取时间条目的总和并按IssueName进行分组,由于名称在第一行和第二行之间已更改,因此将导致2行。我的印象是最好保持简单的联接并使用键,但是在这种情况下,您似乎需要首先联接到IssueKey上的Dimension,然后再次将其联接到该维度上。 IssueNumberIsCurrent = 1,以获取当前数据版本的属性。我这样做没有问题,但是我也理解到在DW中联接应该很简单,因此最终用户不必考虑联接的工作方式,这似乎与这种理解相矛盾。我是否在正确考虑?您不应该返回并更新事实表中的FK,对吗?我是否需要一个一致的维度或某种东西来使某些属性随时间保持一致?

我目前的方法是将体操放在一个视图中,以便最终用户可以参考该视图,而不必考虑所有联接。我是否在以错误的方式思考?

data-warehouse dimensional-modeling star-schema star-schema-datawarehouse
1个回答
0
投票

我认为您的TimeEntry事实是一个事务性事实表。我建议您添加以下列

  • 行当前标志
  • 开始日期(如果一天中有多个更新,则为“开始日期时间”)
  • 结束日期(如果一天中有多个更新,则为“结束日期时间”)

现在进行汇总时,您只需查看事实表中的当前行;您的最新行也只会查看您已实现的最新暗行。如果源系统发生更改,您也不必去更新历史记录。您可能需要停用旧行,并添加一个包含最新属性键的新行。

这可能会解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.