找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,极速登录

【少年出品必属精品】动态列、自由纬度组合=实现任意纬度数据下钻功能

让数据成为生产力!!!

第一、痛点

一、实现面临的问题:

1、业务部门抱怨:提不完的数据报表需求,响应速度满足不了业务分析;

2、数据部门吐槽:处理不完的报表需求,需求一直在路上,看不到尽头。

二、具体问题分析:

         举例:地区——销售员——产品类型——产品——销量

1、现状:每个人关注的业务点不同

A、区域领导:既想看区域的汇总情况,又想看各产品类型、各销售员的总销量;

B、产品经理:却关心各产品类型的汇总销量情况,同时想看细分下各产品、各销售员的总销量,及各销售员下,每个人的各产品销售情况;

C、销售员:只想看自身的销售汇总情况,及自身向下的各类产品类别及产品的销量;

         2、问题:需求大同小异,又无法不处理

                 A、针对 区域领导,就需要制作至少3个页面的报表汇总情况表;

                 B、针对 产品经理,同样的至少需要3个页面的报表汇总情况表;

                 C、销售员:同样的至少需要3个页面的报表汇总情况表;

                 综上所述,平时至少需要开发 9张报表才能满足大家的需求。

 

第二、反思实践及成果展示

一、有思考,才有出路

       1、针对以上所列举到的问题,其实可以用BI优先来处理,但现实不允许,分公司目前尚未推广BI项目,业务需求又迫在眉睫;

       2、针对 所列举到的问题,需求大同小异,汇总的维度(列)及顺序发生了变化,比如如果有N个维度(列),那么汇总的方式就有N二次方排序及组合方式;

            那么,未来的需求,永远是做不完的,因为业务总想知道到底哪里的业务做得不够好,总想着再往下再下钻一级看看业务问题的所在。

       3、细思极恐,那么用现有的工具:report是否可以实现自由排序及组合方式?以后,开发一张报表,解决全部的数据汇总问题。

二、思考不够,还要敢于实践

       1、信心不足:起初自己也没啥信心,所以,在技术求问贴,发布了问题,非常感谢小伙伴(flyingsnake)的回复:让我重拾信心,让我真正的去尝试!

       2、重新出发:同时也在饭团老师的鼓励下,不断翻阅帮助文档,想要寻找到相关的答案,很可惜,以往并没有这块的知识讲解!

       3、勇于实践:在最终经过多次的曲折突破,进过一周多的时间,终于实现:多维度动态列(钻取功能)自助组合数据汇总。

三、展示一下最终的实现效果图:

      1、正常的顺序列(3列维度)展示:

       

      2、根据选择的顺序列(3列维度)展示:

           

       3、根据选择的顺序列(4列维度)展示:

           

 

第三、实践之路,总有荆棘

一、使用if判断语句搭配单选框

       1、代码展示:

SELECT 

地区

${if((trim(销售员))=="是"," ,销售员 "," ")}

${if((trim(产品类型))=="是"," ,产品类型 "," ")}

${if((trim(产品))=="是"," ,产品 "," ")}

,sum(销量) 总销量

       FROM 销量

group by 

地区

${if((trim(销售员))=="是"," ,销售员 "," ")}

${if((trim(产品类型))=="是"," ,产品类型 "," ")}

${if((trim(产品))=="是"," ,产品 "," ")}

                               

       2、展示结果:

        

           

       3、总结:

            不足之处:A、参数面板设置非常麻烦,使用单选框,每个纬度都要设置一个控件;B、必须要固定第一个纬度(地区或其它纬度);

                             C、选择否的情况下,空列还存在,影响美观;

            可取之处:勇敢踏出一大步,虽然现在回头看来,好像很傻很傻!

            001使用if判断语句搭配单选框.zip (2.32 K)

二、使用inarry数组函数搭配复选框

         鉴于以上不足之处第一点:使用inarry数组,利用 函数属性,如果字符不在数组内则返回0,可减少控件的设置;

        1、代码展示:

             SELECT 

地区

${if(inarray("销售员",自由组合纬度)!=0," ,销售员"," ")}

${if(inarray("产品类型",自由组合纬度)!=0," ,产品类型"," ")}

${if(inarray("产品",自由组合纬度)!=0," ,产品"," ")}

,sum(销量) 总销量

      FROM 销量

group by 

地区

${if(inarray("销售员",自由组合纬度)!=0," ,销售员"," ")}

${if(inarray("产品类型",自由组合纬度)!=0," ,产品类型"," ")}

${if(inarray("产品",自由组合纬度)!=0," ,产品"," ")}

            

        2、展示结果:

           

        3、总结:

            不足之处:A、必须要固定第一个纬度(地区或其它纬度);B、复选框不选择的情况下,空列还存在,影响美观;

            可取之处:使用复选框,实现了去除繁琐的多个控件设置,也算是一个大的进步;

       002使用inarry数组函数搭配复选框.zip (2.21 K)

三、搭配使用(单选框-必选1个纬度、复选框-非必填项)

        鉴于以上不足之处第一点:使用if函数,选择第一维度(考虑到字符串拼接问题),让第一个维度也动起来。

        1、代码展示:

 

         

        2、展示结果:

         

        3、总结:

            不足之处:A、复选框不选择的情况下,空列还存在,影响美观;

            可取之处:通过组件的配合,已经实现第一维度可选择,多种维度下好像可以自由组合的情况了。

            003搭配使用(单选框-必选1个纬度、复选框-非必填项).zip (2.37 K)

四、实现列隐藏(条件属性)

        1、代码展示:通过条件属性的设置,若是数据为空,则隐藏该列:len($$$)=0,实现多余列的隐藏作用。

        2、展示结果:

        3、总结:

            不足之处:在第一阶段,本以为是完美的状况了!!!

            可取之处:通过条件属性,实现多余列的隐藏作用。

         004实现列隐藏(条件属性).zip (2.43 K)

 

第四、越挫越勇,方法总比困

一、问题的彻底暴露

       1、案例展示问题(第一维度无法做到真正的固定):

         

       2、案例展示问题(自由组合维度无法实现自由的组合):

           

二、再次踏上征程

      鉴于以上暴露的两种情况,其实,与自己起初的想法差距还是十万八千里!!!

      那么,是否仍有解决方案???走到了这一步,是否选择放弃???

      不,我并没有,我咨询了相关的社区老师及互助的群,还有寻求帆软官方的技术支持!

      在多方力量的支援下,并帮助文档的学习下,摸索到了原来还可以通过 indexofarray 进行列字段名的展示及#5列的信息展示。

      但是,当时的想法也是比较粗糙,可以实现立马做了一个简单的demo,分享给大家。

        20210910-动态列自由组合.zip (2.29 K)

       虽然,当时demo是实现了,但是并没有比较好的方式,可以实现回写到SQL,也不敢完全确定 indexofarray 可以在SQL内使用。

       经过一段时间的思考,今天白天终于在多次实践后,终于实现了最终的效果。

       1、代码展示:

             

       2、展示结果:

        

       3、总结:

            不足之处:虽然已实现起初的想法,但未能实现多层级钻取下,显示上级及上上级的汇总数据。

            可取之处:经过一周多的时间,时间并没有白费,也取得了一定的成果!

一张动态列报表-最终版本.zip (2.55 K)

 

第五、分享总结

     一、很开心可以跟大家一起共同成长!有社区的小伙伴们、有互助群、有饭团老师、朵拉老师等多位老师的支持鼓励!

     二、坚持分享,就是最好的学习方式,虽然今天真的熬夜了!很久没有写这么长的分享材料了,但在回溯的时候,自己又有很多不一样的感受与巩固!

     三、欢迎大家,留言多交流,有问题随时喊我!!!谢谢~

 

编辑于 2021-9-15 01:41

编辑于 2021-9-16 15:49

发表于 2021-9-16 15:53:47
前排板凳

1 使用道具 举报

发表于 2021-9-16 16:04:55
大佬,牛!!!     之前一直用的if +条件属性隐藏列

1 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

4回帖数 3关注人数 719浏览人数
最后回复于:2021-9-16 16:06

Array ( [id] => 15 [code] => 4301 [product] => [title] => 帖子详情页右侧banner [demand] => 334px * 410px [img_url] => /uploads/20210924/0ef8ab120ada13ade42a6b049acebc47.jpg [click_url] => https://bbs.fanruan.com/thread-136829-1-1.html [status] => 1 [end_time] => 1633660825 [username] => isaac [edit_time] => 1632451230 )

联系社区管理员|联系帆软|《帆软社区协议》|手机版|帆软社区|Copyright © 帆软软件有限公司 ( 苏ICP备18065767号-7 )

GMT+8, 2021-9-29 03:09 , Processed in 0.142612 second(s), 48 queries , Gzip On.

返回顶部 返回列表