dax - 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(能够逐行迭代)没有显示在行上下文中销售的相应数量,并且计算总和没有显示所有行的总销售量,因为它不能在行上下文中逐行迭代?
解决方案
当您编写时,SUM ( Table[Column] )
这与编写时完全相同,SUMX ( Table, Table[Column] )
因此当SUMX
仅使用一列时,它们是相同的。的灵活性SUMX
在于,您可以编写例如SUMX ( Table, Table[Column] * Table[Column2] )
得到的东西,而不仅仅是一个直接的总和,在您的表中逐行计算。
当您添加一个新的计算列时,您需要调用CALCULATE
将您的表格行上下文转换为相应的过滤器上下文。这称为上下文转换,在编写 DAX 时理解这一点非常重要。如果没有这个上下文转换,SUM ( Table[Column] )
(和SUMX
等价的)会给你......列的总和。正如预期的那样。这与逐行迭代无关。
推荐阅读
- unity3d - unity and audio : 如何处理多个音频
- node.js - 从 express post 请求将项目推送到嵌套数组
- join - Qlik Sense:左连接两个常驻表
- c# - PDF扔到浏览器控制台,不下载
- sql-server - 服务代理消息流
- java - java内部私有类中的getter setter
- javascript - jQuery:查找 div 中的所有表并重置类和属性
- vb.net - 返回错误值的简单 if 语句逻辑
- sql - 如何插入一行并附加在行号上以强制唯一性?
- typescript - 如何使用 Jest 和 TypeScript 模拟第三方 nodejs 模块功能?