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,这个没啥好说的
4.4.3 页数判断值
公式如下:页数判断值 INT(([行ID排序]- 1)/[每页显示数据数量])+1
该公式是用来判断当前页面中的数据处于第几页的。
4.4.4 页数判断筛选器
公式如下:页数判断筛选器
IF [页数] = [页数判断值]
THEN 'Y'
ELSE 'N'
END
该公式就是用来做筛选器的,通过条件判断显示对应页数的值,将该公式做好后直接拉到筛选器栏
之后筛选器栏里面选择Y选项,点击确定即可。
4.4.5 上一页
如下:上一页
IF AVG([页数]-1) = 0
THEN 1
ELSE AVG([页数]-1)
END
至于为什么前面做个判断,因为如果我们页数参数和该公式连动<=1,那就要保持在第一页不动,否则变为0页或者负页就是BUG。
4.4.6 下一页
如下:下一页
IF AVG([页数]) = [页数最大值]
THEN [页数]
ELSE AVG([页数]+1)
END
跟上一页公式的判断逻辑是一样的,不能超过最大页数。
到这里分页相关公式就已经写完了
4.5 相关分页组件工作表的制作
分页相关组件共分为
1.上一页
2.下一页
3.首页
4.末页
5.刷新页面
6.页总数
7.数据总数
接下来我们一个个将其做出来,如图所示
4.5.1 上一页
我们直接在行里面双击,输入MIN(1),这一步骤是直接将文本固定在整个页面最中心,然后将右键点击行上面的MIN(1)公式,将显示标题点掉。再将上一页拖入文本中,点击文本在里面修改字样。
手动输入上一页,修改完字样点击确定按钮后如下。
这时候我们看到工作表周围还有边框,点击上面设置格式,然后选择线,接下来所有的线都设置为无即可
然后工作表重新命名为上一页,双击下面工作表名称,手动输入名字即可,我这边命名为上一页超链接
如此操作,上一页超链接组件工作表就设置好了,接下来就按照这个方式做其他的组件工作表
该操作方式同样能够用来制作文字指标卡
4.5.2 下一页
在上一页超链接工作表中,我们已经将样式格式调整完毕,接下来我们直接在上一页组件工作表中进行拷贝,右键点击拷贝,生成一张新的工作表,然后进行如下步骤
1.下面名称改名为下一页超链接
2.将下一页公式拉到上一页文字的地方
3.点击文本,将里面的上一页文字改为下一页。
下一页超链接的组件就做好了,如图
4.5.3 首页
同理,首页跟下一页的操作是一样的,也是先拷贝,接着改工作表名称,拖入替换为页数最小值公式,再把文本改成首页。效果如图。
4.5.4 末页
同理,拷贝,改工作表名称,拖入替换为页数最大值公式,再把文本改成末页。效果如图。
4.5.5 页数值
同理,拷贝,改工作表名称,拖入替换为页数最大值公式,点击插入,选择聚合(页数最大值),再在前面加上/。效果如图。
4.5.6 数据量
跟上面步骤一样,把订单(计数)拖进去,改下文本和标题即可
4.5.7 刷新数据
拷贝一张首页,修改标题名称和文字如下图即可
到此,分页公式参数组件相关开发完成。
5.模糊查询相关公式组件开发
一般分页报表往往都伴随着筛选器和参数等查询内容,我的例子中用一种复杂的做法进行查询。这也是项目中用上的一种查询模式。
5.1 维度选择参数创建
接下来我们再来创建一个参数,就是维度选择参数。比如我做一个模糊查询搜索框的筛选器,这个筛选器支持多个条件查询。比如该搜索框可以查询订单ID,也可以用来查询国家地区、产品名称、客户名称等。
新建维度选择参数如下。
新建参数,名称为维度选择,数据类型选择字符串,允许值选择列表。
值是可以手动输入的,这边我例子里面就只输入订单ID和客户名称,实际上我项目里面用的维度更多。这个可以根据自己实际需要来进行值的输入(实际做的项目里面我输入了6个维度)。
5.2 维度选择公式创建
如下:维度选择
IF [参数].[维度选择] = '订单ID'
THEN [订单 Id]
ELSEIF [参数].[维度选择] = '客户名称'
THEN [客户名称]
END
IF的条件为参数条件判断,THEN为所选参数所显示对应的结果。
比如当我们维度选择参数选择订单ID,该维度公式显示的值是订单Id这一列的值,而选择客户名称该维度公式显示的就是客户名称的值。
当然这边只列举了2个IF....ELSE.... 至于用多少个,取决于实际需要。
5.3 参数选择组件工作表创建(可选)
5.3.1 文字显示公式创建
其实这个只是我为了效果实现的更加炫酷些,不需要的话可以跳过。只做到5.2步骤其实就可以实现功能了。
首先我们创建公式,刚才参数里面的值是订单ID和客户名称,我们就创建两个字符串文字公式。
还有需要创建显示对应的显示隐藏公式
如图所示,细节的话就不多说了
1.订单ID组合公式
(1)订单ID标题
(2)订单ID参数显示隐藏公式
2.客户名称组合公式
(1)客户名称标题
(2)客户名称显示隐藏公式
当你要创建几个维度选择的时候,就做几个对应的公式。比如五个维度选择就做五个标题和显示隐藏公式。
5.3.2 蓝白按钮筛选器组件制作
白色按钮是用来和参数进行连动,当我们点白色按钮,搜索栏就可以搜索对应维度。而蓝色按钮是我们点击某个维度后,该白色按钮切换为蓝色。用的原理就是前一篇文章的显示隐藏(工作表切换)。
(1)白色订单ID按钮
如图所示,将公式调整到相应页面,样式也进行如下的设计。
白色按钮工作表对应的筛选器公式值选择N。
(2)蓝色订单ID按钮
将刚才的白色标题拷贝一份,然后筛选器值修改为Y。报表背景颜色修改为蓝色,文字修改为白色。工作表进行重命名。
(3)客户名称的白标题,和上面的白色标题一样,按照一样的原理,之前创建的不同公式进行操作。
(4)客户名称的蓝色标题,和上面蓝色标题一样原理。
好了,到这里我们的组件准备工作就完成了。接下来开始将我们做好的各个工作表,参数,排版布局进行整合,制作一张仪表板
累死我了,写了这么多字。
6.仪表板整合工作
最后一步,仪表板整合工作
6.1 仪表板排版布局
6.1.1分页报表腰部排版布局
这个没什么可说的,直接放上去即可,如图,一个水平容器加上工作表。
6.1.2 分页报表表脚排版布局
按照顺序依次为1.首页超链接工作表,2.上一页超链接工作表,3.页数参数,4.页数值工作表,5.下一页超链接,6.末页超链接,7.空白对象,8.每页数量文字,9.每页显示数据数量参数,10.数据量工作表。
这些都是之前制作好的工作表和参数,以及tableau仪表板对象进行组合。
参数的话点击工作表,然后点击下三角,再选择参数,点击每页显示数据数量和页数参数。然后点击参数,点击下三角,选择键入内容
6.1.3 分页报表表头排版布局
首先我们点击工作表,选择筛选器,然后选择维度选择筛选器,再点击维度选择筛选器,选择通配符匹配。
布局依次如下 1.搜索内容文字,2.维度选择筛选器,3.水平容器各种蓝白标题,4.空白组件,5.刷新数据工作表
由于参数筛选器进行显示隐藏,所以例子里面蓝色订单ID按钮和白色客户名称按钮是隐藏状态(可选,后面有简易替代操作)。
接下来将点击维度选择筛选器的下拉三角,选择应用工作表,然后点击选定工作表,应用如下图。
6.2 仪表板添加操作(添加参数操作)
由于之前我们工作表做了相关参数和参数连动的公式,所以我们接下来添加仪表板操作,点击上方的仪表板,再单击操作,弹出如下窗口。然后点击下面添加动作,点击更改参数。
6.2.1 添加首页参数操作
命名为首页参数,选择首页超链接工作表,运行操作方式点击选择,目标参数选择页数,源字段选择页数最小值,聚合选择总和,清除选定内容将会保留当前值。点击确定
6.2.2 添加上一页参数操作
命名为上一页参数,选择上一页超链接工作表,运行操作方式点击选择,目标参数选择页数,源字段选择上一页,聚合选择总和,清除选定内容将会保留当前值。点击确定
6.2.3 添加下一页参数操作
命名为下一页参数,选择下一页超链接工作表,运行操作方式点击选择,目标参数选择页数,源字段选择下一页,聚合选择总和,清除选定内容将会保留当前值。点击确定
6.2.4 添加末页参数操作
命名为末页参数,选择末页超链接工作表,运行操作方式点击选择,目标参数选择页数,源字段选择页数最大值,聚合选择总和,清除选定内容将会保留当前值。点击确定
6.2.5 添加刷新数据参数操作
重新点回首页参数,源工作表把刷新数据超链接点上即可。
建完参数点击确定按钮,才能使得建好的参数生效,否则白建了。红色框框的是必须建的参数,就是上面的步骤。
其实到这一步必须做的已经结束了,已经实现了分页报表模糊查询的操作。如图,我们将刚才的按钮布局换成维度选择参数,就可以进行分页及模糊搜索全部功能了。
接下来我们来锦上添花来添加可选参数操作,让我们的模糊查询分页报表更加美观。
可选参数操作跟上面一样,维度选择参数有几个值,就进行几次操作。
参数里面的值是订单ID和客户名称,那么我们分别对这两个值进行添加操作,大家项目上可以根据自己的需求添加N个操作。
6.2.6 添加订单ID参数操作(可选)
如图,标红框即为示例操作,跟上面的操作大体一样,细节不同。源工作表只选择订单ID的白标题,不要选中蓝标题。
6.2.7 添加客户名称参数操作(可选)
如图,标红框即为示例操作,跟上面的操作大体一样,细节不同。源工作表只选择客户名称的白标题,不要选中蓝标题
到这一步,点击确定后,再在操作栏下点击确定,整张分页模糊查询仪表板就做完了。
7.报表实际使用简单展示
7.1 分页功能演示
接下来就是我们所作分页模糊查询报表的功能演示。首先我们打开做好的工作簿,从样式上来看没有问题,如图,目前是固定在第一页。
我们重新输入每页数量(页数参数),例子里面默认是50,我们来输入20。如图所示,可以看到表的数据数量变为了20条,而页数也变为了498页。
我们点击下一页,报表跳转到了第二页,说明下一页翻页功能实现了。
接下来我们点击末页,可以看到页数跳转到498页了。
我们再点击下一页,由于之前在末页参数相关公式做过设置了不能大于最大页数,所以点击下一页不会跳转。
我们继续测试上一页功能,如图所示,上一页功能也实现了。
我们点击首页,如图,功能实现了,跳转到了第一页。
在第一页的时候我们继续点击上一页按钮,由于首页参数相关公式同样限制不能<=0,所以点击上一页不跳转。
因为这时候每页数据数量为20,我们先点击末页,然后再在每页数量里面输入30,可看到由于页数超过最大页数,从而不显示数据
这时候,我们点击刷新数据,页面就可以正常显示数据了,还是每页数量为30的
OK,到这里分页功能测试完毕,当然相比自开发里面还是有小瑕疵的,因为毕竟参数输入是无法设置一个会变化(参数参与计算)的最大页数值(当然可以手动设置参数最小值为1,这个我文章里没演示)。如果不显示数据,就告诉用户点击刷新数据超链接即可。
7.2 模糊查询功能演示
在刚才的基础上,我们输入一些值,目前显示蓝色的订单ID,说明上面的搜索框支持的是订单ID搜索。我们随便输入一个值,如下。模糊查询了这些订单数据。
接下来清空搜索框内容,点击客户名称,客户名称按钮变为蓝色。代表搜索框现在支持客户名称查询。
我们输入邢字,显示结果如下
至于出现的其他问题,我在实际项目上直接表上面写了一行小字(我的理论是把用户当作新手伺候)。问题的话,这里就不演示了。
8.结语
由于猴子这边是先把示例工作簿做好,然后再写文章的,所以看上去示例图有些违和。但是按照这个步骤一步一步的做是能够复刻出来功能一样的分页报表的。
如果朋友们想和猴子交流心得的,可以在评论区留言,看到了都会回复的,当然也希望大家多多指出我的问题,毕竟也是第一次写技术类的文章,难免有不足之处。
看在猴子这边写了六千多字的份上求点赞关注收藏,接下来我还会出其他实用的Tableau的技术文章。
想要示例TWBX文件的也可以评论区下方留言和私聊我。
谢谢大家百忙之中抽出时间观看这篇文章。