此例,我们将写直接在数据源中执行的SQL语句;在SQL语句中,我们将使用prompt宏函数动态改变过滤条件。
报表需要实现的功能为:列表,按地区和国家显示雇员,运行是会弹出提示对话框,让用户输入国家名称,SQL语句按照输入的国家名称检索数据。
准备工作…
使用'GO Data Warehouse (Query)'数据包,使用
[Sales (query)].[Employee by region].[Branch region],
[Sales (query)].[Employee by region].[Country],
[Sales (query)].[Employee by region].[Employee name]
作为列表的列,创建一张简单的列表。
如何实施…
1. 转到Query Explorer,选中列表对应的查询主题;
2. 点击属性窗体中Generated SQL属性右侧的…;
3. 点击OK;
4. 点击Generated SQL右下角的Convert按钮,编辑SQL语句为:
select distinct
"Branch_region_dimension"."REGION_EN" "Branch_region" ,
"Branch_region_dimension"."COUNTRY_EN" "Country" ,
"EMP_EMPLOYEE_DIM"."EMPLOYEE_NAME" "Employee_name"
from "GOSALESDW"."GO_REGION_DIM" "Branch_region_dimension",
"GOSALESDW"."EMP_EMPLOYEE_DIM" "EMP_EMPLOYEE_DIM",
"GOSALESDW"."GO_BRANCH_DIM" "GO_BRANCH_DIM"
where
("Branch_region_dimension"."COUNTRY_EN" in (#prompt('Country')#))
and "Branch_region_dimension"."COUNTRY_CODE" = "GO_BRANCH_DIM"."COUNTRY_CODE"
and "EMP_EMPLOYEE_DIM"."BRANCH_CODE" = "GO_BRANCH_DIM"."BRANCH_CODE"
其中,红色部分为添加的语句。
5. 如果有必要,编辑查询主题中查询项的表达式,指向SQL。
6. 运行并测试报表。在出现的Country提示框中输入China,可以验证,报表按China过滤了。
工作原理…
本例,我们在本地SQL语句中使用宏函数prompt。本地SQL允许我们直接在数据源中激活查询,返回包含包含查询项的查询主题,并可以在报表中使用。这在一些特定的场景中很有用,省去了开发Framework模型的过程。我们可以检查一下本例中使用的SQL语句,可以发现内容非常简单,就是从三张表的连接中检索出我们需要的三列。在where字句中,我们添加了一个过滤条件:
("Branch_region_dimension"."COUNTRY_EN" in (#prompt('Country')#))
在过滤条件所用的prompt()宏函数,就如同其名字揭示的,用来生成一个提示,并将获取的参数值返回到SQL语句中执行。
prompt()宏函数可以有6个参数:
prompt ( prompt_name , datatype , defaultText , text , queryItem , trailing_text )
提示用户输入单个值。只有“提示名称”为必填。如果未指定数据类型,则默认为字符串型。如果指定“默认文本”,则提示是可选的。指定“文本”后,文本会在值前面。可以指定“查询项目”以利用“查询项目”的提示信息属性。指定“尾随文本”后,尾随文本会附加到值后面。
本例,我们只是用了一个参数prompt_name。
和prompt()类似的还有promptmany()。使用方法类似,只是prompt()只能输入一个值而promptmany()可以逗号分隔的方式输入多个值。