ardb函数在参数联动中的应用

7459
2

不美怎敢妄 初学数据Lv2

发表于2018-6-27 10:15

悬赏1

已解决

楼主
我的分析表表格数据来源于数据库表B,页面上需要有三个参数,其中有两个参数内容希望可以直接获取另外一张数据库表A中的两个字段的内容,同时,这三个参数需要有联动效果,具体如下

1、数据存储情况说明:
电力公司,任务id,以及该任务对应的数据期,存储在数据库表A中,具体如下图。


2、分析表样说明
分析表中设置的3个参数分别是【电网企业】、【任务号】和【年份】,其中【电网企业】参数直接使用的维表内容,但【任务号】和【年份】参数需要分别获取数据库表A中对应的2个字段的数据,【任务号】参数的下拉内容要根据【电网企业】参数决定,【年份】参数的下拉内容要根据前两个参数决定,即3个参数间需要联动的效果。


最近看过此主题的会员

esen_5BVMYLRYOM

吕小布

yfsun1

亿信华

平平无奇小天才

shujm

最佳答案
解决方案
STEP1:电网企业联动任务号
方法:【电网企业】内容直接来源维表,故设置为维下拉框,【任务号】设置为枚举下拉,设置电网企业参数行为,属性部分选择枚举值,任务号值通过sql查询,再使用ardb函数引用。

    参数值如下:变量@gwgs为电网企业
      ardb("SELECT TASKNAME(任务名称) || ':' || TASKNUM(任务id)
               FROM 表A
               WHERE REGIONID(电网企业) = '"+@gwgs+"'
               ORDER BY CREATEDATE(年份) DESC
     ").join(";")

说明:枚举下拉参数中枚举值的写法是:A:aaa;B:bbb;C:ccc(显示值:实际值)所以在sql中要在任务名称和id之间拼一个冒号“:”,另外还要在每一个可选项后加分号,由于SQL返回一个结果集,ardb函数把它处理成数组格式,所以在ardb函数使用时通过join属性连接分号。
Ps:上述sql中的变量引用也可直接使用宏表达式,即<#=@gwgs#>,如果ardb函数还将通过宏表达式引用,由于宏不能嵌套使用,则采用上述写法。

STEP2:电网企业+任务号联动年份
    方法:【年份】参数设置为枚举下拉,同step1中的方法,设置【电网企业】和【任务号】的参数行为,联动【年份】参数的枚举值。





年份参数值如下:变量@tnum为任务id,@gwgs为电网企业
ardb("SELECT REPLACE((YR || '年:' || YR), ',', ';') YR
          FROM (SELECT REGEXP_SUBSTR(YR, '[^,]+', 1, ROWNUM) YR
                        FROM (SELECT CURRENTWATERMARKYEAR(A.数据期) YR
                                     FROM 表A   
                                     WHERE TASKNUM(任务id) = '"+@tnum+"'
                                     AND REGIONID(电网企业) = '"+@gwgs+"')
        CONNECT BY ROWNUM <= LENGTH(YR) - LENGTH(REPLACE(YR, ',', '')) + 1)
  ").join(";")

说明:上述sql主要是将表A中的数据期字段“2005,2006,2007,2008”,处理为如下结果,枚举值的处理方法参考step1中的说明。

2005年:2005
2006年:2006
2007年:2007
2008年:2008



如此便可实现年份参数内容根据电网企业和任务id参数动态获取,再通过定义过滤条件使得年份参数对分析表中数据生效即可。

2个回答

只看楼主

洋洋 小试身手Lv3

发表于2018-6-27 10:16

只看该作者

取消 关注该作者的回复

沙发

实现【电网企业】,【任务号】,【年份】三个参数联动。过程中主要解决两个问题:

1.由于【任务号】【年份】参数内容来源于数据表A,所以需要通过SQL先将可选的【任务号】、【年份】查询出来。

2.客户在表A中的数据期的存储方式比较特殊,最终应用于参数中时要以下拉列表的形式展示,故要将表A中存储的数据期解析成数组,通过枚举下拉形式显示在下拉列表中,同样,任务id也需要解析为数组。

洋洋 小试身手Lv3

发表于2018-6-27 10:15

只看该作者

取消 关注该作者的回复

板凳

解决方案

STEP1:电网企业联动任务号
方法:【电网企业】内容直接来源维表,故设置为维下拉框,【任务号】设置为枚举下拉,设置电网企业参数行为,属性部分选择枚举值,任务号值通过sql查询,再使用ardb函数引用。

    参数值如下:变量@gwgs为电网企业
      ardb("SELECT TASKNAME(任务名称) || ':' || TASKNUM(任务id)
               FROM 表A
               WHERE REGIONID(电网企业) = '"+@gwgs+"'
               ORDER BY CREATEDATE(年份) DESC
     ").join(";")

说明:枚举下拉参数中枚举值的写法是:A:aaa;B:bbb;C:ccc(显示值:实际值)所以在sql中要在任务名称和id之间拼一个冒号“:”,另外还要在每一个可选项后加分号,由于SQL返回一个结果集,ardb函数把它处理成数组格式,所以在ardb函数使用时通过join属性连接分号。
Ps:上述sql中的变量引用也可直接使用宏表达式,即<#=@gwgs#>,如果ardb函数还将通过宏表达式引用,由于宏不能嵌套使用,则采用上述写法。

STEP2:电网企业+任务号联动年份
    方法:【年份】参数设置为枚举下拉,同step1中的方法,设置【电网企业】和【任务号】的参数行为,联动【年份】参数的枚举值。





年份参数值如下:变量@tnum为任务id,@gwgs为电网企业
ardb("SELECT REPLACE((YR || '年:' || YR), ',', ';') YR
          FROM (SELECT REGEXP_SUBSTR(YR, '[^,]+', 1, ROWNUM) YR
                        FROM (SELECT CURRENTWATERMARKYEAR(A.数据期) YR
                                     FROM 表A   
                                     WHERE TASKNUM(任务id) = '"+@tnum+"'
                                     AND REGIONID(电网企业) = '"+@gwgs+"')
        CONNECT BY ROWNUM <= LENGTH(YR) - LENGTH(REPLACE(YR, ',', '')) + 1)
  ").join(";")

说明:上述sql主要是将表A中的数据期字段“2005,2006,2007,2008”,处理为如下结果,枚举值的处理方法参考step1中的说明。

2005年:2005
2006年:2006
2007年:2007
2008年:2008



如此便可实现年份参数内容根据电网企业和任务id参数动态获取,再通过定义过滤条件使得年份参数对分析表中数据生效即可。

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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