有关Quick BI中Case子句中多次使用lod函数返回空值问题分析

一、Quick BI中的lod_ include函数

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

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

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

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

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

二、、问题描述

3月

4月

5月

合计

总结存数量

35116176

36286140

37120427

108522743

Quick BI数据集新建计算字段” 总结存数量=CASE WHEN MAX([月份])='3月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='3月'}  WHEN MAX([月份])='4月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='4月'}  WHEN MAX([月份])='5月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='5月'} 。

END”

在Quick BI仪表板新建交叉表,以‘月份’为行,以‘总结存数量’为列,执行结果“数据返回为空“,这个结果显示不正确。

三、问题分析

查看SQL代码

SELECTLOD_TM.`LOD_2C07D23FC7BBAA` AS LOD_0,CASEWHEN LOD_TM.`temp_calculation_0` = '3月' THEN LOD_TP_0.`LOD_C5682C34D69BEC`WHEN LOD_TM.`temp_calculation_0` = '4月' THEN LOD_TP_1.`LOD_D78F97D23AEDC1`WHEN LOD_TM.`temp_calculation_0` = '5月' THEN LOD_TP_2.`LOD_5B3771E3CF7947`END AS LOD_1FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA,MAX(ATN_T_1_.`月份`) AS temp_calculation_0FROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`ORDER BYLOD_2C07D23FC7BBAA ASCLIMIT0, 20) AS LOD_TMINNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_C5682C34D69BECFROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '3月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_0 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA`INNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_D78F97D23AEDC1FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '4月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_1 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_1.`LOD_2C07D23FC7BBAA`INNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_5B3771E3CF7947FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '5月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_2 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_2.`LOD_2C07D23FC7BBAA`SELECTCOUNT(1) AS query_countFROM(SELECTLOD_TM.`LOD_2C07D23FC7BBAA` AS LOD_0,CASEWHEN LOD_TM.`temp_calculation_0` = '3月' THEN LOD_TP_0.`LOD_C5682C34D69BEC`WHEN LOD_TM.`temp_calculation_0` = '4月' THEN LOD_TP_1.`LOD_D78F97D23AEDC1`WHEN LOD_TM.`temp_calculation_0` = '5月' THEN LOD_TP_2.`LOD_5B3771E3CF7947`END AS LOD_1FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA,MAX(ATN_T_1_.`月份`) AS temp_calculation_0FROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TMINNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_C5682C34D69BECFROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '3月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_0 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA`INNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_D78F97D23AEDC1FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '4月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_1 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_1.`LOD_2C07D23FC7BBAA`INNER JOIN (SELECTLOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,LOD_TR.`LOD_measure_result` AS LOD_5B3771E3CF7947FROM(SELECTATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_GROUP BYATN_T_1_.`月份`) AS LOD_TLINNER JOIN (SELECTSUM(ATN_T_1_.`结存数量`) AS LOD_measure_result,ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAAFROM`terminaldata2`.`account` AS ATN_T_1_WHEREATN_T_1_.`月份` = '5月'GROUP BYATN_T_1_.`月份`) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`GROUP BYLOD_TL.`LOD_2C07D23FC7BBAA`) AS LOD_TP_2 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_2.`LOD_2C07D23FC7BBAA`) AS a

以WHEN MAX([月份])='3月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='3月'}为例分析:

上述代码,中LOD_TM表结果为

LOD_2C07D23FC7BBAA

temp_calculation_0

3月

3月

4月

4月

5月

5月

LOD_TL表结果为

LOD_2C07D23FC7BBAA

3月

4月

5月

LOD_TR表结果为

LOD_measure_result

LOD_2C07D23FC7BBAA

35116176

3月

LOD_TL与LOD_TR通过条件”ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`    GROUP BY  LOD_TL.`LOD_2C07D23FC7BBAA`”进行内连接(INNER JOIN)得到表LOD_TP_0,LOD_TP_0结果为:

LOD_2C07D23FC7BBAA

LOD_C5682C34D69BEC

3月

35116176

LOD_TM与LOD_TP_0通过条件“ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA` “进行内连接(INNER JOIN),得到的结果为(这里称为表A1,由于是内连接,所以4月、5月无法显示):

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_0)

3月

3月

35116176

同理,当“WHEN MAX([月份])='4月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='4月'}“,得到的结果为(这里称为表A2,由于是内连接,所以3月、5月无法显示):

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_1)

4月

4月

36286140

同理,当“WHEN MAX([月份])='5月' THEN lod_include{[月份]:SUM([结存数量]):[月份]='5月'}“,得到的结果为(这里称为表A3,由于是内连接,所以3月、4月无法显示):

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_2)

5月

5月

37120427

表A1、表A2、表A3默认进行通过字段‘LOD_2C07D23FC7BBAA‘进行内连接(INNER JOIN),由于表A1中只有’3月‘,表A2中只有’4月‘,表A3中只有’5月‘,内连接的表必然为空表。

四、优化建议

既然表A1、表A2、表A3之间默认是内连接(INNER JOIN),只需要让表A1、表A2、表A3中同时存在“3月“、”4月“、”5月“即可以。也就是把LOD_TM与LOD_TP_0通过条件“ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA` “进行的内连接(INNER JOIN,改为左外连接(LEFT JOIN)。LOD_TP_1、LOD_TP_2同理进行相同操作。具体做法即将上述第43、101、159、261、319、377行代码由INNER JOIN 改为 LEFT JOIN。这样得到的表A1:

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_0)

3月

3月

35116176

4月

4月

NULL

5月

5月

NULL

表A2:

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_0)

3月

3月

NULL

4月

4月

36286140

5月

5月

NULL

表A3:

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_0)

3月

3月

NULL

4月

4月

NULL

5月

5月

37120427

新得到的表A1、表A2、表A3再进行内连接(INNER JOIN)得到的结果是:

LOD_2C07D23FC7BBAA

temp_calculation_0

LOD_C5682C34D69BEC(LOD_TP_0)

3月

3月

35116176

4月

4月

36286140

5月

5月

37120427

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/647183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊 程序员裁员潮:技术变革下的职业危机

前几天一则新闻爆料:一对来自中国的工程师夫妻在美身亡,疑因谷歌裁员致悲剧发生。看到后深感可惜,鲜活的生命就因为裁员殒落了;同时我也深有感触,有幸经历过裁员,体会过那一段低迷不振的日子。 但是回首当下…

关于达梦认证DCA DCP,TIDB认证PCTA PCTP考试那点事儿

文章最后有彩蛋,一定要看到最后... 一、正确的道路上遇到正确的你 伴随中国数据库领域的快速技术进步,国内数据库生态蓬勃发展,并不断涌现出极具创新力的产品,推动了数据库应用的遍地开花。截至2024年1月,墨天轮数据社…

【sgTree】自定义组件:加载el-tree树节点整棵树数据,实现增删改操作。

特性 可以自定义主键、配置选项支持预定义节点图标:folder文件夹|normal普通样式多个提示文本可以自定义支持动态接口增删改节点可以自定义根节点id可以设置最多允许添加的层级深度支持拖拽排序,排序过程还可以针对拖拽的节点深度进行自定义限制支持隐藏…

新建虚拟机并安装配置linux

记得看目录哦! 1. 打开VMware2. 新建虚拟机3. 配置虚拟机内存4. 配置处理器5. 配置网络6. 开始安装CentOS系统系统安装包此处自取 7. 启动虚拟机进行安装如果出现这种情况这样转成图形化界面继续安装 1. 打开VMware 点击文件—点击新建虚拟机 2. 新建虚拟机 3. 配置…

JavaScript注释使用

JavaScript注释使用心得 在学习JavaScript的过程中,我渐渐发现了注释的奥妙。它们不仅仅是代码的附属品,更是提升代码可读性和调试效率的神器。 单行注释初探 你知道吗?JavaScript中的单行注释,只需要在代码前面加上//就可以了。…

基于 MQTT 的开源桥接器:自由控制物联网设备 | 开源日报 No.151

Koenkk/zigbee2mqtt Stars: 10.5k License: GPL-3.0 Zigbee2MQTT 是一个 Zigbee 🐝 到 MQTT 桥接器 🌉,可以摆脱专有的 Zigbee 桥接器 🔨 允许您在不使用供应商桥接器或网关的情况下使用 Zigbee 设备通过 MQTT 桥接事件并控制 Z…

redis持久化之RDBAOF压缩

前引 1、redis持久化的文件是什么 dump.rdb appendonly.aof 2、这两中文件有什么异同 save 秒 1 alaways everysec no 3、文件存放的位置 dir ./ 4、默认的存放位置:命令启动的地方 dir 自定义的路径 rdb 和aof 文件 存放在同一个路径下面 5、rdb文件默认备份的策略是什么&…

redis + 拦截器 :防止数据重复提交

1.项目用到,不是核心 我们干系统开发,不免要考虑一个点,数据的重复提交。 我想我们之前如果要校验数据重复提交要求,会怎么干?会在业务层,对数据库操作,查询数据是否存在,存在就禁止插入数据; 但是吧,我们每次crud操作都会连接…

【docker】解决docker overlay2目录占用大量磁盘空间,导致验证码出不来,报错Can‘t create output stream!

问题: 验证码出现Cant create output stream!报错信息 排查: 所在服务器磁盘使用率已经到达100%,经排查,服务器目录/var/lib/docker/overlay2占用大量磁盘空间, 解决: 使用【docker system prune】命令删…

基于移动边缘计算 (MEC) 的资源调度分配优化研究(提供MATLAB代码)

一、优化模型简介 边缘计算资源调度优化模型是为了解决边缘计算场景下的资源分配和任务调度问题而提出的一种数学模型。该模型旨在通过优化算法来实现资源的有效利用和任务的高效执行,以提高边缘计算系统的性能和用户的服务体验。 在边缘计算资源调度优化模型中&a…

【python题解17】给你一个有符号整数x,返回将x中的数字部分反转后的结果。输入的整数不超过int类型的最大范围。

1. 题目&#xff1a;给你一个有符号整数x&#xff0c;返回将x中的数字部分反转后的结果。输入的整数不超过int类型的最大范围。 输入样例&#xff1a;-123 输出样例&#xff1a;-321 2. 源代码 n int(input()) flag True #代表正数 if n < 0: #当n是负数时候&#xff…

前端学习:HTTP协议、请求响应、分层解耦

HTTP协议 HTTP-概述 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。如果想知道http协议的数据传输格式有哪些&#xff0c;可以打开浏览器&#xff0c;点击 F12 打开开发者工具&#xff0c;点击Network 来…

E7数据库备份和恢复

E7数据库备份和恢复 一、实验目的 在Mysql上&#xff0c;学习如何备份数据库和恢复的各种方法。 二、实验要求: 1、基本硬件配置:英特尔Pentium III 以上,大于4G内存&#xff1b; 2、软件要求:Mysql&#xff1b; 3、时间:1小时&#xff1b; 4、撰写实验报告并按时提交。 三、…

C++刷题日记:Day 1

题目描述 小明是一野生动物园的管理人员&#xff0c;他统计了一份野生动物的名单&#xff0c;糟糕的是&#xff0c;因为操作不当导致打乱了名单&#xff0c;每种野生动物出现的次数都无法进行查询。 小明只能重新进行统计&#xff0c;已知名单中的动物名称只由大小写字母构成&a…

实用工具合集(持续更新...)

一、搜索引擎 1.1、小白盘 网站&#xff1a;https://www.xiaobaipan.com 度盘资源搜索的网站&#xff0c;能够搜索电影、电视剧、小说、音乐等资源&#xff08;注意&#xff1a;评论区很多小伙伴说小白盘有毒&#xff0c;我用谷歌浏览器搜索过几次并无大碍&#xff0c;请慎用…

C++ day 1

思维导图 使用C编写一个程序&#xff0c;输入一个字符串&#xff0c;统计大小写字母、数字、空格和其他符号的个数 #include <iostream>using namespace std;int main() {int capital 0;int lower 0;int digit 0;int spaces 0;int others 0;cout << "请…

从全流程的角度来了解python包的使用,也许你会有不一样的认识

在python中&#xff0c;只要我们一谈到包或模块&#xff0c;基本默认说的就是包的导入和使用。也就是说只要我们知道包的名字&#xff0c;导入后知道怎么使用基本就可以了&#xff0c;但本人认为&#xff0c;我们仅仅了解的是包的一部分&#xff0c;若想对包有个整体的认识&…

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账

EXCEL VBA调用adobe的api识别电子PDF发票里内容并登记台账 代码如下 使用须知&#xff1a; 1、工具--引用里勾选[Adobe Acrobat 10.0 Type Library] 2、安装Adobe Acrobat pro软件Dim sht As Worksheet Function BrowseFolders() As String 浏览目录Dim objshell As ObjectDim…

测试模型分类

测试模型 1. 概述 软件测试和软件开发一样,都遵循软件工程原理,遵循管理学原理,所以理解好软件的开发模型会便于理解测试模型. 软件测试的一般流程: 我们发现一般的软件测试流程和软件开发的流程一样,但是这样的流程测试介入的较晚,对于前期重大的bug很难修复.所以测试的流程…

网工内推 | 急招网工、运维,弹性工作,不加班,最高22K

01 Finogeeks 招聘岗位&#xff1a;运维工程师 职责描述&#xff1a; 1、负责FinClip小程序数字化管理系统产品的POC测试、交付部署、日常巡检工作&#xff0c;包括&#xff1a;交付运维方案、安装部署、数据对接调试、安全事件分析、日常巡检维护等 2、负责FinClip小程序数字…