此例,我们将一起研究一下prompt()宏函数的一个比较特别的属性:token。
准备工作…
和前面的博文中的示例一样,此例,我们将创建一张基于native SQL的简单列表。
SQL语句如下:
select distinct
"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" "Product_line" ,
"SLS_PRODUCT_LOOKUP"."PRODUCT_NAME" "Product_name" ,
"SLS_PRODUCT_COLOR_LOOKUP"."PRODUCT_COLOR_EN" "Product_color" ,
"SLS_PRODUCT_SIZE_LOOKUP"."PRODUCT_SIZE_EN" "Product_size"
from "GOSALESDW"."SLS_PRODUCT_DIM" "SLS_PRODUCT_DIM",
"GOSALESDW"."SLS_PRODUCT_LINE_LOOKUP" "SLS_PRODUCT_LINE_LOOKUP",
"GOSALESDW"."SLS_PRODUCT_TYPE_LOOKUP" "SLS_PRODUCT_TYPE_LOOKUP",
"GOSALESDW"."SLS_PRODUCT_LOOKUP" "SLS_PRODUCT_LOOKUP",
"GOSALESDW"."SLS_PRODUCT_COLOR_LOOKUP" "SLS_PRODUCT_COLOR_LOOKUP",
"GOSALESDW"."SLS_PRODUCT_SIZE_LOOKUP" "SLS_PRODUCT_SIZE_LOOKUP",
"GOSALESDW"."SLS_PRODUCT_BRAND_LOOKUP" "SLS_PRODUCT_BRAND_LOOKUP"
where "SLS_PRODUCT_LOOKUP"."PRODUCT_LANGUAGE" = N'EN'
and "SLS_PRODUCT_DIM"."PRODUCT_LINE_CODE" = "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_CODE"
and "SLS_PRODUCT_DIM"."PRODUCT_NUMBER" = "SLS_PRODUCT_LOOKUP"."PRODUCT_NUMBER"
and "SLS_PRODUCT_DIM"."PRODUCT_SIZE_CODE" = "SLS_PRODUCT_SIZE_LOOKUP"."PRODUCT_SIZE_CODE"
and "SLS_PRODUCT_DIM"."PRODUCT_TYPE_CODE" = "SLS_PRODUCT_TYPE_LOOKUP"."PRODUCT_TYPE_CODE"
and "SLS_PRODUCT_DIM"."PRODUCT_COLOR_CODE" = "SLS_PRODUCT_COLOR_LOOKUP"."PRODUCT_COLOR_CODE"
and "SLS_PRODUCT_BRAND_LOOKUP"."PRODUCT_BRAND_CODE" = "SLS_PRODUCT_DIM"."PRODUCT_BRAND_CODE"
and #prompt ('Field','token','"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN"')# = #prompt ('Value','string')#
如何实施…
1. 我们已经创建了一张基于上述查询的简单列表。
2. 拖拽一个3列1行的表格到报表顶部。
3. 拖拽一个Value Prompt对象到表格的第一个单元格。在弹出的向导框中,选择“Use existing parameter”->Field。点击完成。编辑其静态选项如下:
Display Use
Filter on product line "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN"
Filter on product name "SLS_PRODUCT_LOOKUP"."PRODUCT_NAME"
设置其“Select UI”属性为:Radio button group
设置其“Default selections”属性为:"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN"
4. 拖拽一个Text Box Prompt对象到表格的第二个单元格。在弹出的向导框中,选择“Use existing parameter”->Value。点击完成。
设置其“Default selections”属性为:Golf Equipment。
5. 拖拽一个Prompt Button对象到第三个单元格,设置其Type属性为:Finish。
6. 运行并测试报表。可以验证,当选择不同过滤方式时,报表在不同的列上进行了过滤。
工作原理…
宏函数prompt()的第二个参数data type决定了返回值得格式。对于“string”类型来说,值被嵌套在一对单引号中返回。但是,对于数据类型“token”,数据会原样返回,不做任何处理。
此例,我们使用了这个参数动态的改变过滤执行的域。首先我们定义了一个单选按钮组,设置其参数为Field,并为此单选按钮组定义了一组静态选项。然后我们定义了一个Text Box Prompt,设置其参数为Value,默认选项为:Golf Equipment。
运行报表,默认情况下,宏函数解析出来的内容为:
"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" = ‘Golf Equipment’