Ssas 在不同的时间范围内高效地存储和检索价格点

Ssas 在不同的时间范围内高效地存储和检索价格点,ssas,etl,business-intelligence,cube,powerpivot,Ssas,Etl,Business Intelligence,Cube,Powerpivot,我们正在从包含日期范围的速率的源加载数据。利率很少变化。例如 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.

我们正在从包含日期范围的速率的源加载数据。利率很少变化。例如

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(而数据集市占用约20 GB)。多维数据集查询性能似乎还可以

我当然可以更改粒度,例如聚合为一个月。但费率为每日费率,不经常变化,但不一定在一个月的第一天变化


我只是想得到关于ETL过程产生的行扩散的意见。它有气味吗,有没有更好的方法来完成我们需要的任务?

我不确定临界点会在哪里,但如果利率不经常变化,我倾向于只查询关系表,而不是尝试将它们放在它们自己的事实表中

也就是说,如果我只想获取某个产品/供应商/类别在一系列日期内的费率,并且我知道该表在1000-10000之间,而不是100000-1000000之间,那么我只需要对结果运行一个直接的sql查询,而不是从多维数据集获取它

我所说的表格,是指每个费率的开始/结束日期,而不是每天每个费率都有一行的表格

如果为我的查询索引了关系表,那么它应该会很快返回


如果费率与其他事实相关,例如销售,我会将费率作为一个维度,而不是一个事实。这将是为了回答诸如“当此次销售发生时,利率是多少?”之类的问题。

我不确定临界点在哪里,但如果利率不经常变化,我倾向于只查询关系表,而不是尝试将它们放在它们自己的事实表中。如果费率与其他事实相关,我会将费率作为一个维度而不是一个事实。谢谢你的想法,Tab。我没有直接sql访问facts的经验。我只知道Rolap/Molap。。。场景,但最终我得到了一个多维数据集作为报告的数据源。您能告诉我如何将sql查询中的事实包含到SSAS多维数据集中吗?我会将其作为一个带有附加细节的答案发布,这样更易于编辑,而不是创建一个较长的注释线程。如果用户使用Excel Pivot浏览OLAP多维数据集,他们是否能够像使用多维数据集度量一样使用来自sql查询的速率度量?即,是否可以在一个MDX查询中“混合”sql结果和SSAS结果?我可能没有完全理解您的想法,或者至少我不知道如何从技术上应用sql查询。在应用程序中,我知道如何执行您的建议,但多维数据集必须能够访问典型的报告工具。这是一个好问题。你原来的问题没有提到Excel。我对Excel Pivot不太熟悉,我不知道是否可以在Excel中将关系查询结果与多维数据集数据混合使用。如果这是一个要求,使得在多维数据集中绝对有必要将速率作为一个度量,那么您已经在这样做的方式可能是最好的方式。我不会担心争吵的扩散。如果分区变得令人讨厌(我认为2000万行是建议的转折点),那么就使用分区吧。谢谢你,很抱歉没有提到这个要求。我认为您所建议的—对所讨论的数据使用纯SQL—甚至在仅访问多维数据集时也是可能的,因为ROLAP多维数据集基本上也会这样做。因此,这是值得检查的,但现在您对我的设计不是完全虚假的评估满足了我的问题,并且我将在性能低于要求时再次检查sql部分,即使使用分区也是如此。