1.前言
大家好,之前猴子的灵岛提出了一个新的报表需求,我觉得这个成果可以拿出来和大家分享一下。这是一个跟网络上其他文章报表分页截然不同的一种开发方式。
需求:
1.制作一张用户检索数据报表
2.是否能做到上面为搜索框,下面为显示结果的报表呢
3.该报表数据为82万,是否能够将其加载速度优化到极致呢。
4.样式一定要好看,你可以参考代码自开发业务系统中报表的样式来制作,因为这张报表是给所有部门大小领导使用,非本部门使用(我们是业务部门)。
当然,最后做出来的结果也是完美的交付了。
如图,这个是拿超市数据做的示例分页报表,和大家分享下制作的过程。实际报表的样式要更好看更具细节。但实现的本质是一模一样的。
大家可以按照我的下面文章一步一步跟着做。
2.数据准备工作
这边猴子是直接在Tableau安装文件夹中拿的超市示例数据,路径如下
C:\Users\monkey\Documents\我的 Tableau 存储库\数据源\2024.2\zh_CN-China\示例 - 超市.xls
大家可以在自己的Documents目录下按照超链接找到该文件
3.关键字段描述
我们首先打开超市示例数据,然后点开订单sheet页,如图
行ID这个字段很重要,很重要,很重要,这个是我们进行分页的核心字段。
至于我在单位做的那张报表,已经在ADS层中的用户数据检索表(Tableau进行数据提取的表)进行了索引的制作(自动生成索引,字段名字也叫ID),也就是从1-80多万的数字。索引ID在tableau表中起到的作用等同于该订单sheet页的行ID。
4.报表分页相关公式组件开发
4.1 先拉一张表出来
这一步没啥可说的,超市示例数据的字段直接拉上去就好,就是随便拉个表。我拉的如图所示,该表有将近10000条数据(本人项目中是80万)。
4.2 创建排序计算公式(关键步骤)
该公式是整个分页报表的核心公式,根据表ID这个字段来进行排序
如图
公式如下:行ID排序 RANK_UNIQUE(SUM([行 Id]),'asc')
字段说明:为什么要写这样一个公式呢,是为了支持分页模糊查询。
如下图,我们模糊搜索6424的订单ID结果如下,如果不用行ID排序,直接用行ID字段来进行分页操作的话,那么行id为3466,7963,7964,7965的数据将不会在第一页显示出来。
为了避免这个问题特意创建的字段,使用唯一排序。
接下来我们将行ID排序字段也拉到表上面,如图,然后将行id字段右键,点掉显示标题,将这个字段隐藏起来就OK了(该方式是为了避免最后一页显示不全,所以不直接将行ID排序替换掉行ID)。
排序计算公式步骤完成
4.3 创建分页使用参数
接下来我们来创建两个参数
4.3.1 每页显示数据数量
如图所示,创建一个数据类型为整数的参数,名称为每页显示数据数量,工作簿打开时的值为当前值,当前值设置为20(这个随便设置,个人喜欢设置20),允许值为全部,然后点击确定
4.3.2 页数
除了命名和当前值不一样,其他的和上一个参数几乎一模一样,如图
4.4 创建分页相关公式
接下来我们创建分页功能所用到的相关公式,下面我直接把每个公式都列出来了,直接复制粘贴即可。
4.4.1.页数最大值
如下:页数最大值 int(COUNT([行 Id])/[每页显示数据数量])+1
该字段是用于显示一共有多少页的。紫色的文字是刚才创建的参数。比如我们行ID有9959个,每页显示数据数量为20(参数是活得),就能得出当每页显示20条数据的时候,一共会有498页。而int是为了显示整数页面,+1的话是进一页。
4.4.2 页数最小值
如下:页数最小值 { FIXED :min(1)}
最小值就是1,这个没啥好说的