在 Power BI 中使用 DAX 为每一行计算 "Down factor"
Calculate "Down factor" for each row using DAX in Power BI
我有以下格式的数据:
Machine | Production | Production Factor | Down Factor | Order
--------|------------|-------------------|-------------|------
M1 | 0 | 0 | 0 | 100
M2 | 187370 | 0 | 0 | 115
M3 | 7054 | 0 | 0 | 130
M4 | 39428 | 1 | 24160 | 150
M5 | 6945 | 0 | 0 | 160
M6 | 0 | 1 | 24160 | 181
M7 | 19720 | 1 | 4440 | 200
M8 | 4440 | 1 | 0 | 220
M9 | 30000 | 0 | 0 | 230
M10 | 20000 | 0 | 0 | 240
从数据库中提取机器、生产、生产要素和订单字段
我需要根据升序字段范围内的公式为每台机器计算 "Down Factor":
Down Factor =
SUM ( Production * Production Factor * IF(CurrentRowOrder > RowOrder THEN 1 ELSE 0 ) )
例如 M4 (CurrentRowOrder = 150):
6945 * 0 * 1 (160 > 150) +
0 * 1 * 1 (181 > 150) +
19720 * 1 * 1 (200 > 150) +
4400 * 1 * 1 (220 > 150) +
30000 * 0 * 1 (230 > 150) +
20000 * 0 * 1 (240 > 150) = 24160
M7: (CurrentRowOrder = 200):
4400 * 1 * 1 (220 > 200) +
30000 * 0 * 1 (230 > 200) +
20000 * 0 * 1 (240 > 200) = 4400
使用这种方法计算 "Down Factor" 的一般思路是包含顺序大于计算行顺序的行。
如何在 DAX 中执行此类计算?你能帮忙解答一些疑问吗?
您可以将其作为计算列,如下所示:
DownOrder =
SUMX (
Table1,
Table1[Production] * Table1[Production Factor]
* IF ( Table1[Order] > EARLIER ( Table1[Order] ), 1, 0 )
)
SUMX
遍历第一个参数给出的 table 中的每一行,并对第二个参数中的表达式求和。 EARLIER
函数允许您从(较早的)行上下文中获取值,以便您可以将每一行与当前行进行比较。
你也可以这样写,它应该可以作为衡量标准:
DownOrder =
VAR CurrentOrder = SELECTEDVALUE ( Table1[Order] )
RETURN
SUMX (
FILTER ( ALLSELECTED ( Table1 ), Table1[Order] > CurrentOrder ),
Table1[Production] * Table1[Production Factor]
)
我有以下格式的数据:
Machine | Production | Production Factor | Down Factor | Order
--------|------------|-------------------|-------------|------
M1 | 0 | 0 | 0 | 100
M2 | 187370 | 0 | 0 | 115
M3 | 7054 | 0 | 0 | 130
M4 | 39428 | 1 | 24160 | 150
M5 | 6945 | 0 | 0 | 160
M6 | 0 | 1 | 24160 | 181
M7 | 19720 | 1 | 4440 | 200
M8 | 4440 | 1 | 0 | 220
M9 | 30000 | 0 | 0 | 230
M10 | 20000 | 0 | 0 | 240
从数据库中提取机器、生产、生产要素和订单字段 我需要根据升序字段范围内的公式为每台机器计算 "Down Factor":
Down Factor =
SUM ( Production * Production Factor * IF(CurrentRowOrder > RowOrder THEN 1 ELSE 0 ) )
例如 M4 (CurrentRowOrder = 150):
6945 * 0 * 1 (160 > 150) +
0 * 1 * 1 (181 > 150) +
19720 * 1 * 1 (200 > 150) +
4400 * 1 * 1 (220 > 150) +
30000 * 0 * 1 (230 > 150) +
20000 * 0 * 1 (240 > 150) = 24160
M7: (CurrentRowOrder = 200):
4400 * 1 * 1 (220 > 200) +
30000 * 0 * 1 (230 > 200) +
20000 * 0 * 1 (240 > 200) = 4400
使用这种方法计算 "Down Factor" 的一般思路是包含顺序大于计算行顺序的行。
如何在 DAX 中执行此类计算?你能帮忙解答一些疑问吗?
您可以将其作为计算列,如下所示:
DownOrder =
SUMX (
Table1,
Table1[Production] * Table1[Production Factor]
* IF ( Table1[Order] > EARLIER ( Table1[Order] ), 1, 0 )
)
SUMX
遍历第一个参数给出的 table 中的每一行,并对第二个参数中的表达式求和。 EARLIER
函数允许您从(较早的)行上下文中获取值,以便您可以将每一行与当前行进行比较。
你也可以这样写,它应该可以作为衡量标准:
DownOrder =
VAR CurrentOrder = SELECTEDVALUE ( Table1[Order] )
RETURN
SUMX (
FILTER ( ALLSELECTED ( Table1 ), Table1[Order] > CurrentOrder ),
Table1[Production] * Table1[Production Factor]
)