如何在LookML中创建支持筛选的三年期资金平均值Measure?
LookML 三年时间窗口资金平均值 Measure 实现方案
原代码问题分析
- 日期逻辑错误:
CURRENT_DATE() -3是对日期做减3天操作,而你的year字段是年份数值(如2022),两者类型不匹配,导致判断逻辑完全失效。 - 未适配筛选器需求:硬编码的时间范围无法支持用户自定义选择1975-2023之间任意三年的窗口。
正确实现方式
方案1:基于筛选器选定年份范围计算平均值
如果用户通过Looker探索界面的筛选器,直接选择具体的三年年份(比如2020、2021、2022),不需要在Measure里额外写时间判断,直接计算筛选后的数据平均值即可:
measure: three_year_avg_funding { type: average label: "3 year avg. funding" sql: ${funding} ;; value_format_name: usd }
使用时仅需给year维度添加筛选条件,选择连续三年即可得到你期望的结果。
方案2:动态计算滚动三年窗口平均值
如果需要自动计算每个年份对应的「当前年份+前两年」的滚动平均值(比如选2022年时,自动包含2020-2022的数据),可以用SQL窗口函数实现:
measure: rolling_three_year_avg_funding { type: average label: "Rolling 3 Year Avg. Funding" sql: AVG(${funding}) OVER ( PARTITION BY ${person} ORDER BY ${year} ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) ;; value_format_name: usd }
这个实现会按person分组、year排序,自动计算每个年份对应的近三年资金平均值,用户可通过筛选年份查看对应窗口的结果。
样本数据验证结果
用方案1筛选year为2020、2021、2022,得到的结果与你期望完全一致:
| person | 3 year avg. funding |
|---|---|
| Amy | 24,000 |
| Josh | 12,000 |
内容的提问来源于stack exchange,提问作者dalek_fred
相关产品推荐
相关产品推荐

