栏目说明
「Quick BI使用案例」系列短文都来源于用户遇到的真实问题。
文章聚焦使用过程中的高频误区与使用技巧,希望能帮助您更充分地发挥产品价值。
问题背景
某用户需要计算各实验室各项目收入占到全体收入的比例,且每个实验室需要单独使用TAB栏列出。使用SQL查询数据量在140万行左右。
解决方案
Step1. 新建计算字段,使用LOD函数
首先,我们需要新建计算字段,使用LOD_EXCLUDE{<维度声明> : <聚合表达式>}求出占比。
如何使用LOD函数以及为什么是用LOD_EXCLUDE?
我们可以打开官方文档,右上角输入关键字找到对应文档「分析函数(lod函数)」,并查看示例
最终我们得到的公式为:sum([收入金额])/ sum(LOD_EXCLUDE{[实验室]:sum([收入金额])})
拆分来看,其实就是我们平时用的sum(a)/sum(b)加上LOD_EXCLUDE,并不复杂:分子使用聚合函数正常计算每个实验室每个项目的实际收入,分母使用LOD_EXCLUDE计算每个项目的总收入。
Step2. 在数据集界面选择对应数据集,点击【加速配置】按钮,配置开启加速
常见误区
- a/b和sum(a)/sum(b)
使用sum函数是为了先进行汇总计算。a/b和sum(a)/sum(b)的逻辑是不一样的,第一个是先在明细数据做除法,除完再根据分组维度进行求和。 第二个是分别将a和b根据分组维度求和后,再相除。
- LOD函数式能否直接做分母
有的用户会把公式写成:sum([收入金额])/LOD_EXCLUDE{[实验室]:sum([收入金额])}
需要注意,LOD函数结果仍然是明细数据,可以被聚合;如果不加sum(),就会变成聚合/明细。
这在语法上是不对的,虽然部分兼容性强的数据库不会报错,但是会导致最后出现错误的数据结果。
另外也会导致抽取加速失败,数据库报错会回退到直连数据库模式去查询,导致查询时间超过三分钟。
当我们优化了正确的公式写法,再开启加速引擎,原本140万行的SQL现在只需要0.9秒就可以查询到啦!
- 报表很慢但不知道原因,可使用「性能诊断」
参考对应文档「性能诊断」,点击仪表板右上角按钮进入后我们就可以得到各组件的诊断结果。
当报表内存在可能影响性能的因素时,性能诊断会给出具体的优化建议,可以根据描述进行对应的优化。
比如刚才的问题,我们通过性能诊断定位原因是“计算字段存在引擎不支持的特殊语法”,就可以返回进行针对性优化。
如阅读后有任何问题,您可以点击Quick BI产品内右下角【帮助与反馈】按钮与我们取得联系。