1. 需求说明
如上图所示,这张基本表中【开始日期】【结束日期】【发生额】三个表元,其中:
【开始日期】:设置为日期表元,表元值为填报用户点选填写;
【结束日期】:计算表元,取当前报表期日期;
【发生额】:取开始日期和结束日期之间的发生额指标值;
客户定义了jdbc取数如下:
Select "收入" yszb,sum(a.creditamount) creditamount,b.bigsmc1
from fact_it_ye_date a,dim_businessgroup b
where rtrim(a.pk_corp)=rtrim(b.pk_corp) and a.pk_period=’<option>’ and b.bigsbm1=<id>
group by b.bigsbm1,b.bigsmc1
现在希望实现 在报表户填报的时候把开始日期以及结束日期不经过手动保存、上报操作,实时的传参到后台进行where过滤,然后前台用qs()函数取数。
2. 问题分析
当报表户填报的数据没有进行保存和上报操作的时候,数据还在内存中,没有到数据库中,此时jdbc取数从数据库中取数,是不能取到开始日期和结束日期的值的。因此做如下思考:
1、Qs()函数中第五个参数可以手动传参,因此尝试同时传两个参数值过去
2、若传参方式无法解决,请研发写脚本进行内存取数
3. 解决方案
Qs()第五个扩展参数无法实现独立传两个参数值,因此研发给出解决方案如下:
调整jdbc数据源如下:
Select "收入" yszb,sum(a.creditamount) creditamount,b.bigsmc1
from fact_it_ye_date a,dim_businessgroup b,
where rtrim(a.pk_corp)=rtrim(b.pk_corp) and a.pk_period <option> and b.bigsbm1=<id> group by b.bigsbm1,b.bigsmc1
设置【发生额】计算公式:QS("SR-ZFS","","","creditamount","between ""^asstr(C1)^"" and ""^bbq(0)^""")
参数1:传递取数名"SR-ZFS";
参数2:传报表期,此处传空值,为当前期;
参数3:传报表户,此处传控制,为当前报表户;
参数4:传递字段值,"creditamount"即sql数据源中的creditamount字段;
参数5:传递自定义参数值,用<option>标签来接收此参数值,运行时,SQL语句中的<option>字串会自动替换为QS函数传过来的值。在这个方案相当于在qs()函数的第五个参数中拼一段sql作为参数传给jdbc取数sql做where过滤。其中"between ""^asstr(C1)^"" and ""^bbq(0)^"""中的单引号是传参需要:若传的字段值是字符型,则需要在两端加上单引号。
请先登录