Quick BI中查询控件与复合式查询控件结果不一致问题分析

文章讨论了在QuickBI中,查询控件与复合式查询控件在处理相同条件(销区为北区,销量>15)下结果不同的原因,主要在于查询控件使用HAVING进行聚合后筛选,而复合式查询控件未聚合直接按记录筛选。作者建议在功能不完善时避免使用复合式查询控件。
摘要由CSDN通过智能技术生成

一、问题描述

1、数据集

销区

客户

商品

销量

北区

北客户甲

A

10

北区

北客户乙

A

8

北区

北客户丙

B

13

北区

北客户丁

C

9

南区

南客户甲

A

8

南区

南客户乙

B

15

南区

南客户丙

C

9

南区

南客户丁

C

14

2、问题描述

在Quick BI中创建一个交叉表“销售统计1”,如下图

复制交叉表“销售统计1”,并重命名为“销售统计2”,如下图

在Quick BI中添加一个“查询控件”包括两个查询条件,一个是销区,一个是销量,并关联交叉表“销售统计1”。查询销区为“北区”,销量“>15”,结果如下图:

在Qucik BI中添加一个“复合式查询控件”两个筛选字段,一个是销区,一个是销量,关系为”且”,并关联交叉表”销售统计2”。 查询销区为“北区”,销量“>15”,结果如下图:

数据返回为空。这个查询结果显示不正确的。

为什么,同样的查询条件下,“查询控件”和“复合式查询控制”的结果会不一样呢?

二、原因分析

1、SQL代码分析

“查询控件”下的SQL代码

SELECT

  A_T_1_.`销区` AS T_A17_2_,

  A_T_1_.`商品` AS T_A56_3_,

  SUM(A_T_1_.`销量`) AS T_A66_4_

FROM

  `销售记录`.`销售记录` AS A_T_1_

WHERE

  A_T_1_.`销区` = '北区'

GROUP BY

  A_T_1_.`销区`,

  A_T_1_.`商品`

HAVING

  SUM(A_T_1_.`销量`) > 15

ORDER BY

  T_A17_2_ ASC,

  T_A56_3_ ASC

LIMIT

  0, 20



SELECT

  COUNT(1) AS query_count

FROM

  (

    SELECT

      A_T_1_.`销区` AS T_A17_2_,

      A_T_1_.`商品` AS T_A56_3_,

      SUM(A_T_1_.`销量`) AS T_A66_4_

    FROM

      `销售记录`.`销售记录` AS A_T_1_

    WHERE

      A_T_1_.`销区` = '北区'

    GROUP BY

      A_T_1_.`销区`,

      A_T_1_.`商品`

    HAVING

      SUM(A_T_1_.`销量`) > 15

  ) AS a

“复合式查询控件”下的SQL代码

SELECT

  A_T_1_.`销区` AS T_A17_2_,

  A_T_1_.`商品` AS T_A56_3_,

  SUM(A_T_1_.`销量`) AS T_A66_4_

FROM

  `销售记录`.`销售记录` AS A_T_1_

WHERE

  A_T_1_.`销区` = '北区'

  AND A_T_1_.`销量` > 15

GROUP BY

  A_T_1_.`销区`,

  A_T_1_.`商品`

ORDER BY

  T_A17_2_ ASC,

  T_A56_3_ ASC

LIMIT

  0, 20



SELECT

  COUNT(1) AS query_count

FROM

  (

    SELECT

      A_T_1_.`销区` AS T_A17_2_,

      A_T_1_.`商品` AS T_A56_3_,

      SUM(A_T_1_.`销量`) AS T_A66_4_

    FROM

      `销售记录`.`销售记录` AS A_T_1_

    WHERE

      A_T_1_.`销区` = '北区'

      AND A_T_1_.`销量` > 15

    GROUP BY

      A_T_1_.`销区`,

      A_T_1_.`商品`

  ) AS a

对比上述两段SQL代码,可以发现两者的区别在于对筛选条件“销量大于15”的代码描述不一样。在“查询控件”中的代码第23~25行为“HAVING  SUM(A_T_1_.`销量`) > 15”,而在“复合式查询控件”中的代码第17行却是出现有WHERE子句的中“AND A_T_1_.`销量` > 15“,显然”复合式查询控件“中的代码并没有进行sum聚合,是不正确的

2、两种查询控件添加操作分析

如上图可见,在添加“查询控件“时,是有”聚合方式“选择的。

如上图可见,在添加“复合式查询控件”时,是没有”聚合方式”选择的,这就意味着,在这种情况下是针对数据集中的每条记录进行销量筛选的,而不是对sum聚合后的数据进行筛选。

三、小结

同样的查询条件下,“查询控件”和“复合式查询控件”的结果不一样,是由于查询控件筛选对象的不一致性导致的。同时,由于“复合式查询控件“的功能绝大多数的情况下都可以通过”查询控件“实现,因此,建议在软件更新完善前,应尽量少使用“复合式查询控件“。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小崔2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值