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

一、问题描述

会员订单数量

订单数量

会员订单占比

2316

16316

14.19%

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

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

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

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

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

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

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

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

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

二、问题分析

查看第一次保存后的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函数的语法规则,确保稳定性和一致性。

你可能感兴趣的:(Quick,BI,Quick,BI,lod函数,SQL,数据分析)