使用Power BI中的DAX计算每一行的“下降因子”

问题描述 投票:0回答:1

我具有以下数据格式:

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

使用这种方法计算“下降因子”的一般思想是包括行,该行的顺序大于所计算行的顺序。

如何在DAX中执行这种计算?您可以提供一些帮助吗?

powerbi dax calculated-columns calculation
1个回答
0
投票

您可以按如下所示将其作为计算列来进行:

DownOrder =
SUMX (
    Table1,
    Table1[Production] * Table1[Production Factor]
        * IF ( Table1[Order] > EARLIER ( Table1[Order] ), 1, 0 )
)

SUMX遍历第一个参数给出的表中的每一行,并在第二个参数中求和。 EARLIER功能允许您从(较早的)行上下文中获取值,以便可以将每一行与当前行进行比较。

您也可以这样写,它应该可以作为度量:

DownOrder =
VAR CurrentOrder = SELECTEDVALUE ( Table1[Order] )
RETURN
    SUMX (
        FILTER ( ALLSELECTED ( Table1 ), Table1[Order] > CurrentOrder ),
        Table1[Production] * Table1[Production Factor]
    )
© www.soinside.com 2019 - 2024. All rights reserved.