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维度表中的当前值,这似乎是正确的方法。但是,如果我想获取时间条目的 SUM 并将它们分组IssueName,则会导致 2 行,因为名称在第一行和第二行之间发生了变化。我的印象是最好保持简单的连接并使用键,但在这种情况下,您似乎需要先连接到 Dimension 上的维度IssueKey,然后再将其连接到 and 上的IssueNumber维度IsCurrent = 1为了获取当前版本数据的属性。我这样做没有问题,但我也理解在 DW 中连接应该很简单,因此最终用户不必考虑这些连接是如何工作的,这似乎与这种理解相矛盾。我是否正确地考虑了这一点?您不应该返回并更新事实表中的 FK,对吗?我是否需要一个一致的维度或其他东西来保持某些属性随着时间的推移保持一致?

我目前的方法是将体操放在一个视图中,这样最终用户就可以引用该视图,而不必考虑所有的连接。我在想这个错误的方式吗?

4

1 回答 1

1

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

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

现在,当您进行聚合时,您只需要查看事实表中的当前行;您的最新行也只会查看您已经实施的最新暗淡行。如果源系统发生变化,您也不必去更新历史记录。您可能需要淘汰旧行并添加带有最新属性键的新行。

这可能会解决您的问题。

于 2020-04-14T08:47:47.823 回答