交易事实 Table 方法

Transaction Fact Table approach

我正在研究金融数据集市结构。 而且我对这样做的更好方法有一些疑问。 源系统数据库 Dynamics AX 2009 具有三个 table 用于客户交易。 一个 table 用于未结交易,客户仍需要支付 service/product; 一个 table 用于结算交易,其中包含客户已支付的款项; 最后一个 table 拥有所有客户交易,持有从开放到结算的交易,以及其他作为客户到银行或分类账的交易。

我想到了两个选项,首先我将维护一个事实 table 代表三个 table,开放交易的事实,任何客户交易的事实和结算交易的事实。 其次是创建一个单一事实来保存所有事务,为此我必须对三个 table 进行完全连接。 我不确定这两种方法,因为第一种方法似乎是从生产中复制 tables 并创建适当的维度。 在第二个上,我会创建一个巨大的事实 table,即数据会不断变化的地方,因为打开的事务在解决时会在源系统上被删除。

另一个疑问,我是否应该创建一个具有scd(缓慢变化维度)结构的事实来维护历史数据?(星日期,结束日期,标志)

我认为你应该只使用 一个事实 table(一个立方体)并使用一个维度来区分 open/settled/etc。交易。这就是维度的用途:它们可以帮助您对度量进行分类并获得有关它们的特定视图。这种方法还将为使用多维数据集创建知识提供更多可能性。 open/settled/etc 有单独的多维数据集。交易,将很难或不可能将此数据设置为对比。

由于数据不断变化,您应该考虑在给定时间内更新您的事实table,并在需要时重建您的多维数据集。

是否使用 scd 实际上取决于您处理的数据及其用途。有商业案例吗?有技术用途吗? 我认为这是你必须自己决定的事情。

根据给定的信息很难判断这是否需要一个或多个事实 table。但是,您应该用来决定的关键点是所有信息是否都处于同一粒度。考虑您预期的事实 table(s) 的粒度,您应该找到一个答案,了解您是需要一个 table 还是多个 tables.

如果所有信息都处于同一粒度 - 即所有相同的维度都适用于您正在考虑放入同一事实的所有度量 table - 那么它们可能都存在于同样的事实 table。如果您发现某些维度不适用于某些度量,那么您可能需要重新考虑您的设计。您可能需要多个事实 table,或者您可能需要将所有度量细化到最低粒度并将层次结构合并到单个维度(如果您当前将它们拆分为多个维度)。

虽然有人提到在单独的多维数据集中进行度量可能会导致比较困难,但请记住,每个事实不需要一个多维数据集 table。您可以在一个多维数据集中有多个事实 table,有时这在您需要能够比较共享某些维度但不共享其他维度的度量时非常有用。这比将不具有相同粒度的数据强制合并到一个事实要好得多 table.

另外,听起来您要建模的是组织的销售分类账。我建议通过 Google 进行挖掘,因为您很可能能够找到讨论销售分类帐结构的维度数据仓库设计的材料,而不是重新发明轮子。如果您对您尝试建模的会计概念没有很好的理解,我特别建议您寻找一个参考模式来工作,或者在阅读会计概念(特别是销售分类账)方面做一些阅读失败。了解帐户结构应该有助于您了解 Fact table(s) 需要的粒度、如何为维度建模等。


这是 Kimball 建模技术的一个非常有用的删节版,其中讨论了 grain 和不同类型的 Fact table,以及许多其他主题:

http://www.kimballgroup.com/wp-content/uploads/2013/08/2013.09-Kimball-Dimensional-Modeling-Techniques11.pdf