我有一个交易事实表以及产品,时间和地点维度表。该事实表稀疏,因此,如果一月份没有出售任何比萨饼,那么事实表中就没有比萨饼的记录。
当我按产品向下钻取时,比萨的汇总结果不在结果中。但我希望它具有0个值,作为units_sold = 0。
一种解决方案是使用左外部联接将产品表联接到事实表。然后,我可以获得预期的结果。 但是当我用其他尺寸(例如位置或时间)切割时,结果中仍然缺少这些产品。
((外部联接为其他维外键提供了空列,因此WHERE子句将再次删除它们。)
我该如何解决问题? (我使用ROLAP)
您想要LEFT JOIN
,然后再次LEFT JOIN
。然后条件进入on
子句。像这样的东西:
select . . .
from products p left join
fact f
on p.product_id = f.product_id left join
timedim td
on f.time_id = td.time_id and
td.month = 'January'