为了使我们的查询达到最好的性能,我们通常在数值键的列上执行过滤。然而,提示中显示的值应该使用用户友好型的字符值。
在此例中,我们将创建一个filter。此filter在prompt中显示为product line(数值型),但事实上使用数值型的code过滤数据。
准备工作…
使用Product | Product name 和 Sales fact | Quantity作为列表的列创建一张简单的列表。
如何实施…
1. 打开Page Explorer并点击Prompt Pages文件夹。从Insertable Objects中拖拽一个Prompt Page到工作区。
2. 双击新建立的prompt page。
3. 从Insertable Objects中,拖拽一个Value Prompt到prompt page中。这会打开一个prompt wizard。
4. 设置prompt name为ProductLine,点击Next。
5. 保持Create a parameterized filter选项为勾选。选择Sales (query) | Product | Product line code为package item。点击Next。
6. 保持Create new query选项为勾选。输入query name为promptProductLine。
7. 选择Sales (query) | Product | Product line为Value to display。
8. 点击Finish按钮。运行并测试报表。
工作原理…
当你从insertable objects拖拽一个prompt object到工作区时,Report Studio弹出一个prompt wizard。
在第1步中,我们选择了用来连接提示的参数。这个参数可以是已经存在的参数(定义在查询过滤或者framework模型中),也可以是新建的参数。在此例中,我们新建了一个参数。
接着,向导询问是否需要创建一个过滤。如果已经存在定义了的过滤,可以 步勾选此选项。在此例中,我们选择勾选此选项并使用Product line code创建了一个过滤。请注意在此处我们选择了数值类型的查询项。在数值型的列上创建过滤式数据仓库实践中标准的做法,这提升了查询的性能,并且可以使用索引。
在下一步中,Report Studio询问我们希望在何处创建对应提示的新查询。新建的查询将在数据库中执行用以检索提示值。此处有一个选项让我们可以为此提示选择显示值。
在此例中,我们选择Product line作为显示值。Product line是对用户很友好的文本型或是描述型的列,并和Product line code一一对应。例如,Camping Equipment对应的Product line code为2101。
因此,当我们运行报表时,可以发现提示显示的值为Product line名称,这对终端用户来说是合理的。然而如果检查事实上在数据库中执行的查询,会发现过滤式执行在数值键列上的,此例中,为Product line code。
更多…
我们可以在Report Studio中检查生成的SQL。从工具栏中选择Tools | Show Generated SQL/MDX选项。或者在Query Explorer中,选中需要查看的查询,在其属性栏中查看生成的SQL。
此操作会提示输入一个product line code的值(这也是一个过滤会执行在code列上的证据)。
输入任何数值型的值,确定后,报表的SQL语句就生成了。检查此查询,会发现product line code已经按照输入的值过滤了。
现在我们应该明白“Prompt display value”和“Use value”选项是如何工作的了。
如果需要俘获用户选择的提示值(conditional styling或者drill-through经常用到),可以使用如下两个函数:
ParamDisplayValue (参数名):此函数将返回提示使用的文本型的显示值。此例中,为用户选择的product line名称。
ParamValue(参数名):此函数将返回提示使用的数值型使用值。此例中,为用户选择的product line名称所对应的code。