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

时间:2016-10-27 21:06:23

标签: excel mdx powerpivot

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

=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])

'工作不正常'表达如下:

 =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")

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

用户可以通过下拉菜单更改我的信息中心内的日期($ 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 |
+-----------------+-------------------+------------+----------------+

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

2 个答案:

答案 0 :(得分:2)

这会产生一组CUBESET

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

如果您将一组成员提供给AVERAGE哪个衡量标准是平均值?这似乎不是决定因素吗?

您可以将ProductBV[Rating]返回的集合提供给后续的多维数据集函数,该函数指定您希望获得平均值的度量吗?

答案 1 :(得分:1)

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

您最初的方法非常复杂,很难考虑到这一点:

  • 只要将新产品添加到您的来源,您就必须编辑信息中心。
  • Excel函数容易出错,因为它们期望特定值作为参数,用户可能会修改它导致错误。
  • PowerPivot计算的执行速度比Excel函数快,特别适用于大型数据集。
  • 您无法向用户提供与数据的多少互动。

这是我使用与PowerPivot模型连接的数据透视表构建的仪表板。

enter image description here

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] )
            )
        )

通过测量工作,您可以创建两个数据透视表,一个用于显示正向移动器,另一个用于显示负向移动器。

  

注意我的Excel用户界面是西班牙语,我希望你不要被这个困住。只需按照说明操作并在Google中搜索,就会有很多关于数据透视表的资源。

enter image description here

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

enter image description here

一旦你建立了表格,就必须获得TOP X Product Names

在每个数据透视表中单击行标记图标过滤器(以下设置适用于Positive Movers数据透视表):

enter image description here

并使用以下设置:

enter image description here

在过滤时,为Positive Movement更改Negative Movement以获取否定移动表中的前5 Product Names

虽然您可以完全使用DAX获得前5个产品名称,但我认为最好使用数据透视表过滤器选项,使其适用于任意数量的顶级产品(未来可能会成为新的产品)需要修改底层DAX。

然后你只需要添加条件格式就可以了。

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