我该如何进行OLAP多维数据集增量处理?

时间:2017-04-20 08:15:06

标签: sql multidimensional-array ssas olap olap-cube

我有一个多维OLAP多维数据集用于Sales.But我有庞大的数据库。首先我完成olap cube完全处理。但每次它都会完成所以它需要很多时间。我必须做增量处理。但我不对这个主题有任何期限。你能帮助我吗?

我应该如何走一条路?我发现一些文章涉及这个主题,例如this一个。

但是我不知道我会写什么来分区查询中的条件。

enter image description here

1 个答案:

答案 0 :(得分:2)

分区事实表的典型方法是按日期。您的源中有一个 Sales_TransactionDate 列,因此这将是一个明显的选择作为分区属性。

根据您的数据量以及您要创建的分区数量,您可以按年,月,日或其他任何内容进行分区。

这个想法是你只处理整个立方体一次。然后,每隔(例如)晚上,您只重新处理当前(例如)月份的分区。只有当源系统中的旧数据(即直到最后(例如)月末的数据)永远不会更改时,这才有效。如果确实发生了变化,那么您将错过更改,因为上个月的分区已不再处理。

所以这是增量处理的一个重要问题。您必须知道它首次出现后多长时间才能更改源系统中的数据(显然,只有与多维数据集相关的更改才有意义 - 如果多维数据集不使用的某些列发生更改,则无关紧要)它会在什么阶段陷入一种不变的状态。

这是一个ETL问题,涉及如何(如果有的话)使用Type2缓慢变化的属性,以及源系统是否有任何关于上次更新行的指示(例如LastUpdated datetime 专栏)。

(编辑 - 根据下面的评论)

您需要调整分区大小,以便保证只需处理最新的分区即可捕获所有可能的更改。例如,如果一行在其交易日期之后最多可以更改6个月(或者您用于分区的任何日期),则必须处理最近6个月的数据以避免任何更改。

但是此约束仅影响最新分区的大小 - 可以根据需要调整旧分区的大小。如果源系统中有一种机制将行标记为“已更改”,则可以减少最近分区中的处理量。 (一个例子是“LastUpdated”列,它总是设置为更新行时的当前日期/时间。另一个是SQL CDC)。