计算列和度量上的 Dax
Dax on Calculated Column and Measure
我已经在 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]
)
)
矩阵 table 中的输出显示同一产品类别(整个 bean/teas)中每个产品各自的单价:
这意味着度量具有过滤器上下文,但为什么我们 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 将显示各自的单价。
已售数量为原列。
Transaction ID
quantity sold
Qty Sold_1 (Sum)
Qty Sold_2 (Sumx)
Qty Sold_3 (CalSum)
Qty Sold_4 (CalSumX)
131
1
6
6
1
1
192
2
6
6
1
1
460
3
6
6
1
1
为什么 Sumx(能够按行迭代)不在行上下文中显示相应的销售数量并且计算总和不显示所有行的总销售数量,因为它不能在行上下文中按行迭代?
当您写 SUM ( Table[Column] )
时,这与写 SUMX ( Table, Table[Column] )
完全相同,因此当使用只有一列的 SUMX
时,它们是相同的。 SUMX
的灵活性在于您可以编写例如SUMX ( Table, Table[Column] * Table[Column2] )
得到的不仅仅是一个直接的和,在你的 table.
中逐行计算
添加新的计算列时,需要调用 CALCULATE
将 table 行上下文 转换为对应的 过滤上下文。这称为上下文转换,在编写 DAX 时理解它非常重要。如果没有此上下文转换,SUM ( Table[Column] )
(和 SUMX
等价物)将为您提供……该列的总和。不出所料。这与逐行迭代无关。
我已经在 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]
)
)
矩阵 table 中的输出显示同一产品类别(整个 bean/teas)中每个产品各自的单价:
这意味着度量具有过滤器上下文,但为什么我们 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 将显示各自的单价。 已售数量为原列。
Transaction ID | quantity sold | Qty Sold_1 (Sum) | Qty Sold_2 (Sumx) | Qty Sold_3 (CalSum) | Qty Sold_4 (CalSumX) |
---|---|---|---|---|---|
131 | 1 | 6 | 6 | 1 | 1 |
192 | 2 | 6 | 6 | 1 | 1 |
460 | 3 | 6 | 6 | 1 | 1 |
为什么 Sumx(能够按行迭代)不在行上下文中显示相应的销售数量并且计算总和不显示所有行的总销售数量,因为它不能在行上下文中按行迭代?
当您写 SUM ( Table[Column] )
时,这与写 SUMX ( Table, Table[Column] )
完全相同,因此当使用只有一列的 SUMX
时,它们是相同的。 SUMX
的灵活性在于您可以编写例如SUMX ( Table, Table[Column] * Table[Column2] )
得到的不仅仅是一个直接的和,在你的 table.
添加新的计算列时,需要调用 CALCULATE
将 table 行上下文 转换为对应的 过滤上下文。这称为上下文转换,在编写 DAX 时理解它非常重要。如果没有此上下文转换,SUM ( Table[Column] )
(和 SUMX
等价物)将为您提供……该列的总和。不出所料。这与逐行迭代无关。