DAX-汇总多列中具有最新日期的行

时间:2019-09-03 04:25:37

标签: dax powerpivot

我是PowerPivot / DAX的新手,正在分析一个有5列的名为BudgetTable的表。当“项目”和“属性”组合的预算金额更改时,用户将向表中添加新行以及新的记录日期。例如,在下表中,2/1 / 19、3 / 1 / 19、4 / 1/19和5/1/19记录是先前项目和属性组合的更新。

ID  Item  Attribute   Budget Amount  Record Date
1     A      AA          $1000         1/1/19
2     A      AA          $2000         2/1/19
3     A      BB          $3000         1/1/19
4     A      BB          $4000         3/1/19
5     B      AA          $5000         1/1/19
6     B      AA          $6000         5/1/19
7     B      BB          $7000         1/1/19
8     B      BB          $8000         4/1/19

我想定义一种度量(预算金额之和),该度量使用每个项目和属性组合的最新日期汇总预算金额。

我尝试过:

Sum of Budget Amount:=CALCULATE([BudgetTable], FILTER(BudgetTable, BudgetTable[Record Date]=Max(BudgetTable[Record Date])

但是,这会产生一个如下所示的数据透视表:

Item   Attribute   Sum of Budget Amount
 A                        $4000
           AA             $2000
           BB             $4000
 B                        $6000
           AA             $6000
           BB             $8000

预期的数据透视表如下:

Item     Attribute   Sum of Budget Amount
 A                        $6000
           AA             $2000
           BB             $4000
 B                       $14000
           AA             $6000
           BB             $8000

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

1-从事实表创建维度:

      Calendar = CALENDARAUTO()
      ITEM = VALUES(Budget[Item])
      ATTRIBUTE = VALUES(Budget[Attribute])

2-创建模型以设置关系:

Modelling

3-创建可以回答问题的方法:

Total Budget = 
  SUMX(
     'ITEM';
      SUMX(
         'ATTRIBUTE';
          CALCULATE(
             Sum(Budget[Budget Amount]);
             LASTNONBLANK(
                 'Calendar'[Date];
                 COUNTROWS(RELATEDTABLE(Budget))
             )
         )
     )
 )

4-结果

Here you can see the result

答案 1 :(得分:0)

我将执行以下操作:

Measure =
// SUMX iterates the table in its arg1, evaluating the expression in arg2
// for each row of the table.
SUMX (
    // Output of GROUPBY is a two-column table of unique combinations
    GROUPBY (
        'BudgetTable',
        'BudgetTable'[Item],
        'BudgetTable'[Attribute]
    ),
    VAR MaxDate = CALCULATE ( MAX ( 'BudgetTable'[Record Date] ) ) // max date for current row
    RETURN
        CALCULATE (
            'SUM ( 'BudgetTable'[Amount] ),
            'BudgetTable'[Record Date] = MaxDate
        )
)

根据@JBfreefolks的响应来对模型进行尺寸标注是一个好主意,但是对于此特定度量而言则不必要。