帆软图表文字切换

这是工作记录,记录的是帆软报表制作时遇到的问题和我这边的处理方式,如有更好的方法可以在评论那里说一下,多谢。这一次的记录问题是图表通过其他单元格文字来进行图表内容的切换。

图表切换属性- FineReport帮助文档 - 全面的报表使用教程和学习资料 (fanruan.com)

上面这个超链接是帆软自带的切换属性,只是我这边工作要求跟帆软自带的切换属性风格和要求都不一样,所以才搞了这个图表文字切换,所以看个人需求来参考就行。

图表文字切换

1、sql数据集准备

select 
case when '${month}' = '' then substr(D.d_date,1,7) else D.d_date end 日期,
T4.n_unit_value 单位值,
max(ifnull(n_cal_type_lv1,1)) 本期发生计算类型,
sum(if(T1.n_business_dt >= ${开始日期} and T1.n_business_dt <= ${结束日期},n_cal_value1_lv1,0)) 本期发生指标值1,
sum(if(T1.n_business_dt >= ${开始日期} and T1.n_business_dt <= ${结束日期},n_cal_value2_lv1,0)) 本期发生指标值2,
max(ifnull(n_cal_type_lv2,1)) 本期预算计算类型,  
sum(if(T1.n_business_dt >= ${开始日期} and T1.n_business_dt <= ${结束日期},n_cal_value1_lv2,0))  本期预算指标值1,
sum(if(T1.n_business_dt >= ${开始日期} and T1.n_business_dt <= ${结束日期},n_cal_value2_lv2,0))  本期预算指标值2,
max(ifnull(n_cal_type_lv1,1)) 同期发生计算类型,
sum(if(T1.n_business_dt >= ${开始日期}-10000 and T1.n_business_dt <= ${结束日期}-10000,n_cal_value1_lv1,0)) 同期发生指标值1,
sum(if(T1.n_business_dt >= ${开始日期}-10000 and T1.n_business_dt <= ${结束日期}-10000,n_cal_value2_lv1,0)) 同期发生指标值2
from f_report_day_sum T1 
inner join d_date T2 on T1.n_business_dt=T2.n_date_id
inner join d_date D on D.n_date_id  between ${开始日期} and ${结束日期} and (T1.n_business_dt=D.n_date_id or T1.n_business_dt+10000=D.n_date_id)
inner join d_hotel_info T3 on T1.v_hotel_code=T3.v_hotel_code-- and T3.v_is_show='Y'  
inner join d_report_info T4  on T1.v_index_code=T4.v_index_code
where T1.v_index_code = ('${sales_type}')
-- and T4.v_index_display in ('餐饮收入Total Food&Beverage')
and T1.v_hotel_code Not In('YJJR01')
and ((T1.n_business_dt between ${开始日期} and ${结束日期} )
or (T1.n_business_dt between ${开始日期}-10000 and ${结束日期}-10000))
${if(len(month) == 0,"","and substr(D.d_date,1,7) in ('" + month + "')")}
${if(len(酒店星级) == 0,"","and T3.v_star_dec in ('" +酒店星级+ "')")}
${if(len(酒店品牌) == 0,"","and T3.v_brand_dec in ('" +酒店品牌+ "')")}
${if(len(酒店档次) == 0,"","and T3.v_hotel_level_dec in ('" +酒店档次+ "')")}
${if(len(酒店功能) == 0,"","and T3.v_hotel_type_dec in ('" +酒店功能+ "')")}
${if(len(行政级别) == 0,"","and T3.v_executive_level_dec in ('" +行政级别+ "')")}
${if(len(酒店名称) == 0,"","and T1.v_hotel_code in ('" +酒店名称+ "')")}
group by 
日期

其中需要注意的地方:一是“where T1.v_index_code = ('${sales_type}')”,这里参数的位置因为是数据库那边的数据整合后的“综合项目类型账单表”,通过一个编码来对应某某项目类型;所以我这边处理思路就是通过在对应单元格文字那边设置一个对应编码的“超级链接-动态参数”,通过点击文字传参回到数据集,来完成图表的切换。

二是“case when '${month}' = '' then substr(D.d_date,1,7) else D.d_date end 日期,”,这里只是因为需要查询的日期跨度可能会很大,一个天到一两年,甚至到三四年的数据,到时候图表展示的数据就看着不美观不精确;所以这里的处理思路是一个图表钻取钻回,图表在钻取前先以月份数据展示,钻取后以某月份的日期数据展示,也可以钻回以月份数据展示的状态。

'${month}' 为空的时候,图表以月份数据展示;“substr(D.d_date,1,7)”这里得到的日期形式是yyyy-MM,而当'${month}' 为一个“yyyy-MM”的值时,图表以“yyyy-MM”的该月份的日期数据展示。

三是我这边需要用的数据字段的特殊性:‘单位值、本期发生计算类型、本期发生指标值1、本期发生指标值2、本期预算计算类型、本期预算指标值1、本期预算指标值2、同期发生计算类型、同期发生指标值1、同期发生指标值2’;这些字段是我需要进行二次加工后,在图表中展示出来的数据,而我需要得到和展示的数据简单概括就是“本期、本期预算、同期”,甚至可能会出现需要进行加工,把它变成“同比差额、同比增长率、预比差额、预比增长率,预算完成度”等加工数据,所以这个注意点其实是个特例,是一个很小部分的人在制作帆软报表时才需要注意的特殊地方。

2、图表设置

2.1、图表样式

在这里说一下,这里数据的二次加工的公式:“SWITCH(F7,0,0,1,(G7 + H7) * B8,2,(G7 - H7) * B8,3,(G7 * if(H7 != 0,H7,1)) * B8,4,(G7 / if(H7 != 0,H7,1)) * B8)”。

文字版的公式:“SWITCH(“计算类型”,0,0,1,(指标值1 + 指标值2) * “单位值”,2,(指标值1 - 指标值2) * 单位值,3,(指标值1 * if(指标值2 != 0,指标值2,1)) * 单位值,4,(指标值1 / if(指标值2 != 0,指标值2,1)) * 单位值)”。

因为后续需要将数据加工的几行隐藏,避免影响报表的美观和加载时的效率,所以数据加工那几行最好不要有其他模块相关的数据或者报表填写。

2.2、图表数据设置

因为这里的图表要展示的是我二次加工后的数据,所以在“图表数据设置”这里只能选择“单元格数据”;剩下的就正常填写就行,我这里是折线图,所以分类名就定位数据集的“日期”的单元格,系列名分别填写“本期、去年同期、预算”三个系列名,对应的值就定位对应类型的加工单元格。

2.3、图表特效设置

参数是“${month}”,值是:“if(LEN($month) = 0,category,"")”。

2.4、文字切换区块

在单元格里分别填写对应需要切换的文字,可以让我们通过点击文字来切换图表内容。

然后在对应单元格添加“超级链接-动态参数”,参数为“${sales_type}”,值为该单元格需要切换的参数值,截图这里就是“sales017”。其他三个也是这个操作。

再然后就是给这些文字单元格,先加上边框,再添加一条“条件属性”,这个“条件属性”主要是为了突显图表现在展示的是哪一个项目类型,让切换的效果能够清晰明了的展示出来。

3、效果图

3.1、图表钻取钻回

3.2、图表文字切换

4、备注

这个标题应该还有其他方法可以做到这个效果,还有就是因为这个数据来源还需要我这边自行加工,所以复杂程度和局限性是摆在那里的,你们要是有跟图表切换相关的问题,可以发出来一起探讨,如果sql数据集的字段可以直接用的话,这篇文章可以简洁不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值