Quick BI使用lod函数对度量字段聚合后的结果进行范围划分,并查看不同范围下数据分布情况。
问题描述
希望根据订单ID统计出订单量之后,将订单量使用CASE WHEN语句进行范围划分,比如划分为“100个以下”、“100到300之间”、“300以上”;最后在仪表板图表中展示不同维度分组下各个范围订单量情况。为实现上述场景,用表达式CASE WHEN COUNT([order_id])<=100 THEN '100以下' WHEN (COUNT([order_id])>100 and COUNT([order_id])<=300) THEN '300以上' END创建计算字段如下:

但是计算字段这样实现,在图表中该计算字段展示的时候,报错“java.sql.SQLException: Invalid use of group function”:

问题原因
该错误的根本原因是:在GROUP BY子句中直接使用了聚合函数COUNT(),这违反了SQL标准语法。
在 MySQL(及大多数SQL数据库)中,GROUP BY必须基于原始字段或非聚合表达式,不能直接包含 COUNT、SUM等聚合函数。而Quick BI在生成图表SQL时,若将一个“基于度量的条件分组”(如按订单数区间分组)拖入维度区域,可能错误地将其直接放入GROUP BY,导致此报错。
解决方案
将CASE WHEN语句中的聚合函数替换为LOD_INCLUDE函数,转换为非直接的聚合函数即可。
具体按照如下步骤完成:
通过
LOD_INCLUDE{: COUNT([order_id])}计算字段统计出订单量:

对上述计算字段进行条件分组,表达式如下:
CASE WHEN [统计订单量]<=100 THEN '订单量少于等于100' WHEN [统计订单量]>100 AND [统计订单量]<=300 THEN '100到300之间订单量' WHEN [统计订单量]>300 THEN '300以上' ELSE '脏数据' END:

图表中展示不同维度下不同订单量范围中的订单情况如下:


适用于
Quick BI公有云专业版6.0.2