【问题标题】:3 month rolling average with Last Value带有最后值的 3 个月滚动平均值
【发布时间】:2019-09-02 15:36:03
【问题描述】:

这是我的问题。我正在尝试使用最后一个值计算每个月(滚动)的 3 个月平均值。

例如:


ID   SCORE DATE 

2           3      3/19

1          * 2      4/19

6           3      5/19            May(avg Mar,Apr,May)  3+*2+3+4/4 =   3

3           4      5/19

4           4      6/19            June(avg April May June) 3+4+4+*3+5/5= 3.8

1          * 3      6/19

6           5      6/19

所以 5 月的平均值将是 3 (12(Mar,Apr,May)/4) 并且 ID 1 Score=2 的值

但 6 月的平均值为 3.8(19(Apr,May,Jun)/5),ID 1 Score=3。

我试图遵循这个 https://community.powerbi.com/t5/Desktop/Rolling-3-Month-Average/m-p/695325#M335440) ,我需要的是过滤或仅传递用于求和的最新值的方法。

Rolling 3msc =
 VAR PeriodEnd =
    LASTDATE ( 'Table'[Date] )
 VAR PeriodStart =
    FIRSTDATE ( DATESINPERIOD ( 'Table'[Date], PeriodEnd, -3, MONTH ) )
 RETURN
    CALCULATE (
        SUM ( 'Table'[Score] ),
        DATESBETWEEN ( 'Table'[Date], PeriodStart, PeriodEnd )
    ) # what I need to figure out how to sum the score based 
        on the last score in this period
 / CALCULATE (
    DISTINCTCOUNT ( 'Table'[ID] ),
    DATESBETWEEN ( 'Table'[Date], PeriodStart, PeriodEnd )
)

【问题讨论】:

  • 我猜你的问题是这些日期和时间函数中的大多数都需要一系列连续的日期。 IE。您需要创建一个包含所有日期的日历,从您的第一个数据日期到您的最后一个数据日期(至少)。在 Calendar 和数据表之间具有 1:* 关系并使用 Calendar[Date] 而不是 Table[Date]
  • 您好,谢谢您的回答。我确实有一个单独的日期表。在这种情况下,我使用同一张表来获取最后三个月的值(所以最后一个日期来自数据集和前 3 个月)。这可以作为滚动平均值,但我不认为是日期限制的情况,而是子-将计算设置为仅获取最近的值以执行求和...我认为
  • 我不确定我是否理解带星号的 [Score] 值的情况。 ID 1=3 是什么意思?
  • 我想要达到的是用户最后得分的平均值。因此,5 月的 ID 1 分数将为 2(May(avg Mar,Apr,May) 3+*2+3+4/4 = 3),而在 6 月,ID 1 的分数将为 3 (6 月(4 月平均 5 月 6 月) 3+4+4+*3+5/5= 3.8)。因为两个 3 个月的平均值都会在计算中包含 4 月,但只考虑用户的最新分数作为总和。我设法通过在这个公式的最后部分使用 DISTINCTCOUNT 来实现其中的一部分,但我不知道如何将这个参数传递给 sum。

标签: powerbi dax


【解决方案1】:

microsfot的例子不正确,可以加一列:

Rolling 3msc = 
    var periodEnd = LASTDATE(DATESINPERIOD(AveMonths[DATE];AveMonths[DATE];1;MONTH))
    var periodStart = FIRSTDATE(DATESINPERIOD(AveMonths[DATE];periodEnd;-3;MONTH))
    return 
        CALCULATE(AVERAGE(AveMonths[SCORE]);
             FILTER(AveMonths; AveMonths[DATE] >= periodStart && AveMonths[DATE] <= periodEnd)) 

最终结果:

您可以在此处看到 4 月的平均值为 (3+2+4)/3 = 3。(3 月 + 4 月 + 5 月)。

不管你一个月有多少价值,它仍然会计算出平均值..

【讨论】:

  • 嗨奥尔德特。非常感谢你为此做的。但我正在寻找的是从用户每月的最后一个分数(这将代表过去 3 个月)中计算的平均值所以用于 5 月 ID 1 平均值的分数(平均 3 月、4 月、5 月)将是 2 就像这样 May(avg Mar,Apr,May) 3+*2+3+4/4 = 3。对于 6 月用户 ID 1 的分数将是 3 ,就像这个 June(avg April May June) 3 +4+4+*3+5/5= 3.8。你觉得这可能吗?
  • 我想帮助你,但你想要的东西很混乱。您的原始数据是否与您在问题中给出的一样?或者这只是你的例子。我需要你的原始数据和你想要的结果(我相信我可以帮助你)。
  • 您好,非常感谢您抽出宝贵的时间。这是数据集的代表。我想要实现的是基于每个用户最后提交的分数(ID)的 3 个月平均值。因此,在这种情况下,如果下个月(例如 June)有来自同一用户的新分数,则应从 ID 1 的最后(提交日期)分数计算平均值,该分数 = 3(分数)并忽略4 月的上一个分数是 ID1 分数 = 2。所以每个用户只有一个分数,这是最后一次提交的分数(按日期),并由此计算平均值。我稍后会添加示例
猜你喜欢
  • 2019-12-16
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多