# 基本概念 在数据集中可以使用参数和宏。 参数和宏,是指被标记出来,从而可以通过传递不同的值动态替换的部分。例如下面的SQL语句中: >SELECT a,b FROM T WHERE x=10 AND y=?XXX 其中的?XXX就标识为使用了一个参数XXX,可以通过传递不同的参数值来对数据进行不同的查询过滤。比如当向参数XXX传入值100时,最终实际执行的SQL语句即为: >SELECT a,b FROM T WHERE x=10 AND y=100 宏是一个字符串,可以包含更复杂的内容。 例如:同一张订单表,有时需要从雇员的角度去看(看某雇员的全部订单),有时则需要从时间角度去看(查看某一年的全部订单)。这时就需要动态的变更查询条件。 >select * from demo_orders where ${demo_orders} 其中的${demo_orders}就标识为使用了一个宏。 当需要从雇员A的角度去看该雇员的全部订单时,使用demo_orders.雇员ID=A来替换${demo_orders}; 当需要从时间角度去查看2009年的全部订单时,使用demo_orders.date>=1998-01-01 and demo_orders.date>=1998-12-30 来替换${demo_orders}。 ## 参数和宏的区别 - 参数是一个值,并且具有数据类型;宏是一个字符串。 - 对于SQL数据集,参数只能用于SQL的where子句中的条件值,而宏可以用于SQL的任何位置。 ## 参数的作用 参数的作用是能够进行值的接收和传递,例如为向SQL语句中传入条件值,或向存储过程传入参数值。 ## 参数的内容 定义参数时,应定义参数的名称、参数描述、数据类型、参数类型、默认值等内容。特别地,复杂SQL数据集中,还需要设置参数表达式。 ### 参数名 参数的名称是唯一区别各个参数的依据。 参数的名称可以随意定义没有限制;其中会话变量参数的名称必须与系统的session会话中的名称保持一致,否则无法获取当前用户的信息。 另外也可以在“描述”列设置参数别名,来对报表中用到的参数名称进行统一显示设置。 ### 参数描述 描述的作用是对参数名的意义或作用进行一些补充说明,没有实际意义。但是当参数显示在通用查询面板中时,描述列将作为参数别名列显示,在查询面板中会作为查询条件的名称显示。 例如:数据集中设置参数area的描述为“地区”: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_b7d29e69bec4f03f2c36f9ff1b7ae111_r.png) 通用查询面板中,字段列显示参数的名称,别名列显示参数的描述内容: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_94a17a1c0e3d2c5f7740dc73cd6e1c15_r.png) ### 数据类型 参数可以设置所接收参数值的数据类型。需要注意的是:系统会根据所设置的数据类型,对输入的内容进行强制转换。 例如:sql类型数据集中如果设置了一个参数area,其数据类型为字符串,当预览该数据集时,拼入sql的参数值会加上单引号以保证在sql的正确查询。 ### 参数类型 参数共有三种类型: (1)普通参数:参数值由参数表达式计算得到,默认为参数本身,即@参数名。 (2)动态参数:参数值通过参数表达式运算而来。与普通参数的区别为动态参数无法在通用查询中使用。 (3)会话变量:参数值会从会话(session)中获取对应名称的会话变量,在本产品中,可以获取用户ID、角色ID、机构ID的会话变量参数名分别为:sys_UserID、sys_Roles_ForDAUC、sys_Orgs_ForDAUC ### 参数默认值 对于普通参数,这个值将作为默认值,若外部未传入该参数,则以默认值进行后面的动作。未设置时认为是空值,默认值将传入null。 对于动态参数,这里应该设置动态参数的表达式。未设置时认为是空表达式,其运算结果将为null。设置了表达式则将进行计算得到的结果传入。 对于会话变量,默认值会自动填写。 特别地,复杂SQL数据集中的默认值只为数据集中预览数据使用;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。 ### 参数表达式 仅复杂SQL数据集中需要设置,默认为参数本身,即@参数名。复杂SQL数据集中,传入SQL的参数值为参数表达式计算后的值。 需要注意,若使用复杂SQL数据集中的普通参数设置通用查询,最终传入SQL的参数值为参数表达式计算得到的值,可能会和报表接收到的参数值不一致。若参数表达式为默认的@参数名,那么报表接收的参数值与传入SQL的参数值才是一致的。 # SQL检索数据集中设置参数 在SQL检索数据集中,【检索条件设置】tab页中可以进行参数设置,如下图所示: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_59fa693e45f5e72609b9efa2ee13a009_r.png) 设置好数据集参数后,使用该参数对数据集字段进行数据过滤。即在检索条件中的【条件值或参数】处选择使用参数来向检索条件传递条件值,设置后将以【@参数名】的形式显示在条件值输入框中,如下图: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_65ad86b3d20fc4f4f6b65a3bb5841646_r.png) # 复杂SQL数据集设置参数 在复杂SQL数据集中,参数以“?XXX”的形式在SQL语句中进行书写来添加。在SQL编辑器中输入SQL之后,切换至参数tab页,会自动获取SQL中设置的参数,然后进行参数的具体属性设置。 设置参数属性时,需注意此处默认值只为数据集中预览数据使用,预览时直接将默认值拼接在SQL中,不去计算参数表达式中的值;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。 ## 普通带参数的复杂数据集 1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区=?area ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_506955e0a71dbddf23f8f968b4d3e089_r.png) 2.切换到参数tab页,系统自动获取到参数area。 数据类型、参数类型、参数表达式默认设置即可,即数据类型“字符串”、参数类型“普通参数”、参数表达式为“@area”;设置默认值为“华北”,供数据预览使用。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_6c2b07daf29091993d1ab94e523474ce_r.png) 3.预览数据 ## 模糊查询复杂数据集 1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区 like ?area 2.切换到参数tab页,设置参数类型为普通参数,默认值设置为%东%,参数表达式按照模糊查询的规则写即可,具体如图所示: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_bbeeaf461169f78e1892bb92540d52aa_r.png) 此处默认值只为数据集中预览数据使用,预览时直接将默认值拼接在SQL中,不去计算参数表达式中的值,如此例中,数据预览时后台SQL为“select * from demo_orders where 货主地区 like %东%”;实际计算报表时,传入sql的参数是用参数表达式中计算得到的值。 3.预览数据。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_eb94465974fc2b33b7a799cf613b7858_r.png) ## 多条件值全部查询复杂数据集 1.在"复杂sql"tab页中输入sql语句: select * from demo_orders where 货主地区 in (?area1) or ?area2 is null 2.切换到参数tab页,area1设置数据类型为字符串组,area2设置参数表达式为str(@area1),具体如图所示: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_3133b2916bf367638cd9758998e49005_r.png) 3.预览数据 输入默认值,预览数据。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_99ba2941d0888b1b4cffb4699a8c72c0_r.png) ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_c680bdc79b5c7aab8d2d3b4dfd87607d_r.png) # 其他类型数据集中设置参数 对于存储过程、自定义等其它类型的数据集,可以直接在数据集定义界面中通过增加按钮来添加数据集参数。例如下图所示的自定义类型数据集: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_bb86df204236872c5e3de4a3e699ad7b_r.png)