如何计算DAX / PowerBI的滚动平均值?

时间:2017-04-17 16:27:58

标签: powerbi dax

在完成StackOverflow PowerBI论坛上的几篇帖子后,我仍然无法弄清楚如何根据给定时间计算滚动平均值 - 在我的情况下,为期30天的滚动平均。

我见过的大多数帖子都提倡与此相同或非常相似的内容:

Rolling Sum :=
CALCULATE (
    [Sales],
    FILTER (
        ALL ( Sales ),
        [Date]
            >= MAX ( Sales[Date] ) - 365
            && [Date] <= MAX ( Sales[Date] )
    )
)

(代码取自this post

......然而,我似乎无法获得正确的价值观。

就我而言,我有以下内容:

  1. 给定贷款的“截止日期”(列)
  2. 贷款计数(措施)
  3. 结算长度(列) - 结算贷款的时间长度(以天为单位)
  4. 我想要计算的是任何一天的平均滚动30天。我编码如下:

    Rolling Average = 
        CALCULATE (
            SUM(Query1[Closing_Length])/[Loan Count],                                 
            FILTER (
                ALL ( Query1 ),                             
                [Closing Date].[Date]                                  
                    >= MAX ( Query1[Closing Date] ) - 30
                    && [Closing Date] <= MAX (  Query1[Closing Date] )
            )
        )
    

    为了检查结果,我使用了一个可视化过滤器来检查一个月的数据,结果如下:

    enter image description here

    注意底部的总计行;在这一特定时期内,共有102笔贷款,总共需要3922天才能完成。我想计算的平均值是3922/102,应该等于大约38.45天。相反,我们看到了42.

    我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

基于衡量标准的解决方案:

Rolling Average Measure =
VAR A =
    SUMX (
        FILTER (
            ALL ( 'Query' ),
            'Query'[Closing Date] <= MAX ( 'Query'[Closing Date] )
        ),
        ROUND ( 'Query'[Closing Length], 2 )
    )
VAR B =
    SUMX (
        FILTER (
            ALL ( 'Query' ),
            'Query'[Closing Date] <= MAX ( 'Query'[Closing Date] )
        ),
        ROUND ( 'Query'[Loan Count], 2 )
    )
RETURN
    A / B

基于计算列的解决方案:

Rolling Average =
VAR CurrentDate = 'Query'[Closing Date]
VAR T =
    FILTER ( 'Query', [Closing Date] <= CurrentDate )
RETURN
    ROUND ( SUMX ( T, 'Query'[Closing Length] ) / SUMX ( T, [Loan Count] ), 2 )

打印屏幕 Rolling Average Measure