使用AVERAGE()计算的DAX度量的MDX语法

我在Excel中有以下expression,工作正常。

=CUBESET("ThisWorkbookDataModel", "TopCount( [ProductBV].[Product Name].Children,10, sum( ( [Calendar].[Week Ending].[All].[1/6/2013]:[Calendar].[Week Ending].[All].["&TEXT($E$2,"m/d/yyyy")&"], [ProductBV].[Moderation Status (ALL)].[All].["&$E$3&"] ), [Measures].[Product Review Count] ) )", "Top 10 to date") 

“产品检查计数”度量使用以下DAX公式。

 Product Review Count:=COUNTROWS(ProductBV) 

但是,当我将DAX度量更改为使用AVERAGE函数(Product Avg Review)时,CUBESET函数无法正常工作。 它仍然有正确数量的CUBESET中的项目,但是当我使用CUBERANKEDMEMBER(1-10)时,它没有显示出平均评分前10位的产品。

 Product Avg Review:=AVERAGE(ProductBV[Rating]) 

下面的expression不正确:

  =CUBESET("ThisWorkbookDataModel", "TopCount( [ProductBV].[Product Name].Children,10, sum( ( [Calendar].[Week Ending].[All].[1/6/2013]:[Calendar].[Week Ending].[All].["&TEXT($E$2,"m/d/yyyy")&"], [ProductBV].[Moderation Status (ALL)].[All].["&$E$3&"] ), [Measures].[Product Avg Review] ) )", "Top 10 to date") 

总而言之,我的数据非常简单。 我有一个数据表连接到日历表,其中包含我的产品名称,评级,date和审查状态。

在我的仪表板中,我的date($ E $ 2)和审查状态($ E $ 3)可以由用户通过下拉菜单进行更改。

 +-----------------+-------------------+------------+----------------+ | Submission Date | Moderation Status | Product ID | Overall Rating | +-----------------+-------------------+------------+----------------+ | 10/23/2016 | APPROVED | Product 1 | 5 | | 10/23/2016 | APPROVED | Product 2 | 5 | | 10/23/2016 | APPROVED | Product 3 | 5 | | 10/23/2016 | REJECTED | Product 3 | 3 | | 10/23/2016 | REJECTED | Product 4 | 3 | +-----------------+-------------------+------------+----------------+ 

谁能告诉我为什么发生这种情况,以及如何解决?

当我看到你的问题时,我想知道为什么你使用Excel公式和控件创build仪表板,如果你有你在PowerPivot中build模。 PowerPivot允许您以更健壮和可靠的方式分析和可视化数据。

你最初的方法非常复杂,很难保证考虑到:

  • 每当将新产品添加到源中时,您都必须编辑仪表板。
  • Excelfunction很容易出错,因为他们期望一个特定的值作为参数,用户可以修改它,导致错误。
  • PowerPivot计算比Excel函数执行得更快,特别适用于大型数据集。
  • 您无法为您的用户提供多less与数据的交互。

这是我使用Pivot Tables连接到PowerPivot模型的仪表板。

在这里输入图像描述

在这里下载EXCEL文件

为了构build这个仪表板,我使用了四个DAX度量:

 This Week := CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) ) ) 

 Last Week = CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) - 7 ) ) 

 Positive Movement := ( CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) - 7 ) ) - CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) ) ) ) * -1 

 Negative Movement := CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) - 7 ) ) - CALCULATE ( [Product Avg Review], FILTER ( ALL ( Calendar ), Calendar[Week Ending] <= MAX ( Calendar[Week Ending] ) ) ) 

通过采取措施,您可以创build两个数据透视表,一个用于显示积极推动者,另一个用于显示消极推动者。

注意我的Excel用户界面是用西class牙文,我希望你不要被这个卡住了。 只要按照说明和谷歌search,有大量的资料透视表。

在这里输入图像说明

在“ Rows窗格中,添加Product Name ,在Values添加Last WeekThis WeekPositive MovementNegative Movement (根据您正在build立的数据透视表)度量。

在这里输入图像说明

一旦你build立了桌子,你必须得到TOP X Product Names

在每个数据透视表中,单击行标记图标filter(以下设置用于正向移动器数据透视表):

在这里输入图像说明

并使用这些设置:

在这里输入图像说明

在进行筛选以获得负面移动表中的前5个Product Names时,更改Negative Movement Positive Movement

虽然您可以纯粹在DAX中获得前5名的产品名称,但我认为最好使用Pivot Tablefilter选项,使其在任何数量的顶级产品(未来可能是一个新的需求)都是dynamic的,而无需修改底层的DAX。

然后你只需要添加条件格式,你就完成了。

让我知道这是否有帮助。

这产生一个集合CUBESET

一套有一个计数,所以我可以明白, COUNTROWS将正常运作。

如果你把一组成员送入AVERAGE ,那么它的平均值是多less? 这似乎是非决定性的?

您可以将ProductBV[Rating]返回的集合提供给随后的立方体函数,该函数指定您希望具有的平均值的度量值?