前一篇博文,我们研究了如何使用宏函数prompt()生成一个提示;本文,我们将研究如何使用此函数的参数使提示可选。
此例,我们将创建两个基于本地SQL的简单列表。这两个列表完全相同:按选定的产品线显示产品的详细信息;不过,我们将使用两种不同的方法使这两个列表的提示可选。
准备工作…
创建一张空白报表。
如何实施…
1. 创建一个名为Optional_defaultValue的SQL对象,语法为Native,数据源为great_outdoors_sales,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 "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" = #sq(prompt ('Product Line','string','Golf Equipment'))#
2. 按照上面的方法创建一个名为Pure_optional的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"
#prompt ('Product Line','string','and 1=1', ' and "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" = ')#
3. 转到page explorer->page1,创建两个基于以上两个查询的列表。
4. 运行并测试报表;提示框中不输入任何值。可以验证,第一个列表的提示为可选,并且默认值为Golf Equipment;第二个列表的提示为可选,没有默认值。
工作原理…
从本质上来说,本例中的报表的运行方式与上一篇博文中的报表完全一致,都是把SQL语句发送到数据源端生成查询主题,并且都在where字句中使用了prompt()宏函数作为过滤条件。
Optional_defaultValue
在这个查询中,我们使用了prompt()宏函数的前三个参数。
"SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" = #sq(prompt ('Product Line','string','Golf Equipment'))#
第一个参数为提示名,第二个参数定义了数据类型,本例为’string’,第三个参数定义了提示的默认值'Golf Equipment'。当用户没有在提示中输入任何值时,提示的默认值就被激活了。这也是此提示为可选的关键因素。因为已经有了默认值。
Pure_Optional
在这个查询中,我们使用了prompt()宏函数的前四个参数。
#prompt ('Product Line','string','and 1=1', ' and "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" = ')#
同样的,第一个参数定义了提示名,第二个参数定义了数据类型,第三个参数定义了提示的默认值,第四个参数定义了过滤的左侧内容。第一和第二个参数不用再多解释了。关于这里的第三个参数'and 1=1',当提示没有输入任何值时,默认值被激活,也就是宏函数被and 1=1替换。这是个恒等式,相当于没有过滤。而第四个参数被自动忽略。如果提示中输入了值,比如Golf Equipment,则第三个参数,也就是默认值被忽略,第四个参数生效。此时,宏函数被替换为:
and "SLS_PRODUCT_LINE_LOOKUP"."PRODUCT_LINE_EN" =’ Golf Equipment’