多维数据集中多个不同计数度量的最佳分区策略是什么

时间:2014-11-03 20:59:47

标签: ssas mdx olap-cube

我有一个多维数据集,其中包含一个包含一个月数据的事实表。事实表是15亿行。 事实表包含以下列{ DateKey,UserKey,ActionKey,ClientKey,ActionCount }。 事实表每个操作每个用户每天包含一行,但没有完成任何活动。

现在我想在我的立方体中计算以下度量,如下所示

每位用户的平均天数 AVG([用户]。[用户密钥]。[用户密钥],[度量]。[日期计数])

用户参与> = 14天 SUM([用户]。[用户密钥]。[用户密钥],IIF([措施]。[日期计数]> = 14,1,0))

每位用户平均请求数 IIF([Measures]。[USER COUNT] = 0,0,[Measures]。[ACTIVITY COUNT] / [Measures]。[USER COUNT])

为此,我创建了两个不同的计数度量DATE COUNT和USER COUNT,它们是事实表的DateKey和UserKey列上的不同聚合。我想知道对度量组进行划分(其中有3个bcoz具有不同的度量标准,并且自己的度量值组)。

分区立方体的最佳策略是什么?我已经阅读了analysis service distinct count指南端,它提到通过非重叠用户ID对多维数据集进行分区是单用户查询的最佳策略,而用户X时间最适合单用户时间设置查询。 / p>

我想知道我是否应该按多维数据集分区为每个75个分区(每个分区15亿行/ 2000万行),这将使每个分区具有非重叠和顺序用户ID,或者我应该将其分区为31个分区每天有重叠的用户ID,但每个分区有不同的天数或31 * 3 = 93个分区,我每天将多维数据集分解为每天,然后每天进一步分区为3个相等的部分,每天都有非重叠的用户ID(但是用户将在几天之间重叠)或将ActionKey划分为45个不同大小的分区,因为大多数情况下措施都被Action切分?

我有点困惑,因为该论文只谈到优化单个不同的计数度量,在那里我需要对我的度量的用户和日期做不同的计数。

任何提示?

1 个答案:

答案 0 :(得分:0)

我首先退后一步,尝试使用多对多维度计数技术来实现Distinct Count结果,而不会产生实际Distinct Count聚合的开销。

对此最好的解释可能是" Distinct Count" "多对多革命2.0"纸:

http://www.sqlbi.com/articles/many2many/

注意解决方案C是我所指的。

您通常会发现此解决方案比标准" Distinct Count"测量。例如,我有一个多维数据集中有2b行的最大事实(只有4个分区)和一个" M2M Distinct Count"在9米行上的事实 - 性能很好,例如6-7小时完全重新处理所有数据,大多数查询不到5秒。服务器没问题,但不是很好,例如VM,4核,32 GB RAM(与SQL共享,SSRS,SSIS等),无SSD。

我认为你可能会因为太多的分区而过度使用并使设计过于复杂。基本引擎可以通过精心设计创造奇迹。