QS函数传参应用

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()第五个扩展参数无法实现独立传两个参数值,因此研发给出解决方案如下:

  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

     

  2. 设置【发生额】计算公式: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)^"""中的单引号是传参需要:若传的字段值是字符型,则需要在两端加上单引号。

附件列表

1

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇审核公式应用-数据质量控制从采集源头抓起

下一篇常见采集任务的属性设置

请先登录