我真的可以做到这一点的唯一方法是用3计算列。顺序插入这些计算列:
If(Min(If([Age] IS NULL,0,[Age])) over (LastPeriods(3,[Product]))<>0,1) as [BitFlag]
Avg([Age]) over (LastPeriods(3,[Product])) as [TempAvg]
If([BitFlag]=1,[TempAvg]) as [Average]
这会给你下面的结果。您可以忽略/隐藏您不关心的两列。
成绩
+---------+-----+---------+------------------+------------------+
| Product | Age | BitFlag | TempAvg | Average |
+---------+-----+---------+------------------+------------------+
| 1 | | | | |
| 2 | | | | |
| 3 | 10 | | 10 | |
| 4 | 12 | | 11 | |
| 5 | 13 | 1 | 11.6666666666667 | 11.6666666666667 |
| 6 | | | 12.5 | |
| 7 | 18 | | 15.5 | |
| 8 | 19 | | 18.5 | |
| 9 | 20 | 1 | 19 | 19 |
| 10 | 21 | 1 | 20 | 20 |
| 11 | | | 20.5 | |
| 12 | 22 | | 21.5 | |
| 13 | 36 | | 29 | |
| 14 | | | 29 | |
| 15 | 11 | | 23.5 | |
| 16 | 23 | | 17 | |
| 17 | 14 | 1 | 16 | 16 |
+---------+-----+---------+------------------+------------------+
嗨Scsimon,非常感谢您抽出宝贵时间,帮助我在这一个。但我还有一个问题需要修复。我还附加了一张图片,当我使用您提供的相同解决方案时,它无法正常工作。请帮助。 – BULB
@BULB有什么问题?通过您提供的示例数据,它可以很好地工作。你发布的是一个交叉表。我告诉你如何做的是在你的原始数据中插入一个计算列,这是原始问题相关的原因,因为没有聚合。 – scsimon
当我向产品1和2添加数据时,它显示的是产品1和2的平均值。理想情况下,它不应该发生,因为对于产品1,以前的数据不存在3移动平均值。产品2只有产品2和产品1的数据。 – BULB