DAX-SUMX()中的TOPN()用于多个事务

时间:2019-10-16 09:07:42

标签: powerbi dax calculated-columns

我需要你的帮助。

我正在尝试创建一个计算列,以求和每种产品最近两个日期的销售额(所有日期均无销售额!)。

我尝试使用该计算:

CALCULATE (
    SUMX ( TOPN ( 2; 'Table'; 'Table'[date_ID] ); 'Table'[Sale] );
    ALLEXCEPT ( Table; 'Table'[Product_ID] )
)

但这仅适用于每个日期每个产品ID都有一笔销售的情况。

如果每个日期和商品ID都有很多交易,该怎么办?

下面我有一张表格,其中有(过滤)一个日期和一种产品。

enter image description here

现在,我创建了一个计算列,该列汇总了每个日期和产品ID的所有交易(以供参考)。 这是

Calculated Column 2 =
CALCULATE (
    SUMX ( Table; Table[Sale] );
    ALLEXCEPT ( Table; 'Table'[Date]; 'Table'[Product_ID] )
)

enter image description here

现在是困难的部分。 如果要对每种产品的最后两个日期的交易进行汇总,请进行以下计算:

Calculated Column 1 =
VAR SumProd =
    CALCULATE (
        SUMX ( Table; Table[Sale] );
        ALLEXCEPT ( Table; Table[Date]; Table[Product_ID] )
    )
RETURN
    CALCULATE (
        SUMX ( TOPN ( 2; 'Table'; 'Table'[Date] ); SumProd );
        ALLEXCEPT ( Table; Table[Product_ID]; Table[Date] )
    )

enter image description here

问题:

  1. 计算求和每个类别中的所有值

示例:在表中,您看到"Calculated column 1"=7571200,即27040 *交易数量?我只想要值27040。

  1. 由于某些原因,TOPN()不起作用。如果我将N_Value=2更改为N_Value=3,计算不会改变吗?

请,有人知道我的计算出了什么问题吗?

谢谢。

Br, 雅各布

1 个答案:

答案 0 :(得分:0)

根据您的度量,SumProd是您要为表中的每一行求和的常数。这不是你想要的。

我建议更像这样的东西:

Calculated Column 1 =
VAR LastTwoDates =
    CALCULATETABLE (
        VALUES ( Table[Date] );
        TOPN ( 2; ALLEXCEPT ( Table; Table[Product_ID] ); Table[Date] )
    )
RETURN
    CALCULATE (
        SUM ( Table[Sale] );
        ALLEXCEPT ( Table; Table[Product_ID] );
        Table[Date] IN LastTwoDates
    )

在此,我们首先计算与Product_ID关联的前2个日期的列表,并将其存储为变量。然后,在计算Sale的总和时,将其用作过滤器。


我不太肯定这种确切的语法会起作用,但是我希望它会为您指明一个更好的方向。


事实证明,我的代码未按预期工作。尝试以下方法:

Calculated Column 1 =
VAR ProductDates =
    CALCULATETABLE (
        VALUES ( Table1[Date] );
        ALLEXCEPT ( Table1; Table1[Product_ID] )
    )
VAR LastTwoDates = TOPN ( 2; ProductDates; [Date] )
RETURN
    CALCULATE (
        SUM ( Table1[Sale] );
        ALLEXCEPT ( Table1; Table1[Product_ID] );
        Table1[Date] IN LastTwoDates
    )