有关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代码

SELECT

  LOD_TM.`LOD_2C07D23FC7BBAA` AS LOD_0,

  CASE

    WHEN 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_1

FROM

  (

    SELECT

      ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA,

      MAX(ATN_T_1_.`月份`) AS temp_calculation_0

    FROM

      `terminaldata2`.`account` AS ATN_T_1_

    GROUP BY

      ATN_T_1_.`月份`

    ORDER BY

      LOD_2C07D23FC7BBAA ASC

    LIMIT

      0, 20

  ) AS LOD_TM

  INNER JOIN (

    SELECT

      LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

      LOD_TR.`LOD_measure_result` AS LOD_C5682C34D69BEC

    FROM

      (

        SELECT

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TL

      INNER JOIN (

        SELECT

          SUM(

            ATN_T_1_.`结存数量`

          ) AS LOD_measure_result,

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        WHERE

          ATN_T_1_.`月份` = '3月'

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

    GROUP BY

      LOD_TL.`LOD_2C07D23FC7BBAA`

  ) AS LOD_TP_0 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA`

  INNER JOIN (

    SELECT

      LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

      LOD_TR.`LOD_measure_result` AS LOD_D78F97D23AEDC1

    FROM

      (

        SELECT

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TL

      INNER JOIN (

        SELECT

          SUM(

            ATN_T_1_.`结存数量`

          ) AS LOD_measure_result,

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        WHERE

          ATN_T_1_.`月份` = '4月'

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

    GROUP BY

      LOD_TL.`LOD_2C07D23FC7BBAA`

  ) AS LOD_TP_1 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_1.`LOD_2C07D23FC7BBAA`

  INNER JOIN (

    SELECT

      LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

      LOD_TR.`LOD_measure_result` AS LOD_5B3771E3CF7947

    FROM

      (

        SELECT

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TL

      INNER JOIN (

        SELECT

          SUM(

            ATN_T_1_.`结存数量`

          ) AS LOD_measure_result,

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        WHERE

          ATN_T_1_.`月份` = '5月'

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

    GROUP BY

      LOD_TL.`LOD_2C07D23FC7BBAA`

  ) AS LOD_TP_2 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_2.`LOD_2C07D23FC7BBAA`



SELECT

  COUNT(1) AS query_count

FROM

  (

    SELECT

      LOD_TM.`LOD_2C07D23FC7BBAA` AS LOD_0,

      CASE

        WHEN 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_1

    FROM

      (

        SELECT

          ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA,

          MAX(ATN_T_1_.`月份`) AS temp_calculation_0

        FROM

          `terminaldata2`.`account` AS ATN_T_1_

        GROUP BY

          ATN_T_1_.`月份`

      ) AS LOD_TM

      INNER JOIN (

        SELECT

          LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

          LOD_TR.`LOD_measure_result` AS LOD_C5682C34D69BEC

        FROM

          (

            SELECT

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TL

          INNER JOIN (

            SELECT

              SUM(

                ATN_T_1_.`结存数量`

              ) AS LOD_measure_result,

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            WHERE

              ATN_T_1_.`月份` = '3月'

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

        GROUP BY

          LOD_TL.`LOD_2C07D23FC7BBAA`

      ) AS LOD_TP_0 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_0.`LOD_2C07D23FC7BBAA`

      INNER JOIN (

        SELECT

          LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

          LOD_TR.`LOD_measure_result` AS LOD_D78F97D23AEDC1

        FROM

          (

            SELECT

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TL

          INNER JOIN (

            SELECT

              SUM(

                ATN_T_1_.`结存数量`

              ) AS LOD_measure_result,

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            WHERE

              ATN_T_1_.`月份` = '4月'

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

        GROUP BY

          LOD_TL.`LOD_2C07D23FC7BBAA`

      ) AS LOD_TP_1 ON LOD_TM.`LOD_2C07D23FC7BBAA` = LOD_TP_1.`LOD_2C07D23FC7BBAA`

      INNER JOIN (

        SELECT

          LOD_TL.`LOD_2C07D23FC7BBAA` AS LOD_2C07D23FC7BBAA,

          LOD_TR.`LOD_measure_result` AS LOD_5B3771E3CF7947

        FROM

          (

            SELECT

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TL

          INNER JOIN (

            SELECT

              SUM(

                ATN_T_1_.`结存数量`

              ) AS LOD_measure_result,

              ATN_T_1_.`月份` AS LOD_2C07D23FC7BBAA

            FROM

              `terminaldata2`.`account` AS ATN_T_1_

            WHERE

              ATN_T_1_.`月份` = '5月'

            GROUP BY

              ATN_T_1_.`月份`

          ) AS LOD_TR ON LOD_TL.`LOD_2C07D23FC7BBAA` = LOD_TR.`LOD_2C07D23FC7BBAA`

        GROUP BY

          LOD_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.mfbz.cn/a/347881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源项目Git Commit规范与ChangeLog

一,conventional commit(约定式提交) Conventional Commits 是一种用于给提交信息增加人机可读含义的规范。它提供了一组用于创建清晰的提交历史的简单规则。 1.1 作用 自动化生成 CHANGELOG基于提交类型,自动决定语义化的版本变更向项目相关合作开发…

OpenCV书签 #互信息的原理与相似图片搜索实验

1. 介绍 互信息(Mutual Information) 是信息论中的一个概念,用于衡量两个随机变量之间的关联程度。在图像处理和计算机视觉中,互信息常被用来度量两幅图像之间的相似性。 互信息可以看成是一个随机变量中包含的关于另一个随机变…

【网站项目】基于SSM的251国外摇滚乐队交流和周边售卖系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

DAY30:回溯算法332\51\37基本思路了解+总结

Leetcode: 332 重新安排行程 代码随想录 这道题目有几个难点: 一个行程中,如果航班处理不好容易变成一个圈,成为死循环,容易出现环路。有多种解法,字母序靠前排在前面,让很多同学望而退步,如…

yolov8上使用gpu教程

yolov8上使用gpu教程 安装Cuda和Cudnnyolov8上使用gpu 安装Cuda和Cudnn 1.查看支持的cuda版本,并去官网下载。 nvidia-smi2.网址:https://developer.nvidia.com/cuda-toolkit-archive 3.安装细节 安装的前提基础是,有vs的C环境。我电脑有…

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一,分流 1.实现分流 2.使用侧输出流 二,合流 1,联合 2,连接 三,基于时间的合流——双流联结 1,窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2,间隔联结 2.1 间隔联…

Qt单选按钮

前言 本篇文章介绍Qt的单选按钮,就是QRadioButton QRadioButton是一个选项按钮,可以打开(选中)或关闭(取消选中)。单选按钮通常向用户提供“众多之一”的选择。 在一组单选按钮中,一次只能选中…

手动搭建koa+ts项目框架(apidoc文档篇)

文章目录 一、安装apidoc工具二、使用1、项目根目录新建apidoc.json2、定义接口路由上方注解对应信息3、配置静态文件访问目录4、生成api文档如有启发,可点赞收藏哟~ 一、安装apidoc工具 全局安装 npm i apidoc -g查看是否安装成功 apidoc -v二、使用 1、项目根…

注解@profile的使用

目录 profile介绍配置演示 profile介绍 profile 通常作用在controller类上,当它标记的环境有效时,该controller类才生效,例如:Profile(“dev”),当dev环境被激活时,Profile(“dev”)所注解的controller类才生效。 配置…

工作软技能第一弹,关于职场沟通、成长的那些事

引言 在谈绩效后,我收获了一些心得,在此梳理出来,加深印象并且共勉 基本信息 在步入职场后,你可能跟我一样虽然技术水平有在上升,但是在处理一些事情上可能偶尔没能获得预期的成果。我在通过绩效沟通以及自我反思后…

【学网攻】 第(10)节 -- 路由器单臂路由配置

系列文章目录 目录 系列文章目录 文章目录 前言 一、单臂路由是什么? 二、实验 1.引入 实验拓扑图 PC配置 Sw配置 Router配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交…

Vue+OpenLayers7入门到实战:在地图上添加缩放控件、比例尺控件和鼠标经纬度位置显示控件

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章主要介绍如何使用OpenLayers7在地图上添加地图缩放控件,比例尺显示控件和鼠标经纬度位置展示控件这三个Control控件。 二、依赖和使用 "ol": "7.5.2"使用npm安装依赖npm install ol@7.5.…

JVM实战(31)——内存溢出之请求超时

一、简介 本章,我们将通过实际案例讲解一个Web应用的内存溢出问题,该内存溢出问题的排查涉及Tomcat的一些底层原理,最终排查发现是由于请求超时问题导致,我们先来看下系统的背景。 1.1 系统背景 生产环境的一个系统发生告警&…

Linux/Doctor

Enumeration nmap 已知目标开放了22,80,8089端口,扫描详细情况如下 可以看到对外开放了22,80,8089三个端口 TCP/80 SSTI 访问80端口,有一个infodoctors.htb的电子邮件,点击其他的也没有什么反应,猜测有可能需要域名访问 在/et…

day32WEB 攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

本章节知识点: 1 、文件上传 - 二次渲染 2 、文件上传 - 简单免杀变异 3 、文件上传 -.htaccess 妙用 4 、文件上传 -PHP 语言特性 前置知识: 后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码 ( 解析漏洞除外 ) 如&…

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 << "请…

人工智能时代:让AIGC成为你的外部智慧源(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC如何运作&#xff1f;2.1 步骤一&#xff1a;收集数据2.…

web前端javascript笔记——(14)Navigator 、History、Location

Navigator <!DOCTYPE html><head><meta charset"UTF-8"><title></title><style></style><script type"text/javascript">/*DOM文档对象&#xff0c;通过js操作网页BOM 浏览器对象BOM可以使我们通过JS来操…

谷歌公布一个可以让 AI 进行自我判断输出内容正确性的模型训练框架 ASPIRE

谷歌开发了一款名为 ASPIRE 的训练框架&#xff0c;旨在增强人工智能&#xff08;AI&#xff09;模型的选择性预测能力。这款框架为模型引入了 “可信度” 机制&#xff0c;即模型会输出一系列答案&#xff0c;并为每个答案赋予一个正确概率评分。通过这种方式&#xff0c;ASPI…

day2 C++

封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #include <iostre…
最新文章