# 动态参数--使用函数 ## 报表样例 通过本示例,可以了解动态参数在报表中的应用。 制作如下图所示的报表: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_a64ee9c171ea9313c81541fded038a3c_r.png) ## 报表特点 - 报表中定义了动态参数,能够利用函数自动计算出当前日期时间作为参数值,报表标题下方的今日日期出即显示出了自动计算出的日期时间值。 - 数据集中定义了普通参数接收动态参数的值,基于传入的日期时间值查询过滤出发货日期小于或等于该值的所有订单,即截止目前所有已发货的订单。 ## 制作方法 ### 第一步 定义带有动态参数的数据集 报表中的数据来自产品中自带的演示数据表“演示_订单表”,采用复杂SQL数据集并使用参数对字段“发货日期”进行了数据过滤,具体操作如下: 1)点击【添加数据集】按钮,在新建数据集页面选择【复杂SQL】。 2)在SQL编辑器中输入SQL语句:select * from demo_orders where 发货日期 <= ?time ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_fab1c2c8c79972003e4fbdb7fc69a85a_r.png) 3)切换至参数tab页,将参数time的参数类型改为“动态参数”,默认值为“now()”,如下图: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_cd64515f3748e27cbc7913280e1448fb_r.png) 4)点击【确定】按钮,将数据集保存为“订单信息”。 ### 第二步 绘制表样 绘制报表结构结构: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_6494b0130c58deb2c0be8694b6be1f5d_r.png) ### 第三步 定义单元格表达式 1)快捷公式选择【列表】,将“订单ID”字段拖拽至A4单元格;选择【取值】 ,分别将“客户”、“发货日期”、“运货费”、“运货商”、“货主地址”分别拖拽至B4、C4、D4、E4、F4单元格。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_833e9c468704e328889c65e2dfe74480_r.png) 拖拽完成后,自动在单元格生成下面的表达式: A4单元格:`=订单信息.Select(订单ID)` B4单元格:`=订单信息.客户ID` C4单元格:`=订单信息.发货日期` D4单元格:`=订单信息.运货费` E4单元格:`=订单信息.运货商ID` F4单元格:`=订单信息.货主地址` 2)在F2单元格输入表达式:`=@time`,用于接收time参数的值。 ### 第四步 保存预览 点击【保存】按钮对报表模板进行保存,在保存页面设置报表的资源名称、保存路径 和文件名称,点击【确定】,此报表模板保存资源名称为【已发货订单表】。 点击【预览】按钮对报表进行查看,点击预览按钮时也会对报表进行保存。 预览界面: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_2e4ab4985d41263c0bf482267a9d1c97_r.png) ## 功能点说明 在设计报表时,有时会需要动态地计算出一些值然后传给报表进行动态地数据过滤控制。这时就常常需要利用到动态参数。 定义动态参数时,设置的默认参数值是作为一个表达式,报表计算时会先将表达式计算然后再将计算结果作为参数值传给报表使用。设计报表时可以根据业务上的需要灵活地设置动态参数的表达式。表达式中可以应用函数。 例如上面的示例报表中,参数“time”被设为了动态参数,并且参数值表达式应用了日期时间计算函数“now()”。当报表计算时,会先执行表达式“now()”的计算得到当前日期时间值作为参数“time”的最终值,并传给数据集完成数据过滤。 # 动态参数--使用普通参数 ## 报表样例 通过本示例,可以了解如何在动态参数的值表达式中应用普通参数。 制作如下图所示的报表: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_e320f79a2a4fb9aef5b4e18cc90b7976_r.png) ## 报表特点 - 报表查询时能够输入一个查询日期,然后基于该日期值自动计算出其所在周的起始日与结束日,报表标题下方可显示出这一周的日期区间。 - 报表根据自动计算出的起始日与结束日,显示出这一周内的所有订单数据。 ## 制作方法 ### 第一步 定义带参数数据集 报表中的数据来自产品中自带的演示数据表“演示_订单表”,采用sql检索数据集并对字段“订购日期”设置了应用参数进行数据过滤的检索条件。 1)点击【添加数据集】按钮,在新建数据集页面选择【SQL检索】,找到数据表“演示_订单表”,点击【选择】。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_eba22452f0f9ae10c14932c4d5634a64_r.png) 2)选择需要的字段,也可全选。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_56f805092c37d7e1042561e6e4a0c534_r.png) 3)切换至【检索条件设置】tab页,点击参数设置后的【增加】按钮,添加两个参数 “beginDate”和“endDate”。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_27c5b70c34ea3b69f20121868492d33d_r.png) 点击检索条件后的【增加】按钮,添加过滤条件 订购日期 在 @beginDate 和 @endDate 之间(包含),点击【确定】按钮回到【选择表与字段】tab页。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_a0d9ffd0604c50a35db031321a14e5b6_r.png) 4)点击【下一步】查看SQL语法。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_63e6f8538da244d9136bd524dcdb1fd1_r.png) 5)点击【确定】按钮,将数据集保存为“订单表”。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_a315e0514f5469cbda7cf9c59077df17_r.png) ### 第二步 设置参数 打开菜单栏的【编辑】--【参数和宏】页面,先新增一个名称为“inputDate”的日期型普通参数,用于接收传入的查询日期,然后将自动添加到参数页面的“beginDate”、“endDate”两个参数的类型修改为“动态参数”,并设置默认值表达式。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_507054b2a3d6c037f35d10923ac5dd33_r.png) >**注意:**参数计算的顺序为从上到下,所以后面的参数可以引用前面参数的值,而前面参数的值不能引用其后面的参数。 ### 第三步 绘制表样 绘制报表基本结构: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_776118045d01314e8caf5812942ddc24_r.png) ### 第四步 定义单元格表达式 1)快捷公式选择【列表】,将“订单ID”字段拖拽至A4单元格;选择【取值】 ,分别将“客户”、“订购日期”、“货主地区”、“货主城市”、“收货人”分别拖拽至B4、C4、D4、E4、F4单元格。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_7737e1bb049c31bcebf6303e03a5b372_r.png) 拖拽完成后,自动在单元格生成下面的表达式: A4单元格:`=订单信息.Select(订单ID)` B4单元格:`=订单信息.客户ID` C4单元格:`=订单信息.订购日期` D4单元格:`=订单信息.货主地区` E4单元格:`=订单信息.货主城市` F4单元格:`=订单信息.收货人` 2)在D2单元格输入表达式:`=@beginDate`,在F2单元格输入表达式:`=@endDate`。 ### 第五步 设置通用查询 打开【通用查询】页面,勾选inputDate参数作为查询条件。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_ed40901d5e3ac560560e9d4eaa4894f6_r.png) 点击查询条件后的【配置】按钮,打开条件配置页面,设置编辑风格为【下拉日历】。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_3d72c59deea88a3cb616ccdfff19236d_r.png) 点击【保存配置】按钮,保存查询条件设置。 ### 第五步 保存预览 点击【保存】按钮对报表模板进行保存,在保存页面设置报表的资源名称、保存路径 和文件名称,点击【确定】,此报表模板保存资源名称为【一周订单查询表】。 点击【预览】按钮对报表进行查看,点击预览按钮时也会对报表进行保存。 在预览界面的查询条件处输入日期,点击查询按钮即可查出这一周的订单,如下图: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_f711ab280da390dfc2b68650e8d57d69_r.png) ## 功能点说明 动态参数的默认参数值是作为一个表达式,报表计算时会先将表达式计算然后再将计算结果作为参数值传给报表使用。表达式中可以应用函数,可以引用其它参数的值。引用参数时使用符号@+参数名的形式,例如:@arg 例如上面的示例报表中,动态参数“beginDate”的默认值表达式为:weekBegin(@inputDate)。weekBegin()是日期计算函数,其作用是可以根据传入的日期计算出该日期所在周的第一天的日期,每周的第一天按周日开始。当报表计算时,首先会用普通参数“inputDate”的值替换掉表达式中对该参数的引用部分,然后再进行表达式的后续计算。例如当在报表中输入查询日期“1997-07-01”然后点击查询后,动态参数“beginDate”的值表达式引用普通参数inputDate的值变为:weekBegin("1997-07-01"),接着再继续执行表达式的函数运算,最终返回日期“1997-06-29”作为参数beginDate的值,供报表进行使用。动态参数“endDate”与上面同理。