帆软图表多层钻取

 这是工作记录,有看到的且刚好有需要完成这种对应需求的,可以拿去参考。我也只是个刚刚接触帆软的新人,这是刚好碰到了需要完成这个问题,在网上没有找到相关的文案,除了帆软的帮助文档,但是看着很难受,所以我在解决后发布一下我这边的解决方法,其实跟帮助文档差不多,但是我只是尽可能把操作详细的都写一遍而已,所以如果有其他的解决方法,也可以发出来大家一起参考,相互进步。也祝大家事业有成,身体健康。

自身多层钻取(三层及以上)

第一步.sql数据集

第一层sql数据集

select 
T1.v_hoteltype_dec 注册渠道大类,
-- T1.v_extend_hotel_name 注册渠道酒店,
-- T1.v_dept_dec 注册渠道部门,
-- T1.v_member_source_dec 注册渠道来源,
sum(if(date(T1.d_create_date) between '${开始日期}' and '${结束日期}',1,0)) 本期新会员数量,
sum(if(date(T1.d_create_date) <'${开始日期}',1,0)) 老会员数量,
sum(if(date(T1.d_create_date) <='${结束日期}',1,0)) 总会员数
from d_member_info T1 
-- where  T1.v_extend_hotel_code Not In('YJJR01')
group by 注册渠道大类-- ,
-- 注册渠道酒店,
-- 注册渠道部门,
-- 注册渠道来源

这一层的sql数据集只需要注释掉其他层,只保留第一层的所需要查询的数据就行。比如:第一层的数据有“饮品”、“食品”、“干货”。

第二层sql数据集

select 
-- T1.v_hoteltype_dec 注册渠道大类,
case when T1.v_extend_hotel_name is null then "(缺失值)" else T1.v_extend_hotel_name end 注册渠道酒店,
-- T1.v_dept_dec 注册渠道部门,
-- T1.v_member_source_dec 注册渠道来源,
sum(if(date(T1.d_create_date) between '${开始日期}' and '${结束日期}',1,0)) 本期新会员数量,
sum(if(date(T1.d_create_date) <'${开始日期}',1,0)) 老会员数量,
sum(if(date(T1.d_create_date) <='${结束日期}',1,0)) 总会员数
from d_member_info T1 
-- where  T1.v_extend_hotel_code Not In('YJJR01')
where T1.v_hoteltype_dec = '${hoteltype_dec2}'
group by -- 注册渠道大类,
注册渠道酒店-- ,
-- 注册渠道部门,
-- 注册渠道来源

这一层的sql数据集先注释除了第二层数据的其他层级,其次加一个参数'${hoteltype_dec2}',来判断要展示的第二层数据是第一层的哪个下级,比如:“饮品”的下一级有“牛奶”、“茶水”、“饮料”。

还有一个注意的就是我这边从第二层开始,在层级会出现小部分的空字符,而这个空字符会影响到继续钻取的功能,所以我这边是将这些空字符进行一次case,让它们不会出现影响钻取的功能。要是没有会影响钻取的空字符,可以不用case,直接写字段就行。

备注:新增的判断参数原先是‘${hoteltype_dec}’的,这是我这边在搞的时候,已经有其他图表设置过了这个原先的参数,所有我才在后面加上了数字来区分这个参数是对应哪个图表的钻取参数。

第三层sql数据集

select 
-- T1.v_hoteltype_dec 注册渠道大类,
-- T1.v_extend_hotel_name 注册渠道酒店,
case when T1.v_dept_dec is null then "(缺失值)" else T1.v_dept_dec end 注册渠道部门,
-- T1.v_member_source_dec 注册渠道来源,
sum(if(date(T1.d_create_date) between '${开始日期}' and '${结束日期}',1,0)) 本期新会员数量,
sum(if(date(T1.d_create_date) <'${开始日期}',1,0)) 老会员数量,
sum(if(date(T1.d_create_date) <='${结束日期}',1,0)) 总会员数
from d_member_info T1 
-- where  T1.v_extend_hotel_code Not In('YJJR01')
where T1.v_hoteltype_dec = '${hoteltype_dec2}'
and case when T1.v_extend_hotel_name is null then "(缺失值)" else T1.v_extend_hotel_name end = '${extend_hotel_name2}'
group by -- 注册渠道大类,
-- 注册渠道酒店,
注册渠道部门-- ,
-- 注册渠道来源

这一层的sql数据集先注释除了第三层数据的其他层级,其次需要将第二层的sql数据集里的参数'${hoteltype_dec2}'复制过来,再添加新一个参数'${extend_hotel_name2}',来判断要展示的第三层数据是第二层的哪个下级,比如:“牛奶”的下一级有“纯牛奶”、“鲜牛奶”。

还有要注意的是在第二层sql数据集的时候有像我一样进行过case操作的时候,需要在参数'${extend_hotel_name2}'传参的字段换成case语句,这样是确保在钻取过程中直接不继续钻取了。因为原层级的值为空字符时,是没办法判断你是否有钻取操作的。

第四层sql数据集

select 
-- T1.v_hoteltype_dec 注册渠道大类,
-- T1.v_extend_hotel_name 注册渠道酒店,
-- case when T1.v_dept_dec is null then "缺失值" else T1.v_dept_dec end 注册渠道部门,
case when T1.v_member_source_dec is null then "(缺失值)" else T1.v_member_source_dec end 注册渠道来源,
sum(if(date(T1.d_create_date) between '${开始日期}' and '${结束日期}',1,0)) 本期新会员数量,
sum(if(date(T1.d_create_date) <'${开始日期}',1,0)) 老会员数量,
sum(if(date(T1.d_create_date) <='${结束日期}',1,0)) 总会员数
from d_member_info T1 
-- where  T1.v_extend_hotel_code Not In('YJJR01')
where T1.v_hoteltype_dec = '${hoteltype_dec2}'
and case when T1.v_extend_hotel_name is null then "(缺失值)" else T1.v_extend_hotel_name end = '${extend_hotel_name2}'
and case when T1.v_dept_dec is null then "(缺失值)" else T1.v_dept_dec end = '${dept_dec2}'
group by -- 注册渠道大类,
-- 注册渠道酒店,
-- 注册渠道部门,
注册渠道来源

这一层的sql数据集先注释除了第四层数据的其他层级,其次需要将第三层的sql数据集里的参数'${hoteltype_dec2}'和参数'${extend_hotel_name2}'复制过来,再添加新一个参数'${dept_dec2}',来判断要展示的第四层数据是第三层的哪个下级,比如:“纯牛奶”的下一级有“伊利纯牛奶”、“蒙牛纯牛奶”。

第二步.图表设置

图表展示设置

先是正常把图表弄出来,这里我就弄了一个可以返回第一层的文字,这个文字用条件属性设置只会在图表不是第一层时显现,若是处于第一层就是隐藏状态。帆软的帮助文档就有,这里主要是通过条件设置判断参数'${hoteltype_dec2}'为空时隐藏。用超级链接设置显现状态下点击时把参数'${hoteltype_dec2}'传参值为空就可以了。

备注:我又尝试过弄返回第二层和返回第三层的传参,还有对应的隐藏和显示状态的切换,只不过没搞好,我最多只能弄到返回第二层的传参和隐藏显现状态的切换,第三层一直失败,主要问题出在切换效果不如意,所以要是有人能搞出来的,麻烦告知一下,谢谢。

图表数据设置

首先数据来源选择“单元格数据”,然后分类名用公式定义:=if(len($hoteltype_dec2) = 0, hyds1.select(注册渠道大类), if(len($extend_hotel_name2) = 0, hyds2.select(注册渠道酒店), if(len($dept_dec2) = 0, hyds3.select(注册渠道部门), hyds4.select(注册渠道来源))))

这个公式基本上就可以当成模板来修改。

特别说明:饼图的分类名会直接把饼图分出来,所以柱状图的分类名的公式,在饼图这边要写到系列名这块,分类名直接空着就行。

系列名也是可以用上面那个公式的,因为像我现在弄的这个钻取因为展示的数据就是新会员和老会员,但是我也是有搞过一个系列名用这个公式的,因为就一列数据来表示系列名,一列数据就是对应系列名的数据,所以才用公式,比如:有一列数据为性别,而对应数据也只有一列,那样就可以用公式来写系列名。

值的书写也是上面那个公式的变种,基本上格式不变。=if(len($hoteltype_dec2) = 0, hyds1.select(本期新会员数量), if(len($extend_hotel_name2) = 0, hyds2.select(本期新会员数量), if(len($dept_dec2) = 0, hyds3.select(本期新会员数量), hyds4.select(本期新会员数量))))

图表特效设置

首先添加链接这里先添加“图表超链-联动单元格”,联动单元格需要设置到图表的左上角单元格位置就行,然后参数就是那三个钻取参数,它们各自对应的值分别为参数'${hoteltype_dec2}'对应的值为=if(len($hoteltype_dec2) = 0, category, $hoteltype_dec2)

参数'${extend_hotel_name2}'对应的值为=if(len($hoteltype_dec2) = 0, "", if(len($extend_hotel_name2) = 0, category, $extend_hotel_name2))

参数'${dept_dec2}'对应的值为=if(len($hoteltype_dec2) = 0, "", if(len($extend_hotel_name2) = 0, "", if(len($dept_dec2) = 0, category, $dept_dec2)))

再添加链接这里先添加“动态参数”,参数就是那三个钻取参数,它们各自对应的值分别为参数'${hoteltype_dec2}'对应的值为=if(len($hoteltype_dec2) = 0, category, $hoteltype_dec2)

参数'${extend_hotel_name2}'对应的值为=if(len($hoteltype_dec2) = 0, "", if(len($extend_hotel_name2) = 0, category, $extend_hotel_name2))

参数'${dept_dec2}'对应的值为=if(len($hoteltype_dec2) = 0, "", if(len($extend_hotel_name2) = 0, "", if(len($dept_dec2) = 0, category, $dept_dec2)))

效果图

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值