数组去重应用-指定级次的维下拉节点名称去重

3367
1

缱绻 数据领袖Lv6

发表于2019-2-15 15:51

楼主
本帖最后由 缱绻 于 2019-2-15 16:05 编辑

报表模板上有维下拉参数(@dw,可多选,仅选择叶子节点),需要求出维下拉所选择的节点的上级名称并去重,在分析区去表格中展示。
多级维:市///险种-1-2级,维表结构和部分数据场景如下:

例如:
维下拉参数选择了市本级(一票征缴),市本级(企业养老),奎文区(一票征缴),奎文区(企业养老),奎文区(机关养老),潍城区(一票征缴),潍城区(企业养老),潍城区(机关养老),文本中需要显示出对应文字市本级,奎文区,潍城区(即已选择节点对应的上级节点的文本并去重显示)。


解决方案:
A1表元表达式
<#=@dw^"".split("\\|").select(true,diminf("单位",@,"$UPID")).distinct()#>
B1表元表达式:
diminf("单位",self.leftcell.value)
公式解析:
1、用@dw^””.split("\\|")将选中的维下拉节点ID以数组格式返回,其中需注意@dw后面需要加上^””将参数对象返回成字符串格式;
2、.select(true,diminf("单位",@,"$UPID"))表示将数组中的每一项用diminf返回upid,组成一个新数组,@表示数组中的每一项;
3、.distinct()表示对数组项去重处理,返回一个新的数组。
4、用diminf("单位",self.leftcell.value)取出ID对应的name。
注:此方法多级维与通用为都适用。
场景扩展
以上所述只是解决了当前所选择叶子节点的直接上级并去重的场景,那么,
如果维表级次有4级、5级、6级……想求出指定级次的父节点名称并去重,该如何实现呢?其实,实现思路同上,只需修改数组表达式中diminf部分即可,下面举两个例子:
1、通用维
a-b-c-d四级通用维,维表结构如下图,例如需求出维下拉(可多选且仅选择叶子节点)当前所选的叶子节点对应的的b级节点名称去重并展示。
实现方法:
A1表元表达式改成如下:
<#=@aa^"".split("\\|").select(true,diminf("机构",@,"b")).distinct()#>
Ps:其中diminf("机构",@,"b")返回维下拉所选节点对应的b级节点ID。
2、多级维
比如维表共有4级:地区---区县(2-2-2-2)求出维下拉(可多选且仅选择叶子节点)当前所选的叶子节点对应的第二级节点名称去重并展示。
有两种思路处理:
思路1区县级的上上级就是省级,可以用嵌套diminf表达式求出上上级;
A1表元的表达式写法如下:
<#=@dw^"".split("\\|").select(true,diminf("单位",diminf("单位",@,"$UPID"),"$UPID")).distinct()#>
思路2通过当前选择节点的IDleft函数截取前4位获得省级ID
A1表元的表达式写法如下:
<#=@dw^"".split("\\|").select(true,left(@,4)).distinct()#>

注:1、diminf函数说明可参数BI函数字典:http://help.esensoft.com/doc-view-176.html;
2、其中 .split() 、.select()、 .distinct()均为数组常用写法,以下是函数说明:



最近看过此主题的会员

liwm

esen_51JBYX12HL

esen_4YVMSUSNZ8

esen_4SBQYN0BZ5TZ

esen_4Y3L5ADO80

huangt

1个回答

只看楼主

挨踢妹 数据达人Lv4

发表于2019-2-20 21:21

只看该作者

取消 关注该作者的回复

沙发

学习啦!

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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