如何在Apache Superset中对按筛选值分组的求和结果计算平均值?
我刚好碰到过类似的需求,在Apache Superset里可以通过自定义计算指标直接实现这个逻辑,不用额外预处理数据,可视化层就能搞定。
具体操作步骤
在你用来展示数值的可视化组件(比如指标卡、数字卡片)中,编辑指标时选择「自定义SQL表达式」,输入以下代码:
AVG(SUM("Time") OVER (PARTITION BY "Project Name"))
逻辑拆解
这个表达式刚好适配你的两种场景:
- 当筛选单个项目时:
SUM("Time") OVER (PARTITION BY "Project Name")会计算出该项目的总时长,再对单个值取平均,结果就是这个项目的总时长本身(比如筛选X时,结果就是27) - 当筛选多个项目时:先算出每个选中项目的总时长,再对这些总时长取平均值(比如筛选X和Y时,就是(27+45)/2=36)
验证逻辑(可选)
如果你想确认逻辑准确性,可以在SQL Lab里跑测试查询,比如筛选X和Y时:
SELECT AVG(project_total) AS final_metric FROM ( SELECT "Project Name", SUM("Time") AS project_total FROM your_table_name WHERE "Project Name" IN ('X', 'Y') GROUP BY "Project Name" ) AS project_totals
查询结果就是36,和我们的自定义指标逻辑完全一致,只是窗口函数把这个嵌套查询简化成了单行表达式。
小提醒
- 注意字段名的大小写匹配,Superset对字段名称的大小写是敏感的
- 这个方法适配展示单一汇总数值的组件,如果是表格类展示每个项目的明细,逻辑会略有不同,但完全符合你要的「根据筛选项目数自动切换展示逻辑」的需求
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

