对具有直接关系但在细节层而不是维度层的事实表建模

Modeling Fact Tables that have direct relationships, but at a detail and not a dimension layer

这与我的问题非常相似。 http://forum.kimballgroup.com/t2534-modeling-fact-tables-that-have-direct-relationships-but-at-a-detail-and-not-a-dimension-layer

我有一个关于 PO、供应商发票、付款、收据等的事实 table。它们有一些共同的维度,而另一些则没有。问题是,例如,假设他们正在通过他们的 gl 帐户查看发票(使用连接到多维数据集的 excel 枢轴 table),那么他们希望能够在 PO 的列中删除编号,采购订单的买家等。即使买家维度仅与采购订单相关,而帐户维度仅与发票相关。但是他们说,好吧,PO 与发票有关,所以你应该可以把它拉进来。

我在发票事实 table 上确实有一个 PO Ref 字段,但只有 50% 的时间填写了它。即使是这样,您也可以在 PO 和发票之间以任何一种方式建立一对多关系,至少据我所知。 无论如何,他们希望能够从任何度量组中引入任何度量,以及每一个可能的维度,然后能够深入到细节以查看采购订单、发票、付款和收据以及它们如何匹配.最佳做法是根据 Kimball 的说法,如果 table 是不同的粒度,则将它们分开,但这样并不能解决所有业务问题。

我能想到的唯一解决方案是:

  1. 要么在我加载退化维度时将一堆与细节相关的列附加到退化维度上。即添加 PO 到发票和发票到 PO 等,但当它是多对一时,将其作为该列中的逗号分隔列表。
  2. 创建与每个事实和维度的每个可能关系 table。虽然这会是很多工作,但有些仍然可能与某些维度没有关系。
  3. 创建一个可怕的事实 table 将所有当前的连接在一起,并以某种方式找出逻辑,以便只为多对一连接显示一次度量值。
  4. 这可能是个坏主意,但我想也许我可以以某种方式在每个度量值组和相应的退化维度参考字段之间创建一个关系。例如在供应商发票退化维度 PO Ref 字段和采购订单行度量组 PO 字段之间创建关系。

  5. 降低他们的期望,哈哈。

这是维度使用选项卡的屏幕截图,可以让您了解它当前的样子。

我试过一次选项3。表现很糟糕。输出具有误导性。再也不会了。

您最好的选择是与企业合作。如果数据不容易获得(例如没有 PO 的发票),请同意应该做什么。您可以显示一个默认值(PO 未记录在发票上)。您可以就 ETL 中实现的逻辑达成一致,提取最有可能的 PO。

无论选择哪种方法,都必须进行讨论。如果您不这样做,企业将根据错误的假设做出决策。企业会发现自己在查看自己不理解的报告。您必须帮助您的用户避免这些结果。

一旦就方法达成一致,将其记录下来。出现疑问时,共享文档。确保文档突出显示所有计算、困难和缺失的源数据。

与生成源日期的团队合作。如果一个重要的领域人烟稀少,请安排一次会议。查看是否可以改进捕获过程。让您的用户知道您正在调查这个领域。让他们知道结果。如果无法改进源数据(在没有 PO 的情况下继续开具发票),请将原因告知您的用户。

管理您的客户可能具有挑战性。特别是那些在公司担任高级职位的人。透明和可靠的文档将为您提供帮助。