繁体   English   中英

数据仓库中每个事实的开始和结束时间

[英]Start and end period in each fact within a data warehouse

我被要求向我们的数据仓库添加一个新表。 当前,我们将事实分为月度,季度和年度表,每个表都有时间维度。 每个事实记录都有一个时间值。 数据在源系统中按开始和结束时间段生成,并且结束日期成为事实记录的时间维度值。 事实流入月,季度或年事实表将告诉人们如何理解记录中的日期以及如何使用它们。

我被要求让新表在每个记录中都包含开始和结束日期。 有人告诉我,这违反了数据仓库原则,但是它更好地表示了数据的生成方式,并允许更灵活地查询数据,例如滚动期等。

我不是数据仓库专家。 我了解每个事实的单一时间维度是一个原则。 我的问题是,打破这一原则的后果是什么? 换句话说,反对这样做的理由是什么? 将来这样做会遇到什么问题? 在我看来,对于每个事实都有开始和结束时间可以更好地表示数据,但是我承认我不足以充分评估这种设计选择的含义。 谁能提供一些前提?

编辑:我感谢这些答案。 他们至少告诉我,这并没有我所相信的那么糟糕。 关于日期,我将澄清一件事:它们不代表有效期,而代表合计期。 因此,事实记录可以代表在任意月份内计算出的某种成分的平均磅数。 不知道这有什么区别,但是确实有。

也许该是抓紧一本好的数据仓库书籍的时候了,我向Kimball集团推荐一些东西,Ralph Kimball非常适合快速入门数据仓库。 如果有帮助,我可以进一步阐述,但我将从两点开始,这可能有助于您扭转局面并取得进步。

  1. 每个事实具有多个时间维度是非常常见的。 告诉您违反公认的正常做法时,有人给您不正确的信息。 作为“订单”事实的示例,您通常会有一个订单日期,一个发货日期,一个交货日期,一个期间等。

  2. 如果您使用开始日期和结束日期,则通常表明您正在使用2型维度或变化缓慢的维度。 可能并非如此,但是请确保在做出决定之前先了解尺寸变化缓慢的情况。

记录开始日期和结束日期的优点是,您可以更轻松地表示不均匀的时间段。 这意味着您可以更轻松地合并,汇总和比较以不同粒度记录的数据。 从您的描述看来,您的建议似乎从根本上没有“错”。 我以前已经实现过类似的事情。

我发现表中时间段的最佳模型是使用半开间隔。 即:间隔是StartDate> = x <EndDate表示的时间段。 半开间隔使连接和比较更加容易。

好的。 这是我处理(将)相同要求的方式。 我使用一个记录事件日期的新日期字段将调整模拟到我的事实表中。

例如,从上面

EventDateKey金额RecordType

20110327 700.0来源

20110329 -500.0 DW调整

因此,如果您需要汇总(总金额),则数据可以使用EventDateKey并通过相同的Date维度处理任何期间。 这很复杂,因为您正在模拟事实表上的调整,但是它提供了所需的所有灵活性,而不会丢失信息的实质。

每个事实表都有一个粒度 事实表的粒度指定表的每一行代表什么-一项事务或某种汇总(每天,每周,每月..)。

我想您当前的表是聚合的,并且-在这些情况下很常见-聚合表中的每个记录都有指向日期维度的外键,该维度指向期间的末尾。 因此,例如,每周汇总表中的每个记录每周都有一行,并指向一周的最后一天(星期六或星期日)。 请注意,在此期间开始时拥有另一个密钥将完全多余。

现在,如果您希望灵活地报告期间,则应考虑一次交易的表粒度 ,换言之,表中的一行应是一次交易,并且任何日期/时间FK都指向交易时间实际交易。

错误的方法是在同一张桌子上混合谷物。 考虑以下

FromDateKey ToDateKey   Amount
20110327     20110402   700.0
20110329     20110330   200.0     

任何将同时包含两行的sum() ,将对已经包含在第一行中的第二项进行重复计数。

总而言之,如果您的月度,季度和年度汇总不够精细,只需引入一个具有更细粒度的事实表-一日汇总或单笔交易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM