一、Macro介绍
宏作为代码片段可以插入在定义查询语句的任何地方,如字段、过滤器甚至是表名称,亦可引用session参数、参数MAP,参数值在运行查询之前输入或取当前session值。宏可以用于以下不同方式:
1、插入SQL语句,Select * from Country where Country.Name = #$myMap{$runLocale}#
2、为基于存储过程的查询主题提供自变量,请参考博客 2.3.6.3 基于存储过程的查询主题
3、能插入表达式:计算项或过滤器,如 #'Product_Type_'+ $runLocal#
4、动态指定查询主题的数据源,同一个查询主题实现不同数据源连接提供给不同用户使用。如,#$data_source#.#$schema#.Products,这个作为练习留给读者实践。
5、参数能够引用其他参数,如参数MAP函数 MySessionParameter= #$myMap{$UserGroup}#,关于MAP,请参考博客2.3.9.2 Parameter Map。
在编辑表达式时,可用以下常用的函数改善macro效果,macro函数可在表达式左边看到,
1、#sq($my_sp)# 返回 'ab"cc'
2、#dq('Column' + $runLocale)# 如果 runLocale=en-us 返回 "Column en-us"
3、#sb('my item in ' + $runLocale)# 如果 runLocale=en-us 返回 [my item in en-us]
4、'+' 加号连接两个字符串如 'abc' + 'xyz',返回 'abcxyz'
二、Create a Macro
2.1、创建宏的规则
● ‘#’符号必须作为宏参数引用表达式的开头和结尾,在FM中运行时凡是#之内内容被当做是宏表达式
● ‘$’必须作为引用Session或Parameter Map的开头,如$myMap($userId),#$account.defaultName#
● 宏的名称必须是alpha字符(a..z, A..Z)
不建议将宏插入已存在的引号或方括号之间,如 [#$account.defaultName#],因为FM不会为这些元素有任何执行动作。
创建宏的操作步骤如下
1、选择一个基于数据源的查询主题,右键->Edit Edfinition(编辑定义)
2、切换至SQL标签页,点击Insert Macro到表达式编辑区域内,如下图
3、在左边可用的组件箱内,点击 表达式所需的parameter maps、session parameters或宏函数到Macro编辑区域。
4、复查宏定义表达式是否正确,关于规则请参考上面创建宏的规则定义,否则将会提示错误信息显示。
5、点击OK
2.2、无提示的变量引用方法
在无须用户提示输入变量值的情况下就可以达到动态改变查询主题的SQL语句的效果,该方法一般用于引用Session Parameter(会话参数)。如当前登录Cognos的用户名:account.defaultName;当前用户所在区域: runLocal; 当前日期和事件:current_timestamp
字段名引用的使用方法如:
select #"product_type_" + $runLocal# as product_type,#$account.defaultName# as username from gosales.product_type
过滤器引用的使用方法如:
where ship_date<=to_char(#$current_timestamp#,'yyyy-mm-dd') //to_char是oracle库函数,具体详见博客2.3.9.1 Session Paramters。
未完,请继续阅读 2.4 剖析Query Macro的函数和应用(续)