多级维不同级次维节点多选时按照不同级次节点名称显示

3464
3

yangqh 数据老手Lv5

发表于2019-7-25 10:50

楼主
需求场景:
维下拉参数组件,绑定多级维,并设置允许多选,现希望勾选属于不同层级的维节点后,分析表上按照勾选的维节点对应的级次来展示数据。
比如说,有多级维行政区划(省-市-区县),下拉选择河北省、太原市、密云县,那么分析表中就计算出来 河北省、太原市、密云县这三行数据,如下图:
ps:如果有某分组节点下,下级节点被全选,那么按照勾选了这个分组节点处理。
比如说,北京市下有两个节点:“市辖区”和“县”,那么当同时勾选“市辖区”和“县”时,效果同直接勾选“北京市”,所以此时分析表中只需要显示一条北京市数据,而不是显示市辖区和县两条数据。
思路解析:
一个浮动维表元上,只能固定选择一个下钻级次,那么是不是可以先用三个浮动维数据行,把省、市、区县三级都浮动出来,然后隐藏掉没有勾选的对应维数据行呢?
实现方法:
Step1、添加维下拉参数,设置参数名称、参数标题、维表,并勾选允许多选
Step2、添加分析表格,设置三行浮动行,均按照行政区划字段浮动,且分别设置下钻级次为:省、市、区县,如下图:
Step3、分析表格上增加一列辅助列,用来帮助判断当前行的行政区划,是否是维下拉中勾选过的行政区划节点。表元表达式为:
asstr(@cs).split("\|").select(true,diminf("行政区划",@)).find(self.leftcell(2).txt)
公式解析:
[size=10.5000pt]1、多级维下拉多选,参数返回值是110228|130000|140100这样的多个维ID用“|”符号隔开的字符串的格式。asstr(@cs).split("\|") 表示将@cs返回值根据“|”拆分成数组中的项并以数组格式返回,即[“110228”,”130000”,”140100”]
2、.select(true,diminf("行政区划",@))表示将数组中的每一项用diminf返回name值,组成一个新数组,比如[“河北省”,”太原市”,”密云县”],其中@表示数组中的每一项;
3、.find(self.leftcell(2).txt)表示在数组中寻找是否有本行行政区划列的值,有则返回这一项在数组中的序号,没有则返回-1;
相关wiki:http://192.168.1.200/wiki/pages/viewpage.action?pageId=590506
Step4、分别在三个浮动行的“显示”属性上设置表达式,当辅助列表元值为-1时行隐藏,否则行显示。比如第一行,省的浮动行,行显示属性上设置表达式为<#=if(C2=-1,0,1)#>
最后,将辅助列设置隐藏就大功告成啦~

最近看过此主题的会员

brave0520

Yuuuu

zhaolj

LuuuvLetter

张名

Shirley

阿瓦大

chestnut

淑离

ajsdhkjfhdasf

pandabuxizao

3个回答

只看楼主

辰哥 管理员

发表于2019-7-26 13:55

只看该作者

取消 关注该作者的回复

沙发

非常感谢您的分享,辰哥在这里替薏米们说声谢谢!

biubiu

发表于2019-8-1 13:50

只看该作者

取消 关注该作者的回复

板凳

我按照步骤来的,为什么还没选择就全部都显示了呢

yangqh 数据老手Lv5

发表于2019-8-1 18:22

只看该作者

取消 关注该作者的回复

地板

biubiu 发表于 2019-8-1 13:50
我按照步骤来的,为什么还没选择就全部都显示了呢

你这里两个浮动行,截图看不出来算出来的数据是属于哪个浮动行的。两个浮动行分别给个背景色看下结果里面数据到底是不是第一个浮动行的

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号