首页 > 解决方案 > 如何在PowerBI中执行同一列的先前单元格的总和

问题描述

我正在尝试将 Excel 公式复制到 PowerBI。这是在此处输入图像描述

是否有任何 DAX 来执行此计算((1-0.2)*B2+0.2*C2)。谢谢。

标签: excel-formulasumdaxpowerbi-desktop

解决方案


在 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列仅依赖于 columnB和一个初始值C_1 = 8320,即该B列中的第一项。

现在我们可以用一点 DAX Magic 把它变成一个计算列:

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
    )

推荐阅读