Рассчитайте «коэффициент понижения» для каждой строки, используя DAX в Power BI - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть следующий формат данных:

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

Поля Machine, Production, Production Factor и Order извлекаются из базы данных. Мне нужно вычислить "Down 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

Общая идея вычисления «Фактора снижения» с использованием такого подхода состоит в том, чтобы включить строки, порядок которых больше, чем порядок вычисляемой строки.

Как выполнить такой расчет в DAX? Можете ли вы помочь с некоторыми вопросами?

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете сделать это в виде вычисляемого столбца следующим образом:

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]
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...