【问题标题】:DAX - Sum rows with the latest dates across multiple columnsDAX - 对多列中具有最新日期的行求和
【发布时间】:2019-09-03 04:25:37
【问题描述】:

我是 PowerPivot / DAX 的新手,我正在分析一个名为 BudgetTable 的表,其中包含 5 列。当项目和属性组合的预算金额发生变化时,用户会在表中添加一个具有新记录日期的新行。例如,在下表中,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

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

【问题讨论】:

    标签: dax powerpivot


    【解决方案1】:

    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

    【讨论】:

    • 感谢您对我的模型进行维度化的提示。我可以看到这如何使事情变得更容易。您的方法似乎假定表格已排序,以便最新日期位于底部。对吗?
    【解决方案2】:

    我会做以下事情:

    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 的回复对您的模型进行维度化是个好主意,但对于这个特定的度量,这不是必需的。

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      相关资源
      最近更新 更多