1. 需求说明
场景概述:客户的分析表表格数据来源于数据库表B,页面上需要有三个参数,其中有两个参数内容希望可以直接获取另外一张数据库表A中的两个字段的内容,同时,这三个参数需要有联动效果,具体如下:
1)数据存储情况说明:
电力公司,任务id,以及该任务对应的数据期,存储在数据库表A中,具体如下图。
2)分析表样说明
分析表中设置的3个参数分别是【电网企业】、【任务号】和【年份】,其中【电网企业】参数直接使用的维表内容,但【任务号】和【年份】参数需要分别获取数据库表A中对应的2个字段的数据,【任务号】参数的下拉内容要根据【电网企业】参数决定,【年份】参数的下拉内容要根据前两个参数决定,即3个参数间需要联动的效果。
2. 问题分析
实现【电网企业】,【任务号】,【年份】三个参数联动。过程中主要解决两个问题:
1)由于【任务号】【年份】参数内容来源于数据表A,所以需要通过SQL先将可选的【任务号】、【年份】查询出来。
2)客户在表A中的数据期的存储方式比较特殊,最终应用于参数中时要以下拉列表的形式展示,故要将表A中存储的数据期解析成数组,通过枚举下拉形式显示在下拉列表中,同样,任务id也需要解析为数组。
3. 解决方案
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参数动态获取,再通过定义过滤条件使得年份参数对分析表中数据生效即可。
请先登录