如何连接具有 1-N 关系的事实和维度表
Posted
技术标签:
【中文标题】如何连接具有 1-N 关系的事实和维度表【英文标题】:How to connect a fact and dimension table that are in 1-N relationship 【发布时间】:2015-11-06 15:52:21 【问题描述】:我有一个带有一些度量和维度键的采购事实表。 然后,还有另一个表:折扣表。 Purchase FactTable 与 Discount Table 是 1-N 关系(对于每次购买,我可能会购买多个打折商品)。 折扣表有一些我想汇总的属性(描述、注释)和一些数值(例如:$ 折扣)。
如果我从这个折扣表中创建一个维度,我会出错 总和计数中的购买计数数(膨胀,每行一行 打折商品)。 如果我从这个折扣中创建一个单独的事实 表,我如何查询这两个事实表(目前他们 不共享任何维度,因此我不能使用一致/共享维度进行钻取)。 如果我创建一个退化维度,我们就回到第一个场景。桥接表是否可以解决我的问题?
附言 这个link 帮助选择了桥接表,但我不确定它是否适用于我的情况(因为我需要从折扣表中汇总一些数字属性)。
谢谢,
【问题讨论】:
【参考方案1】:我的经验将支持具有两个事实表 purchase
和 pruchase_detail
的设计。
PURCHASE每次购买都有一行带有属性
purchase_id -- unique ID
purchase_date
customer_id
...
PURCHASE_DETAIL 每次购买有 1:N 行并存储定价详细信息。
purchase_id -- corresponding purchase
account_type -- dimension describing sales price and all discount types
amount
....
金额有适当的符号;销售价格为正,折扣为负。
例子
purchase_id account_type amount
1 sales price 100
1 discount1 -5
1 discount2 -1
使用这种设计,您可以安全地进行 COUNT 次购买(在 PURCHASE 表上),SUM 总价格(在 PURCHASE_DETAIL 上) 并制作所有种类或详细的折扣报告。
【讨论】:
以上是关于如何连接具有 1-N 关系的事实和维度表的主要内容,如果未能解决你的问题,请参考以下文章