2.4 剖析Query Macro的函数和应用

浏览: 2727

一、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到表达式编辑区域内,如下图

Clipboard Image.png

  3、在左边可用的组件箱内,点击 表达式所需的parameter maps、session parameters或宏函数到Macro编辑区域。

Clipboard Image.png

 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的函数和应用(续)

推荐 0
本文由 贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册