首页 > 解决方案 > Dax 在计算列和度量上

问题描述

我已经对 Power BI 中的行上下文和筛选上下文的可迭代和不可迭代筛选器进行了实验。

我的理解是度量有过滤上下文,而计算列有行上下文

这是衡量的 Dax:

UnitPrice (Sum) = 
SUM(
    'Sales by Store'[unit_price]
)


UnitPrice (Sumx) = 
SUMX(
    'Sales by Store',
    'Sales by Store'[unit_price]
)


UnitPrice (CalSum) = 
CALCULATE(
    SUM(
        'Sales by Store'[unit_price]
    )
)


UnitPrice (CalSumx) = 
CALCULATE(
    SUMX(
        'Sales by Store',
        'Sales by Store'[unit_price]
    )
)

矩阵表中的输出显示同一产品类别(整豆/茶)中每种产品的各自单价:

措施

这意味着度量具有过滤上下文,但为什么我们 Sum 和 Calculate Sum 不会为每个产品显示相同数量的产品组的总单价,因为两个 Dax 函数都不可迭代?

对于计算列,我在 Power Query 中使用另一个名为 Quantity Sold 的列。

Qty Sold_1 (Sum) = 
SUM(
    'Sales by Store',
    'Sales by Store'[quantity_sold]
)

Qty Sold_2 (Sumx) = 
SUMX(
     'Sales by Store',
     'Sales by Store'[quantity_sold]
)


Qty Sold_3 (CalSum) = 
CALCULATE(
    SUM(
        'Sales by Store'[quantity_sold]
    )
)


Qty Sold_4 (CalSumx) = 
CALCULATE(
    SUMX(
        'Sales by Store',
        'Sales by Store'[quantity_sold]
    )
) 

输出为 Sum,Sumx 将显示所有行的总金额,而 Calculate Sum 和 Calculate Sumx 将显示它们各自的单价。售出的数量是原始列。

交易编号 售出数量 售出数量_1(总和) 已售数量_2(总和) 售出数量_3 (CalSum) 售出数量_4 (CalSumX)
131 1 6 6 1 1
192 2 6 6 1 1
460 3 6 6 1 1

为什么 Sumx(能够逐行迭代)没有显示在行上下文中销售的相应数量,并且计算总和没有显示所有行的总销售量,因为它不能在行上下文中逐行迭代?

标签: daxpowerquerypowerbi-desktop

解决方案


当您编写时,SUM ( Table[Column] )这与编写时完全相同,SUMX ( Table, Table[Column] )因此当SUMX仅使用一列时,它们是相同的。的灵活性SUMX在于,您可以编写例如SUMX ( Table, Table[Column] * Table[Column2] )得到的东西,而不仅仅是一个直接的总和,在您的表中逐行计算。

当您添加一个新的计算列时,您需要调用CALCULATE将您的表格行上下文转换为相应的过滤器上下文。这称为上下文转换,在编写 DAX 时理解这一点非常重要。如果没有这个上下文转换,SUM ( Table[Column] )(和SUMX等价的)会给你......列的总和。正如预期的那样。这与逐行迭代无关。


推荐阅读