有关Quick BI中lod_include函数两次保存计算结果前后不一致问题分析

一、问题描述

会员订单数量

订单数量

会员订单占比

2316

16316

14.19%

在Quick BI仪表板新建计算字段“会员订单占比=lod_include{[会员手机]:COUNT(distinct [流水号]):[会员手机]<>''}/COUNT(distinct [流水号])”

保存数据集(这里我们称作‘第一次保存’),在仪表板中添加指标图,结果显示如下:

这次的结果显示,显然是错误的。

回到数据集,再次打开(编辑)“会员订单占比”字段,注意打开后,不做任何编辑,直接“确定“(这里我们称为‘第二次保存’),在数据集中进行”保存“。再次进入仪表板,更新数据集,更新指标图。

这次显示的结果,显然是正确的。

同样的计算字段,前后两次保存,计算结果完全不同。

二、问题分析

查看第一次保存后的SQL代码:

SELECT

  LOD_TP_0.`LOD_832E7969F81FCE` / LOD_TM.`temp_calculation_0` AS LOD_0

FROM

  (

    SELECT

      COUNT(

        distinct ASE_T_1_.`流水号`

      ) AS temp_calculation_0,

      '-' AS T_ALA_2_

    FROM

      `terminaldata2`.`sales` AS ASE_T_1_

    LIMIT

      0, 1

  ) AS LOD_TM

  CROSS JOIN (

    SELECT

      LOD_TR.`LOD_measure_result` AS LOD_832E7969F81FCE

    FROM

      (

        SELECT

          ASE_T_1_.`会员手机` AS LOD_9463CB5143A6BB

        FROM

          `terminaldata2`.`sales` AS ASE_T_1_

        GROUP BY

          ASE_T_1_.`会员手机`

      ) AS LOD_TL

      INNER JOIN (

        SELECT

          COUNT(

            distinct ASE_T_1_.`流水号`

          ) AS LOD_measure_result,

          ASE_T_1_.`会员手机` AS LOD_9463CB5143A6BB

        FROM

          `terminaldata2`.`sales` AS ASE_T_1_

        WHERE

          ASE_T_1_.`会员手机` <> ''

        GROUP BY

          ASE_T_1_.`会员手机`

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

  ) AS LOD_TP_0

LIMIT

  0, 1

查看第二次保存后的SQL代码:

SELECT

  LOD_TP_0.`LOD_832E7969F81FCE` / LOD_TM.`temp_calculation_0` AS LOD_0

FROM

  (

    SELECT

      COUNT(

        distinct ASE_T_1_.`流水号`

      ) AS temp_calculation_0,

      '-' 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_832E7969F81FCE

    FROM

      (

        SELECT

          ASE_T_1_.`会员手机` AS LOD_9463CB5143A6BB

        FROM

          `terminaldata2`.`sales` AS ASE_T_1_

        GROUP BY

          ASE_T_1_.`会员手机`

      ) AS LOD_TL

      INNER JOIN (

        SELECT

          ASE_T_1_.`会员手机` AS LOD_9463CB5143A6BB,

          COUNT(

            distinct ASE_T_1_.`流水号`

          ) AS LOD_measure_result

        FROM

          `terminaldata2`.`sales` AS ASE_T_1_

        WHERE

          ASE_T_1_.`会员手机` <> ''

        GROUP BY

          ASE_T_1_.`会员手机`

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

  ) AS LOD_TP_0

LIMIT

  0, 1

对比第一次保存代码和第二次保存代码,可以发现,第33行代码不同,第一次保存显示为“LOD_TR.`LOD_measure_result` AS LOD_832E7969F81FCE”,第二次保存显示为” SUM(LOD_TR.`LOD_measure_result`) AS LOD_832E7969F81FCE”,也就是第一次没有用SUM函数聚合,第二次通过SUM函数进行了聚合。所以第一次显示结果不正确,第二次显示结果正确。

三、优化建议

Quick BI需要进一步规范和明确lod函数的语法规则,确保稳定性和一致性。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小崔2022

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

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

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

打赏作者

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

抵扣说明:

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

余额充值