【分享】BI从I获取代码组表元数据进行过滤

4995
3

忘记你 初学数据Lv2

发表于2018-6-29 10:10

楼主
方式适用于Oracle数据库
需求:
     I表元使用代码组,存储内容格式为1,2,3类似格式,如下图:

   BI有一个多选维下拉框(单层级)和I的代码组内容一直,如果BI中选择 了1|3两项,那么过滤出的数据就是所有包含1和3 的记录(例如1,2,3/1,3,4/3,1,5/)都包含1和3

   如果下拉框为空,显示全部数据
   数据内容不是维表的id字段,是维表的caption内容,例如 如果选择了1|3,择得到结果1,3,4,此时Bi界面需要显示的内容为:北京,广州,武汉

最近看过此主题的会员

YOUNGc

陈平安

esen_4Y3L5ADO80

salmons001

esen_4SBQYN0BZ5TZ

Gardenia

13407717840

13430212034

柒先生

弗洛休

hhdtest

3个回答

只看楼主

末小丸 初学数据Lv2

发表于2018-6-29 10:33

只看该作者

取消 关注该作者的回复

沙发

看起来很厉害的样子

大哥很IT 数据老手Lv5

发表于2018-6-29 10:10

只看该作者

取消 关注该作者的回复

板凳

解决方案:
   1、通过sql数据源获取需要的结果集(此处应用到oracle的regexp_substr,将单表元内容 变成多条记录显示 ,在利用mimus的方式获取差集)
    2、通过显示表达式的方式将 id显示为  文本内容(此处应用到数据函数)
具体步骤
一、sql数据源设置:
select b1 from IXJRW_B01 where b1 in(
select b1 from IXJRW_B01
minus
select b1 from IXJRW_B01 aa where  exists (
select b1
  from (select REGEXP_SUBSTR('<#=if(len(@dq)=0,ardb('select distinct id from DIM_DQ').join(','),substitute(asstr(@dq),'\|',','))#>', '[^,]+', 1, level) AS b1
          from dual bb
        connect by level <= LENGTH('<#=if(len(@dq)=0,ardb('select distinct id from DIM_DQ').join(','),substitute(asstr(@dq),'\|',','))#>') - LENGTH(REPLACE('<#=if(len(@dq)=0,ardb('select distinct id from DIM_DQ').join(','),substitute(asstr(@dq),'\|',','))#>', ',')) + 1) b
minus
select REGEXP_SUBSTR(<#=if(len(@dq)=0,"'"^asstr(ardb('select distinct id from DIM_DQ').join(','))^"'",'B1')#>, '[^,]+', 1, level) AS b1
          from IXJRW_B01  where b1 =aa.b1
        connect by level <= LENGTH(<#=if(len(@dq)=0,"'"^asstr(ardb('select distinct id from DIM_DQ').join(','))^"'",'B1')#>) - LENGTH(REPLACE(<#=if(len(@dq)=0,"'"^asstr(ardb('select distinct id from DIM_DQ').join(','))^"'",'B1')#>, ',')) + 1      
)
)
其中,用到了红表达式:
<#=if(len(@dq)=0,ardb('select distinct id from DIM_DQ').join(','),substitute(asstr(@dq),'\|',','))#>
<#=if(len(@dq)=0,"'"^asstr(ardb('select distinct id from DIM_DQ').join(','))^"'",'B1')#>
1、如果为空情况,相当于全选minus全选,所以得到全部结果
2、如果有选项,择把选项内容由于1|3的格式变成  1,3的格式,minus  B1字段(1,3 被变成两条记录  1 一条,3一条, minus B1字段 字段内容也变成了多条记录   )
二、显示表达式设置
@txt.split(',').select(true,diminf('DQ',@,'NAME')).join(',')
先识别‘,' 把记录1,3,4变成数组[1,3,4]在利用select遍历数组  把id 通过diminf 获取到name字段,在将数组['北京','广州','武汉']通过join的方式变成字符串 北京,广州,武汉

韦韬然 数据老手Lv5

发表于2018-8-3 14:12

只看该作者

取消 关注该作者的回复

地板

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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