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

MDX syntax for DAX measures calculated with AVERAGE()

我在 Excel 中有以下表达式可以正常工作。

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

使用以下 DAX 公式的产品评论计数度量。

Product Review Count:=COUNTROWS(ProductBV)

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

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

'Not working correctly' 表达式如下:

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

总而言之,我的数据很简单。我有一个数据 table 连接到日历 table,其中包含我的产品名称、评级、日期和评论状态。

在我的控制面板中,我的日期 ($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 |
+-----------------+-------------------+------------+----------------+

谁能告诉我为什么会这样以及如何解决它?

这会产生一组 CUBESET

一套有一个计数,所以我可以理解 COUNTROWS 将正常运行。

如果您将一组成员输入 AVERAGE,它会根据哪个度量取平均值?这似乎是非决定性的?

您能否将 ProductBV[Rating] 返回的集合提供给后续的多维数据集函数,该函数指定您想要计算平均值的度量值?

当我看到您的问题时,我想知道如果您在 PowerPivot 中建模,为什么还要使用 Excel 公式和控件来创建仪表板。 PowerPivot 可让您以更稳健可靠的方式分析和可视化数据。

您的初始方法非常复杂,考虑到以下因素,很难维持:

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

这是我使用 Pivot Table 连接到您的 PowerPivot 模型构建的仪表板。

DOWNLOAD THE EXCEL FILE HERE

为了构建此仪表板,我使用了四种 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] )
            )
        )

在措施奏效的情况下,您可以创建两个枢轴 Table,一个用于显示积极推动者,另一个用于显示消极推动者。

Note my Excel UI is in spanish, I hope you don't get stuck with this. Just follow the instructions and search in Google, there are plenty resources about Pivot Tables.

Rows 窗格中添加 Product Name,在 Values 中添加 Last WeekThis WeekPositive MovementNegative Movement (根据您正在构建的 Pivot Table)措施。

一旦你建立了 table,你必须获得 TOP X Product Names

在每个 Pivot Table 中单击行标记图标过滤器(以下设置适用于 Positive Movers Pivot Table):

并使用这些设置:

在过滤时将 Positive Movement 更改为 Negative Movement 以获取负面运动中的前 5 Product Names table。

虽然您可以纯粹在 DAX 中获得前 5 名产品名称,但我认为最好使用 Pivot Table 筛选器选项,让它动态显示任意数量的顶级产品(可能是新的将来的要求)而无需修改基础 DAX。

然后你只需要添加条件格式就大功告成了。

如果这有帮助,请告诉我。