获得稀疏事实表的完整明细

问题描述 投票:0回答:1

我有一个交易事实表,以及产品,时间和位置作为维表。该事实表稀疏,因此,如果一月份没有出售任何比萨饼,那么事实表中就没有比萨饼的记录。

[当我按产品向下钻取比萨的产品汇总结果时,不在结果中。但我希望它具有0个值,作为units_sold = 0。

一种解决方案是使用左外部联接将产品表联接到事实表。然后,我可以获得预期的结果。


  • 但是当我用其他尺寸(例如位置或时间)切割时,结果中仍然缺少这些产品。

  • 外部联接为其他维外键提供了空列,因此WHERE子句将再次将其删除。


我该如何解决问题? (我使用ROLAP)

使用连接条件是一个好主意,因为有人回答。但我需要更一般的解决方案。

例如,

表1

 person      birth year       death year

 a          1950               2006
 b          1952               2008
 c          1960               2007
 d          1953               1990

我想逐年统计在1950-1953年间出生并于2006-2008年去世的人口。

birth = 1950   death = 2006   count = 1
birth = 1951   death = 2006   count = 0
...

我们可以通过使用联接条件和适当的条件来处理这种情况吗?

sql olap cube dimensional-modeling datamart
1个回答
0
投票

您想要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'
© www.soinside.com 2019 - 2024. All rights reserved.