标准化问题的MDX选择性求和

时间:2010-04-22 02:23:52

标签: ssas olap mdx olap-cube

我是MDX的新手,在过滤掉总和中的值方面存在问题。

我们想要进行归一化计算,特别是数量(q)除以基础(b)以得到强度(I)。公式很简单I = q / b。

我们的多维数据集结构:

我们有事实表FactQuantity和FactBasis,每个都与DimOrg和DimTime维度表相关联。这两个维度都具有层次结构:DimTime中的月份汇总为多年,而DimOrg中的位置汇总为业务单位和组。

事实表彼此不同步:仅仅因为特定org_id和时间存在数量,因此不保证对于同一org_id和时间存在基础。

我在解决方案时的尝试:

计算成员的基本形式很简单:     [处理方法]。[数量] / [措施]。[基]

当我们在两个维度的最低级别查看时,这样可以正常工作,但是当您汇总维度并开始聚合时会出现问题。

问题是包含了在同一时间和位置没有相应Basis值的Quantity值,从而使分子太大而因此不正确。

快速示例:

组A中的

org_id 001的基数为100,数量为1000,因此其计算强度为1000/100 = 10。目前很好。 org_id 002也在A组中没有基础,但它的数量确实为2000,所以计算出的强度误差也没有。细

滚动到A组会将数量(3000)和基数(100)相加,计算出的强度为30,这对于该组是不正确的。应该排除2000,因为它对于相同的org_id和时间没有相应的基准值。

非常感谢您提供的任何帮助。

谢谢,

1 个答案:

答案 0 :(得分:2)

MSDN论坛上的

Deepak Puri answered this

  

假设[DimOrg]。[Location]和[DimTime]。[Month]是2个维度的叶级属性,您可以将[Measures]。[Quantity]分子与仅有叶子的叶子相加,像:

     

Sum(NonEmpty(existing [DimOrg].[Location].[Location].Members * [DimTime].[Month].[Month].Members, [Measures].[Basis]), [Measures].[Quantity]) / [Measures].[Basis]