我们正在从包含日期范围的费率的来源加载数据。这个比率很少变化。 E.g。
ProductId, SupplierId, CategoryId, Rate, ValidFrom, ValidTo
1, 2, 3, 4.0, 2014-01-01, 2014-06-30
此费率有效期为六个月。报告要求是显示产品,供应商,类别的灵活时间范围的平均费率......
因此,我将费率与时间维度相结合,得出如下事实表:
ProductId, SupplierId, CategoryId, Rate, Date
1, 2, 3, 4.0, 2014-01-01
1, 2, 3, 4.0, 2014-01-02
... (approx. 180 rows for this one rate)
所以每天会有一个费率。由于费率有时有效一年或两年,我正在制作一个大约2亿行并且不断增长的大型事实表。
立方体在几分钟内加载,并将数据汇总到大约1.5 GB(而datamart占用大约20 GB)。多维数据集查询性能似乎没问题。
我当然可以更改粒度,例如聚合到一个月。但是费率是每日费率,它们并不经常改变,但不一定在一个月的第一天改变。
我只想获得有关ETL流程产生的行扩散的意见。它是否有气味,是否有更好的方法来完成我们需要的工作?
答案 0 :(得分:0)
我不确定引爆点会在哪里,但如果费率不经常变化,我倾向于只查询关系表而不是试图将它们放入他们自己的事实表。
意思是,如果我只是想在某个日期范围内设定某个产品/供应商/类别的费率,而且我知道该表位于1000-10000,而不是100,000 -1,000,000&s,我只是对结果运行一个直接的SQL查询,而不是从一个多维数据集中获取它。
在表格中,我的意思是每个费率的开始/结束日期的表格,而不是每天每个费率都有一行的表格。
如果为我的查询索引关系表,它应该快速返回。
如果费率与其他事实相关,例如销售,我会将费率视为维度而非事实。这将是回答诸如"这次销售发生时生效率是多少的问题?"