反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

参数为空查询全部

  • 文档创建者:RosieY
  • 历史版本:2
  • 最近更新:RosieY 于 2022-02-28
  • 1. 概述

    1.1 预期效果

    使用参数进行报表数据查询时,希望当参数值为空时,点击查询后,显示报表中的全部数据。即在没有筛选条件的时候,显示报表所有内容,相当于不选值就不过滤。

    如下图所示:

    1.2 解决思路

    参数过滤查询,一般都是通过模板参数或者数据集参数实现,所以要想实现此场景,就需要修改过滤条件和数据集定义方式。修改的原则:

    • 数据集参数:当参数值为空时,查询报表所有内容

    • 模板参数:当参数值为空时,不进行过滤

    2. 实现方法

    2.1 数据集参数

    正常定义 数据集参数 时,参数有值,则将值拼接到 SQL 中执行查询,参数无值,则 SQL 查询语句查询条件为一个空字符,查不出值。如下:

    SELECT * FROM 销量 where 地区 = '${area}'

    area 参数有值时,如华东,则查询语句为 SELECT * FROM 订单 where 货主地区='华东',查询出华东地区的数据。area 参数无值时,则查询语句为 SELECT * FROM 订单 where 货主地区='',查询无数据。

    现在要实现参数无值时查询全部,则在查询前,需要先判断参数是否有值,有值则执行带有查询条件的查询;无值则查询数据。

    即有值时:SELECT * FROM 销量 where 地区 = '${area}'

    无值时:SELECT * FROM 销量

    这时就要考虑判断条件如何实现了,因为定义数据集参数时,支持使用 FineReport 所有内置函数,所以就可以通过 IF 函数来构造判断;参数为空如何判断呢,参数为空即参数值长度为 0,所以就可以使用 Len 函数来判断参数是否为空。

    组合起来,定义数据集参数的 SQL 语句如下:

    SELECT * FROM 销量  ${if(len(area) == 0,"","where 地区 = '" + area + "'")} 

    这样,当参数有值和无值时,将分别执行不同的 SQL 语句。当参数值为空时执行 SELECT * FROM 销量 ,不加任何条件即查询所有数据。

    2.2 模板参数

    模板参数实现查询时,是通过报表的过滤功能实现。如下图所示

    给单元格添加过滤条件,过滤条件为地区值=area值,这时若 area 参数为空,则过滤条件为地区='',所以过滤后就没有对应地区的数据。

    现在要实现参数无值时查询全部,则在查询前,需要先判断参数是否有值,有值则执行过滤;无值则不过滤。可以通过 IF 函数来构造判断;参数为空可以使用 Len 函数来判断,参数长度为 0 时参数即为空,FineReport 过滤条件中,nofilter 表示不过滤,如此结合则得到过滤条件:

    if(len($area)==0,nofilter,$area) 

    这样,当参数有值和无值时,就分别执行不同过滤机制。当参数值为空时不过滤,即查询出所有数据。

    3. 示例

    3.1 数据集参数

    定义好数据集参数后,在参数面板添加一个「下拉框控件」,给控件绑定好数据字典,查询时控件不选择值,即参数值为空查询时查询出所有报表数据。如下图所示:

    详细实现步骤可见:下拉框参数为空选择全部

    1567596912453576.gif

    3.2 模板参数

    定义好模板参数、设置好过滤条件后,在参数面板添加一个「下拉框控件」,给控件绑定好数据字典,查询时控件不选择值,即参数值为空查询时查询出所有报表数据。效果如 3.1 节所示。

    详细实现步骤可见:下拉框参数为空选择全部

    附件列表


    主题: 参数应用
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526