1.概述
1.1 应用场景
在制作可视化报表的过程中,可能会出现数据和数据源对不上的情况,本文提供几种常见数据问题的原因及排查思路。
1.2 流程图
2.操作步骤
前言:
出现数据问题,最通用的排查方法,就是在数据集构建器,根据生成的数据集脚本找问题。
在浏览模式下打开数据集构建器方法如下:
点击有问题的数据的控件右上方的数据集
出现数据集构建器后,打开查看脚本即可
(1)第一步是直接看生成的脚本,inner join的表和关联的字段是否正确,select from的表是否正确,group by和order by的表是否正确等。
(2)第二步是直接将脚本复制到数据库里,在数据源库查出这些数据是否正确,可以再根据自己编写的简单SQL脚本查出来的数据与之对比。
(3)无论出现何种数据问题,都可以按照此思路进行排查,从数据及里找出错误是最便捷的方法。
最后补充一点需要注意的事项,需要分清浏览界面和设计界面的数据,浏览界面的数据是缓存,并不代表最终呈现的数据。
2.1 ETL数据抽取逻辑有问题
如果数据是通过ETL数据清洗抽取过来的,在使用报表过程中,发现控件中的数据与实际不符,
(1)可以先增加一张表格,并引用有问题的那个控件的数据集
如下图,直接引用条形图当中的数据,以表格显示,直观看出
直接找到表格中有问题的数据字段,再根据自己编写的简单SQL语句到源数据库查询出来的数据,对比二者的差异
(2)复制数据集的SQL脚本,到数据目的仓库查询
然后自己编写SQL,到数据源库查询,对比差异,找出差异,并去ETL中检查涉及该字段的流程
2.2 视图表关联错误
视图关联错误会导致再前端报表显示出来的数据也是错误的。
为避免这种情况,应前往视图编辑,根据数据出错的字段,检查相应的视图的表关联是否正确,字段关联是否正确。若更改过视图,需要到报表刷新或重构所有数据集。
2.3 筛选条件或汇总字段错误
筛选条件出错的时候,会导致图表最终呈现出来的数据是错误的,例如这个案例
(1)同是本月的销售数据,左边的饼图销售额加起来是55万,右边的总销总额是49万
检查发现,左边跟右边的筛选条件完全不同
(2)或者检查发现汇总的值根本不是同一个字段
(3)或者一个数据集汇总了多个字段,但是没有绑定应该汇总的字段
2.4 数据字典错误
在上传数据字典,或手动将数据库里的英文字段改成中文的时候,出了错误,最终在报表显示出来的数据都是错误的。
如图中这个例子,成本的数据可能跟收入输入反了,导致成本的数据比收入的数据还大,在前端报表里看到的数据就会出错。
我们可以根据订单ID等关键信息,到数据库里查找这条记录,找到每个数值对应的数据库字段是什么,然后根据数据库字段名,重构数据字典,或手工更正中文字段名。
2.5 基于错误的时间条件
本应该按月显示的数据,在选择时间基于的时候,选择了默认时间基于天,显示的就是天的数据,而不是月的数据。
应该按月显示的数据,把时间基于改回时间月即可
2.6 缓存问题
如果早上由于没有数据生成,导致今天的数据是0,但是到中午下午,看到报表中今天的数据还是0,可能是缓存导致。
可以尝试清理浏览器缓存,并关闭报表缓存,重新进入报表。
如果上述步骤都无效,可以清除Redis缓存(谨慎操作)
2.7 联动或钻取导致筛选失效
联动或者钻取的过程中,会将之前筛选的条件忽略掉,并向目标报表传入新的筛选条件。
如图已经在设计界面设定了一个数字图筛选皮卡的销售额,另一个数字图筛选小卡的销售额。
但是在浏览界面下,选择了联动新疆区域的销售数据后,皮卡跟小卡的数据都变成一样的了
而且查看数据集里,where后面只剩下新疆这一个筛选条件了
所以,联动或钻取的情况下,如果在被联动控件事先筛选好了数据,或者在下钻的二级报表实现筛选好数据,需要在设计页面下,把筛选条件固定,那么联动的时候,之前的筛选条件就不会被忽略了
2.8 钻取传参设置错误
在钻取的过程中,往往会传参到下级报表,在此过程中,选择错目标报表,选择错参数等原因都会导致在下级报表中显示出错误的数据。
首先检查钻取的报表是否选择正确
在检查选择传的参数是否正确
2.9 数据集构建器的筛选未绑定筛选控件
如图,报表中是有时间筛选控件的,但是选中条形图后,看到数据集构建器的筛选中,并没有绑定时间年和时间月的筛选。
出现这种情况,是因为条形图控件是在时间筛选控件之后才增加上去的,所以,后添加的控件,不会自动绑定之前添加的筛选控件,需要手动绑定。
2.10 BUG导致数据错误
在排除上述问题的干扰后,在浏览模式下,排除缓存的可能性,发现数据集SQL脚本是对的,数据集SQL复制到数据库里查询出来的结果也是对的,但是前端报表显示的数值就是错的,或者有数值但根本不显示数值,有可能是产品BUG导致,可向技术支持工程师反馈该BUG。