MDX查询和产品做加权平均

MDX查询和产品做加权平均,mdx,olap,bids,Mdx,Olap,Bids,我正在MS BIDS中构建一个立方体。我需要创建一个计算出的度量,它返回由搜索次数加权的秩值的加权平均值。我希望在任何级别计算该值,无论应用了什么维度来分解数据 我正在尝试做如下事情: 我有一个称为[Rank Search Product]的度量,我希望在尽可能低的级别应用它,然后将它的所有值相加 IIf([Measures].[Searches] IS NOT NULL, [Measures].[Rank] * [Measures].[Searches], NULL) 然后我的加权平均法使用

我正在MS BIDS中构建一个立方体。我需要创建一个计算出的度量,它返回由搜索次数加权的秩值的加权平均值。我希望在任何级别计算该值,无论应用了什么维度来分解数据

我正在尝试做如下事情:

我有一个称为[Rank Search Product]的度量,我希望在尽可能低的级别应用它,然后将它的所有值相加

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)
我也试着按照这个链接中的解释

当前将我的数据加载到Excel中的数据透视表是返回值!用于所有自定义度量值的计算


请停下来

首先,您需要一个中间度量,比如说,
Rank times search
,在多维数据集中。实现这一点的最有效方法是在处理度量值组时计算它。您可以将事实表扩展一列e。G或在数据源视图中添加命名计算。此列的SQL表达式类似于
Searches*Rank
。在多维数据集定义中,将此度量的聚合函数设置为
Sum
,并使其不可见。然后将加权平均值定义为

[Measures].[Rank times Searches] / [Measures].[Searches]
或者,为了避免对搜索的零/空值产生恼人的结果:

IIf([Measures].[Searches] <> 0, [Measures].[Rank times Searches] / [Measures].[Searches], NULL)
然后MDX引擎将为您自动应用所有维度的所有内容

在第二个表达式中,
0
测试包括一个
null
测试,在数值上下文中,与SQL不同,MDX将null计算为零

最后,在我解释问题中的链接时,您可以将SQL/数据源视图级别上的度量值
秩次搜索
保留为任何值,可能仅为0或
null
,然后将以下内容添加到计算脚本中:

({[Measures].[Rank times Searches]}, Leaves()) = [Measures].[Rank] * [Measures].[Searches];

从我的观点来看,这个解决方案并不像直接计算上述值那样清晰。我还认为它可能会慢一些,至少如果您对多维数据集中的某些分区使用聚合的话。

您好,谢谢您的回复。我已经试过了,但还是遇到了同样的问题。我已经更新了我的问题,以显示我正在尝试什么。谢谢!在数据源视图中添加名称计算是一个好主意,我从来没有想到过。现在很好用,谢谢。
Divide([Measures].[Rank times Searches], [Measures].[Searches], NULL)
({[Measures].[Rank times Searches]}, Leaves()) = [Measures].[Rank] * [Measures].[Searches];