(本文档仅供参考)
问题描述:
在数据模型的计算列中,当想要用数据库函数聚合某一个数值类型的数据的时候发现会出现如下报错:“计算列表达式解析失败 -> 聚合函数 `sum` 不支持”
问题原因:
出现这个问题主要是因为在Smartbi中计算列的定位不是用来做聚合计算的,做聚合计算可以直接使用计算度量,两者的简单差异如下:
- 计算列:用与数据模型汇总之前的计算,基于表、视图中现有字段列,逐行计算,计算时会早于汇总操作。
- 计算度量:当度量值汇总之后,基于汇总之后的度量值进行二次计算。
详细参考:计算列 vs 计算度量:你真的懂吗?
从数据模型给两者的定位就能看出,聚合函数本身需要数据汇总之后才能进行使用,而计算列在计算时并没有进行汇总操作,所以此时聚合函数拼接到sql中是没有意义的,甚至会导致sql报错。
解决方案:
方法一:使用度量字段代替计算列
在数据模型中,度量本身就会带有汇总的数据,度量在查询的时候会根据其度量指定的汇总方式来拼接对应的聚合函数,如下图中的合计,勾选该度量进行查询时候,查询的sql中默认就会携带sum聚合该度量,所以就不需要计算列再设置聚合函数。另外如果希望聚合之后的值进行二次计算,则可以使用计算度量来处理。
方法二:在查询中直接使用聚合函数
如果在数据查询时先一步进行了汇总,然后想多生成一个聚合字段,此时则需要再sql中添加聚合字段,而不是使用计算列来添加,因为sql查询之后的结果其外层还会嵌套一层sql,会把内层查询看成是子查询,所以对数据模型来说他只是一个查询数据的视图,在计算列里依旧是未聚合的状态,所以想要新增一个聚合字段也可在sql中先行聚和。