按日期分组并以不同方式过滤的不同列上的累积总和

时间:2018-12-04 20:59:44

标签: powerbi dax

我想基于三个不同的列创建三个累积和列。每个累积总和必须如下计算:

  • 应在dte列中按同一日期分组
  • 在完成累加和运算之前,应对列A进行ASC过滤
  • 在对B和C列进行累积和运算之前,应对其进行DESC过滤。

我应该创建彼此分开的列A,B,C的新表吗?

+-----------+----+----------+---+----+-----+----------+----------+----------+
|    dte    | id | last_dte | a | b  |  c  | a_cumsum | b_cumsum | c_cumsum |
+-----------+----+----------+---+----+-----+----------+----------+----------+
| 12/4/2018 |  1 | 3-Dec    | 2 |  8 | 200 |        2 |          |          |
| 12/4/2018 |  2 | 3-Dec    | 2 |  5 | 150 |        4 |          |          |
| 12/4/2018 |  8 | 3-Dec    | 2 | 25 |  88 |        6 |          |          |
| 12/4/2018 |  9 | 3-Dec    | 2 | 89 | 456 |        8 |          |          |
| 12/3/2018 | 12 | 2-Dec    | 2 |  1 | 124 |        2 |          |          |
| 12/3/2018 | 13 | 2-Dec    | 2 |  5 |  46 |        4 |          |          |
| 12/3/2018 | 19 | 2-Dec    | 2 | 22 |  10 |        6 |          |          |
+-----------+----+----------+---+----+-----+----------+----------+----------+

1 个答案:

答案 0 :(得分:2)

这是Cumulative Sum DAX Pattern的经典示例。

您不需要单独的表。

作为计算列

a_cum = 
VAR CurrentID = [id]
RETURN
    CALCULATE (
        SUM ( Table01[a] ),
        FILTER (
            ALLEXCEPT ( Table01, Table01[dte] ),
            Table01[id] <= CurrentID
        )
    )

b_cumc_cum列是类似的。只需切换出您要引用的列,并更改DESC(而不是ASC)的不等式的方向即可。 例如,

b_cum = 
VAR CurrentID = [id]
RETURN
    CALCULATE (
        SUM ( Table01[b] ),
        FILTER (
            ALLEXCEPT ( Table01, Table01[dte] ),
            Table01[id] >= CurrentID
        )
    )

这应该给你这样一个表:

Calculated Columns


请注意,这些按id列对累积总和进行排序(a_cum的ASC,b_cumc_cum的降序)。如果您需要按列的值而不是按id的值进行排序,那么我建议为每个列添加一个计算列,以根据需要对它们进行排名。然后,使用rank列而不是DAX中的id列。