Как выполнить суммирование предыдущих ячеек того же столбца в PowerBI - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь скопировать формулу Excel в PowerBI. Это enter image description here

Есть ли DAX для выполнения этого вычисления ((1-0.2) * B2 + 0.2 * C2 ). Спасибо.

1 Ответ

0 голосов
/ 16 апреля 2020

Не существует встроенного способа сделать относительную ссылку на строку в DAX, поэтому вам нужно явно указать ей, на какую строку ссылаться.

CalculatedColumn =
VAR PrevDate =
    MAXX (
        FILTER ( Table1, Table1[Date] < EARLIER ( Table1[Date] ) ),
        Table1[Date]
    )
VAR B = LOOKUPVALUE ( Table1[B], Table1[Date], PrevDate )
VAR C = LOOKUPVALUE ( Table1[C], Table1[Date], PrevDate )
RETURN
    ( 1 - 0.2 ) * B + 0.2 * C

Редактировать:

Поскольку вы пояснили, что хотите ссылаться на тот же столбец, который вы определяете, я знаю, как это сделать, единственный способ создать формулу закрытой формы для использования, как в мой ответ здесь .

С помощью рекуррентного отношения

C_(n+1) = 0.8 * B_n + 0.2 * C_n

мы можем переписать это в терминах C_1 следующим образом:

C_n = 0.8 * ( sum_(i=1)^(n-1) ( B_i * 0.2^(n-i-1) ) ) + 0.2^(n-1) * C_1

Здесь все Столбец C зависит только от столбца B и одного начального значения C_1 = 8320, которое является первым членом в столбце B.

Теперь мы можем превратить его в вычисляемый столбец с маленький DAX Magi c:

ColumnC = 
VAR C1 = MAXX ( TOPN ( 1, TableN, TableN[Date], ASC ), [B] )
VAR N = RANK.EQ ( [Date], TableN[Date], ASC )
VAR SumTable =
    ADDCOLUMNS (
        FILTER (
            SELECTCOLUMNS (
                TableN,
                "i", RANK.EQ ( [Date], TableN[Date], ASC ),
                "B_i", [B]
            ),
            [i] <= N - 1
        ),
        "B_i Term", POWER ( 0.2, N - [i] - 1 ) * [B_i]
    )
RETURN
    IF (
        N > 1,
        0.8 * SUMX ( SumTable, [B_i Term] ) + POWER ( 0.2, N - 1 ) * C1,
        0
    )
...