【问题标题】:DAX - LASTNONBLANK per dimensionDAX - 每个维度的 LASTNONBLANK
【发布时间】:2016-09-01 12:14:36
【问题描述】:

我有一张跨部门工资支付的表格(“Y 的天数”= 年初以来的天数,“M 的天数”= 月末的天数)

Department | Salary | Date       | Type            | Days from Y | Days to M
-----------+--------+------------+-----------------+-------------+-----------
Finance    |     71 | 01-01-2016 | Regular payment |           1 |        30
Sales      |   3000 | 20-01-2016 | Regular payment |          20 |        11
Sales      |   -300 | 21-01-2016 | Correction      |          21 |        10
Finance    |   2000 | 01-02-2016 | Regular payment |          32 |        27
Sales      |   3100 | 15-02-2016 | Regular payment |          46 |        12

对于定期付款,需要更正工资以显示为一整月。但是,下个月不能包括上个月的更正(因为新的工资已经规定了)——只包括上个月的更正!

对于销售,那将是:

Date           | Salary | Salary (cum.) | Correction | Salary (corr.) cum.
---------------------------------------------------------------------------
2016           |   5800 |          5800 |            |            
  2016-01      |   2700 |          2700 |       1650 |                4350
    2016-01-20 |   3000 |          3000 |       1650 |                4650
    2016-01-21 |   -300 |          2700 |            |                4350
  2016-02      |   2550 |          5250 |       2040 |                7290
    2016-02-15 |   2550 |          5250 |       2040 |                7290

计算更正本身非常简单:如果是定期付款,则使用该日期计算给定月份-部门组合的更正。

使用LASTNONBLANK 表达式,我可以做出适用于单个部门的正确累积度量:

Salary (corr.) cum := CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction])

但是,这不适用于跨部门 - 对于 2016-01,这将导致错误的总计数器:

Department | Salary | Salary (cum.) | Correction | measure | should be
-----------------------------------------------------------------------
(Total)    |   2771 |          3071 |            |    4721 |      6851    
  Finance  |     71 |            71 |       2130 |    2201 |      2201
  Sales    |   2700 |          3000 |       1650 |    4650 |      4650

如何创建一个可以正确计算每个月的更正以及使总数正确的度量?

(所以基本上它会查看每个部门的最后一次校正(或其他维度),并使用这些总和而不是所有维度的最后一次校正)

【问题讨论】:

    标签: ssas dax ssas-tabular


    【解决方案1】:

    你基本上需要遍历部门。

    Salary (corr.) cum := 
    SUMX (
        Departments,
        CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction])
    )
    

    这应该可以解决问题。

    阿尔伯托

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-18
      • 2015-07-23
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多