我正在MS BIDS中构建一个多维数据集。我需要创建一个计算度量,返回按搜索次数加权的等级值的加权平均值。我想要在任何级别计算这个值,无论应用什么维度来分解数据。
我正在尝试执行以下操作:
我有一个称为[排名搜索产品]的度量,我希望在最低级别应用,然后对其所有值求和
IIf([Measures].[Searches] IS NOT NULL, [Measures].[Rank] * [Measures].[Searches], NULL)
然后我的加权平均指标使用了这个:
IIf([Measures].[Rank Search Product] IS NOT NULL AND SUM([Measures].[Searches]) <> 0,
SUM([Measures].[Rank Search Product]) / SUM([Measures].[Searches]),
NULL)
我是编写MDX查询的新手,所以这对我来说非常困惑。计算应
([Rank][0]*[Searches][0] + [Rank][1]*[Searches][1] + [Rank][2]*[Searches][2] ...)
/ SUM([searches])
中的说明进行操作
目前将我的数据加载到Excel中的数据透视表中是返回#VALUE!对于我的自定义度量的所有计算。
请停止!
答案 0 :(得分:2)
首先,您需要在多维数据集中使用中间度量,例如Rank times Searches
。实现此目标的最有效方法是在处理度量值组时进行计算。您可以通过列e扩展您的事实表。 G。在视图中或在数据源视图中添加命名计算。此列的SQL表达式类似于Searches * Rank
。在多维数据集定义中,您可以将此度量的聚合函数设置为Sum
并使其不可见。然后只需将加权平均值定义为
[Measures].[Rank times Searches] / [Measures].[Searches]
或者,为了避免对零/空搜索值产生刺激性结果:
IIf([Measures].[Searches] <> 0, [Measures].[Rank times Searches] / [Measures].[Searches], NULL)
自Analysis Services 2012 SP1起,您可以将后者缩写为
Divide([Measures].[Rank times Searches], [Measures].[Searches], NULL)
然后MDX引擎会自动在所有维度上应用所有内容。
在第二个表达式中,<> 0
测试包括<> null
测试,如在数字上下文中,通过MDX将NULL评估为零 - 与SQL相比。
最后,当我解释您在问题中的链接时,您可以将SQL /数据源视图级别上的度量Rank times Searches
保留为任何值,可能只是0或null
,然后将以下内容添加到计算脚本中:
({[Measures].[Rank times Searches]}, Leaves()) = [Measures].[Rank] * [Measures].[Searches];
从我的观点来看,这个解决方案并不像上面所描述的那样直接计算价值。我还认为它可能会更慢,至少如果您对多维数据集中的某些分区使用聚合。