宏具有比参数更灵活的功能。目前只有复杂SQL数据集可以设置宏。 使用宏时,在SQL语句的任意位置写上宏的标记“${宏名称}”即设置了一个宏。当在SQL中写好宏后,切换到复杂SQL数据集的宏配置tab页时,系统可以自动获取到sql中的宏,以进行更进一步的详细配置。 目前根据实现的功能不同,将复杂SQL数据集中的宏分为条件宏、普通宏、动态宏,下面详细介绍。 # 条件宏 ## 条件宏的作用 条件宏出现在SQL语句的条件子句的位置。通过配置条件宏对应的数据表和字段,在针对该数据集使用通用查询时,可通过条件宏生成一组查询条件(一个查询模块),并根据用户填写的条件值,生成一个条件子句,替代SQL语句中的条件宏。 在一个SQL语句中,“WHERE”关键字后面的子句为条件子句,where后面可以根据需要设置多个条件宏。 在条件子句固定的情况下,可以使用参数动态的改变条件值;而当条件子句需要动态变化时,则可以通过配置条件宏来动态的变更条件。 例如: SQL语句中的条件宏:select * from demo_orders where ${orders} 定义和替换条件子句后:select * from demo_orders where demo_orders.货主地区=华北 >**注意:** 1.使用当前复杂SQL数据集制作的报表中需要设置通用查询时,必须为复杂SQL数据集定义条件宏。 2.定义条件宏时,勾选数据表的哪些字段,在通用查询中便可以使用哪些字段设置为查询条件。 3.复杂数据集sql语句中使用表别名时,在条件宏设置中表别名要和sql中的表别名一致。 4.复杂数据集sql语句未使用表别名时,在条件宏可以不设置表别名如果要设置的话只能是真实表名不能随便定义表别名。 5.一个条件宏可以定义为多个数据表、多个字段。 6.条件宏不会显示在通用查询面板中,不可作为查询条件使用。 ## 条件宏的设置 由于复杂SQL数据集中的SQL语句变化多样,不遵循特定规则,并不能自动解析出条件宏中可以或不可以使用哪些表和字段作为条件。因此为了在通用查询中可以生成相应的条件,需要进行条件宏的条件配置,具体是设定在通用查询中该条件宏对应可用的数据表和字段。 在“宏配置”Tab页下,将宏类型设置为条件宏,在右侧选择数据库模式之后,找到所需数据表点击【添加】按钮将数据表添加到已选数据表列表。选中已选数据表,设置表别名,勾选需要做查询的字段,条件宏配置完成。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_4fcddb67f665d3dbe8a54f58fd1b05ef_r.png) ## 示例 复杂SQL数据集输入的SQL语句如下,其中定义了条件宏${orders}: >select * from demo_orders where ${orders} 在宏配置tab页下进行设置宏类型为条件宏,并进一步该条件宏中的数据表与字段: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_5808e74b98e3134110328b42af0d4950_r.png) 当使用该复杂SQL数据集制作报表时,如果需要通过通用查询设置查询条件,则通用查询中可以从条件宏设置的表字段中选择字段设置为条件,例如设置:发货地区=华北,通用查询界面中可设置如下: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_e76fa976081c01315a7de8eadee972e4_r.png) 经过上面通用查询的设置后,可产生条件宏orders的值: >demo_orders.货主地区=华北 最终在报表展现时,复杂SQL数据集中的条件宏orders将进行SQL语句中的宏值替换,形成如下SQL: >select * from demo_orders where demo_orders.货主地区=华北 # 普通宏 ## 普通宏作用 普通宏,可以放在sql的任意位置。 例如: - select * from ${city} _ orders 可通过普通宏实现SQL语句中的动态表名 - select ${ziduan} from demo_orders 可通过普通宏实现SQL语句中的动态字段名 - select * from demo_orders where ${orders} 可通过普通宏实现SQL语句中的动态条件 ## 普通宏的设置 在宏配置tab页,系统能自动获取到宏,手动进行宏的类型为普通宏,并进行默认值设置。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_27bf94f720f9ea6beb42c26fda0372ac_r.png) ## 示例 复杂SQL数据集输入的SQL语句如下,其中定义了宏${diqu}: >select * from demo_${table} 切换到宏配置tab页后,系统自动获取到table宏,手动进行宏的类型为普通宏,并进行默认值设置: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_38078ecf45354dd781110b613aeb5060_r.png) 复杂SQL数据集中定义的普通宏可以在通用查询面板中显示。在使用该复杂SQL数据集制作报表时,即可使用通用查询面板将普通宏设置为查询条件。例如设置:table的值为orders,通用查询界面中可设置如下: ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_a73f9a78d4b8bc012fc99a7e4988e6f9_r.png) 经过上面通用查询的设置后,可产生普通宏table的值。 最终在报表展现时,复杂SQL数据集中的普通宏table将进行SQL语句中的宏值替换,形成如下SQL: >select * from demo_orders # 动态宏 ## 动态宏的作用 动态宏和普通/条件宏的主要区别在于普通/条件宏是直接将宏值传到报表中计算,动态宏是把传进来的宏值当成表达式进行计算,然后再把计算得到值做为宏值传到报表中。 ## 动态宏的设置 在宏配置Tab页,将宏类型设置为动态宏,并设置宏表达式,然后点击【确定】按钮,系统自动读取表达式中的参数。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_c3d96147756f9801699dedd2f2fb651a_r.png) ## 示例 复杂SQL数据集输入的SQL语句如下,其中定义了宏${tuser}: >SELECT * FROM t_user where ${tuser} 切换到宏配置tab页后,系统自动获取到tuser宏,手动设置tuser宏为动态宏。 定义tuser宏的表达式为`if(@sys_UserID=="root","1=1","user_id='"+@sys_UserID+"'")` 编辑完成并【确定】,界面下方可自动获取到tuser宏表达式中以@标识的参数名称,用户可设置参数的类型、表达式、数据类型、默认值等。 ![](/uploads/projects/7.11_online/uploads/sjjc/images/m_f9c5b115e5e1997a109722123d558595_r.png) 动态宏使用时参数必须以@符号开头进行标识。