Report Studio之使用宏函数四、使prompt()提示可选

浏览: 2771

前一篇博文,我们研究了如何使用宏函数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" = ')#

Clipboard Image.png

3. 转到page explorer->page1,创建两个基于以上两个查询的列表。

Clipboard Image.png

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’

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

0 个评论

要回复文章请先登录注册