永洪BI | 实现不同粒度的聚合效果

文章介绍了如何在报表开发中实现批量查询功能,包括通过永洪BI的文本参数组件设置和SQL脚本来处理批量输入的客户名称和账户,满足不同粒度的数据需求。同时,提供了两种解决方式以应对客户粒度高于账户粒度的情况,包括表组件的汇总功能和使用rollup函数优化数据集。
摘要由CSDN通过智能技术生成

最近在开发报表过程中,业务本着通过报表最大化实现便捷操作,提出了几点想法:

1.批量输入客户名称和账户,在返回结果时,可以看出输入的待匹配的客户名称或账户对应的数据行,便于业务导出结果后进行VLOOKUP。

2.输入账户信息,返回账户粒度数据信息;输入客户名称,返回客户粒度数据信息。(由于一个客户名下可能有多个账户,客户粒度要高于账户粒度。)

这些想法确实在之前报表开发过程中没有遇到过,不得不说这位业务把我扩展出的可以批量查询的文本参数组件使用的很极致,我最初的想法是(1)批量输入n个账户查询;(2)批量输入n个客户名称查询;(3)批量输入m个账户和(n-m)个客户名称混搭查询。好像之前的业务同事只用了(1)和(2),显然这个业务用了(3),否则不会提出这样的报表优化建议。

问题背景

业务想要导出某个时间点客户的存款信息,便于业务考核。为了演示,构造一个数据集,如下:

字段说明:

crm_cust_no—客户号

province—省份

city—城市

cust_name—客户名称

agt_num—账户

dpsit_bal—账户余额

这里不考虑时间因素,以某天数据切片进行分析。

需求1解决方式

先分享下,将永洪BI自带文本参数扩展出批量查询功能,首先向报告中拖入一个文本参数组件

对文本参数组件进行设置:

随后,在报告菜单栏,报告—脚本

跳出脚本界面后,选择“变化时运行”,输入以下语句:

注:split(/[\s\n]/) — 按照空格或者换行符进行分割。

最后,在表组件设置筛选条件,如下图所示:

即可实现批量输入账户或客户名称进行查询。效果如下:

回归正题,为了解决业务需求1,回到制作报告界面,选中表组件,数据界面新建计算列:

计算类型选择SQL语句,数据以下语句:

case when agt_num in (param["账户数组"]) then agt_num else cust_name end

将计算列拖入表组件,即可实现。效果如下:

注:这种方式如果在抽取数据前提下将会失效。

需求2解决方式

方式一:在制作报告时使用表组件的汇总功能

因为客户粒度高于账户粒度,所以在表组件中移除agt_num列。查看报告效果如下:

方式二:在数据集中使用rollup函数

我们需要对数据集语句进行更改,原SQL语句:

SELECT
    province
    ,cust_name
    ,cast(agt_num as char(25)) agt_num
    ,dpsit_bal
from test_db.test_20230325

新SQL语句:

select 
	province
	,cust_name
	,coalesce(agt_num,cust_name) search_key
	,bal
from 
(
select
	province 
	,cust_name 
	,agt_num 
	,sum(dpsit_bal) bal
from test_db.test_20230325 t 
group by province,cust_name,agt_num with rollup
having cust_name is not null 
) a

在制作报告中,用search_key列代替方式一的计算列,同时修改表组件的筛选条件:

即可实现同样效果,同时还可以优化需求1的解决方式在抽取数据前提下失效的情况。

不足之处,还请各位大神指正~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

McGrady然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值