有关quick bi中lod_include函数有多个过滤条件报错问题分析

发布时间:2024年01月22日

一、Quick BI中的lod_ include函数

lod_ include {维度1[,维度2]...:聚合表达式[:过滤条件]}

作用:将表达式中的维度一起作为分组依据进行订算。其中,

1)??? 维度1[,维度2]... :声明维度,指定聚合表达式要连接到的一个或多个维度。使用逗号分隔各个维度。

2)??? 聚合表达式:聚合表达式是所执行的计算,用于定义目标维度。

3)??? 过滤条件:可以通过对前面的声明维度设定条件进行过滤,非必须。

二、问题描述

在Quick BI数据集新建计算字段“卷烟订单数量= lod_include{[是否卷烟],[类型]:COUNT(distinct [流水号]):[是否卷烟]='卷烟',[类型]='零售单'}”。

注:在新建字段时lod_include函数不能换行,否则会出错。

在Quick BI仪表板中添加指标图计算,结果报错:

三、问题分析

查看SQL代码

SELECT

? LOD_TP_0.`LOD_61D3EE39D3B393` AS LOD_0

FROM

? (

??? SELECT

????? '-' AS T_ALA_2_

??? FROM

????? `terminaldata2`.`sales` AS ASE_T_1_

??? LIMIT

????? 0, 1

? ) AS LOD_TM

? CROSS JOIN (

??? SELECT

????? SUM(LOD_TR.`LOD_measure_result`) AS LOD_61D3EE39D3B393

??? FROM

????? (

??????? SELECT

????????? AST_T_3_.`是否卷烟` AS LOD_280795B8AB3CAB,

????????? ASE_T_1_.`类型` AS LOD_601A3BCEB54372

??????? FROM

????????? `terminaldata2`.`sales` AS ASE_T_1_

????????? LEFT JOIN `terminaldata2`.`products` AS AST_T_3_ ON ASE_T_1_.`商品条码` = AST_T_3_.`商品条码`

??????? GROUP BY

????????? AST_T_3_.`是否卷烟`,

????????? ASE_T_1_.`类型`

????? ) AS LOD_TL

????? INNER JOIN (

??????? SELECT

????????? AST_T_3_.`是否卷烟` AS LOD_280795B8AB3CAB,

????????? COUNT(

??????????? distinct ASE_T_1_.`流水号`

????????? ) AS LOD_measure_result,

????????? ASE_T_1_.`类型` AS LOD_601A3BCEB54372

??????? FROM

????????? `terminaldata2`.`sales` AS ASE_T_1_

????????? LEFT JOIN `terminaldata2`.`products` AS AST_T_3_ ON ASE_T_1_.`商品条码` = AST_T_3_.`商品条码`

??????? WHERE

????????? AST_T_3_.`是否卷烟` = '卷烟',

????????? ASE_T_1_.`类型` = '零售单'

??????? GROUP BY

????????? AST_T_3_.`是否卷烟`,

????????? ASE_T_1_.`类型`

????? ) AS LOD_TR ON LOD_TL.`LOD_280795B8AB3CAB` = LOD_TR.`LOD_280795B8AB3CAB`

????? AND LOD_TL.`LOD_601A3BCEB54372` = LOD_TR.`LOD_601A3BCEB54372`

? ) AS LOD_TP_0

LIMIT

? 0, 1

在上述代码中第73~77行where子句两个过滤条件用逗号连接,显然是错误的。WHERE子句后面的过滤条件之间应用‘AND‘连接。

四、优化建议

将where子句两个过滤条件间的逗号改为‘AND’。即将WHERE?? AST_T_3_.`是否卷烟` = '卷烟', ASE_T_1_.`类型` = '零售单' 改为 WHERE?? AST_T_3_.`是否卷烟` = '卷烟' AND ASE_T_1_.`类型` = '零售单'

五、总结

WHERE子句后面有多个过滤条件时,应用AND或OR连接。

文章来源:https://blog.csdn.net/aaron19822007/article/details/135726838
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。