一、问题描述
会员订单数量 | 订单数量 | 会员订单占比 |
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函数的语法规则,确保稳定性和一致性。