使用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 Week
, This Week
和Positive Movement
或Negative 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]
返回的集合提供给随后的立方体函数,该函数指定您希望具有的平均值的度量值?