2017-08-30 76 views

回答

0

我真的可以做到这一点的唯一方法是用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 | 
+---------+-----+---------+------------------+------------------+ 
+0

嗨Scsimon,非常感谢您抽出宝贵时间,帮助我在这一个。但我还有一个问题需要修复。我还附加了一张图片,当我使用您提供的相同解决方案时,它无法正常工作。请帮助。 – BULB

+0

@BULB有什么问题?通过您提供的示例数据,它可以很好地工作。你发布的是一个交叉表。我告诉你如何做的是在你的原始数据中插入一个计算列,这是原始问题相关的原因,因为没有聚合。 – scsimon

+0

当我向产品1和2添加数据时,它显示的是产品1和2的平均值。理想情况下,它不应该发生,因为对于产品1,以前的数据不存在3移动平均值。产品2只有产品2和产品1的数据。 – BULB