Quicksight计算各schema平均deal数时所有行返回unavailable问题
问题原因
- SPICE窗口函数存在计算上下文限制:
avgOver等窗口函数不支持直接将未声明计算层级的聚合函数作为输入参数,你尝试的两种写法都存在聚合函数嵌套窗口函数的层级冲突,SPICE无法解析计算逻辑,因此返回unavailable。 - 原计算逻辑本身不符合需求:你需要统计的是「每个schema下不同deal_id的出现次数的平均值」,原写法没有按deal_id拆分统计维度,就算不报错也无法得到预期结果。
正确实现方案
分两步创建计算列即可得到预期结果:
- 第一步创建预聚合的单deal出现次数字段,字段名可设为
deal_occur_cnt,公式如下:countOver({deal_id}, [{schema name}, {deal_id}], PRE_AGG)
该字段会计算每个schema + deal_id组合的总出现次数,对应你的示例数据,schema a下deal_id=1的行该值为2,deal_id=2的行该值为1,schema b下所有行该值为1。 - 第二步创建按schema分组的平均值字段,字段名可设为
avg_deal_cnt,公式如下:avgOver(distinct({deal_occur_cnt}), [{schema name}], PRE_AGG)
这里加distinct是为了避免同一个deal_id的多次行记录重复参与平均值计算,最终得到的结果和你预期完全一致:schema a对应1.5,schema b对应1.0。
如果是直接制作图表不需要存储计算列,可以直接把
schema name拖入维度栏,把deal_occur_cnt拖入值栏并将聚合方式设置为「平均值」,同时把deal_id加入维度栏后设置为隐藏,即可得到正确的图表展示结果。
内容的提问来源于stack exchange,提问作者Don Giulio
相关产品推荐
相关产品推荐

