BI2.docx
《BI2.docx》由会员分享,可在线阅读,更多相关《BI2.docx(24页珍藏版)》请在冰豆网上搜索。
![BI2.docx](https://file1.bdocx.com/fileroot1/2022-11/28/3fa39d1d-ac58-481d-a666-ab53a42ac018/3fa39d1d-ac58-481d-a666-ab53a42ac0181.gif)
BI2
第1课:
添加按日期筛选报表的参数
第1课:
添加按日期筛选报表的参数
通过在报表查询中包含开始日期参数和结束日期参数,可以指定用来限定从数据源检索的数据所处的日期范围。
您可以创建其他参数,以便对从数据源检索到的数据进行筛选。
在本课中,您将向查询添加 @StartDate 和 @EndDate 参数,以便限定从数据源检索的数据。
StartDate 和 EndDate 两个报表参数是自动创建的,并显示在“报表数据”窗格中。
参数区分大小写。
查询参数以 @ 符号作为开头,而报表参数则不然。
您将这些参数的数据类型设置为 DateTime,并将看到报表查看器工具栏中会显示一个带有参数文本框的日历控件。
您还将设置这些参数的默认值,以使报表可以自动运行。
最后,您将创建未绑定到查询参数的报表参数 DayofWeek,并使用该报表参数对从数据源检索到的数据进行筛选。
本教程要求您已完成教程:
创建基本表报表。
打开现有报表服务器项目
1.单击“开始”,依次指向“所有程序”和 MicrosoftSQLServer2008R2,单击 BusinessIntelligenceDevelopmentStudio。
2.在“文件”菜单上,指向“打开”,再单击“项目/解决方案”。
3.导航到 Tutorial.sln。
本教程是在教程:
创建基本表报表 中创建的。
4.单击“确定”打开项目。
“教程”项目即在解决方案资源管理器中显示,并带有一个名为 SalesOrders.rdl 的报表。
注意 如果解决方案资源管理器不可见,请单击“视图”菜单中的“解决方案资源管理器”。
将嵌入数据源转换为共享数据源
1.在“报表数据”窗格中,右键单击数据源AdventureWorks并选择“转换为共享数据源”。
名为AdventureWorks.rds的数据源即被添加到“解决方案资源管理器”中。
2.在“报表数据”窗格中,右键单击AdventureWorks数据源,并选择“数据源属性”。
3.在“名称”中,键入 AdventureWorks_Ref。
4.单击“确定”。
替换现有数据集
1.在“报表数据”窗格中,右键单击数据集AdventureWorksDataset,然后单击“数据集属性”。
注意:
如果未显示“报表数据”窗格,请单击“视图”菜单上的“报表数据”。
2.在“数据源”中,确保已选中AdventureWorks_Ref。
3.在“查询类型”中,确保已选中“文本”。
4.单击“查询设计器”按钮打开查询设计器。
5.用下列查询替换文本框中的文本。
6.SELECT
7.soh.OrderDateAS[Date],
8.soh.SalesOrderNumberAS[Order],
9.pps.NameASSubcat,pp.NameasProduct,
10.SUM(sd.OrderQty)ASQty,
11.SUM(sd.LineTotal)ASLineTotal
12.FROMSales.SalesPersonsp
13.INNERJOINSales.SalesOrderHeaderASsoh
14.ONsp.BusinessEntityID=soh.SalesPersonID
15.INNERJOINSales.SalesOrderDetailASsd
16.ONsd.SalesOrderID=soh.SalesOrderID
17.INNERJOINProduction.ProductASpp
18.ONsd.ProductID=pp.ProductID
19.INNERJOINProduction.ProductSubcategoryASpps
20.ONpp.ProductSubcategoryID=pps.ProductSubcategoryID
21.INNERJOINProduction.ProductCategoryASppc
22.ONppc.ProductCategoryID=pps.ProductCategoryID
23.GROUPBYppc.Name,soh.OrderDate,soh.SalesOrderNumber,
24.pps.Name,pp.Name,soh.SalesPersonID
25.HAVING(ppc.Name='Clothing'
AND(soh.OrderDateBETWEEN(@StartDate)AND(@EndDate)))
除添加了带有两个限制参数的条件之外,该查询与以前的查询相同:
AND(soh.OrderDateBETWEEN(@StartDate)AND(@EndDate))
26.在工具栏上单击“运行”(!
)。
此时将打开“定义查询参数”对话框,提示您输入参数值。
27.提供以下两个值以查看筛选的结果集:
1.在“参数值”列中,为 @StartDate, 输入值,例如 1/31/2001。
2.在“参数值”列中,为 @EndDate 输入值,例如 1/31/2003。
28.单击“确定”。
29.结果集显示2001至2002年期间筛选后的订单数据集。
30.单击两次“确定”。
“报表数据”窗格即用数据集字段进行填充。
另请注意将自动创建 StartDate 和 EndDate 两个报表参数,并显示在“参数”节点下面。
在定义报表的查询参数之后,必须更改报表参数的数据类型,使其与源数据的数据类型匹配。
默认数据类型为文本,在大多数数据源中,它映射为字符串数据类型。
如果源数据是数字、布尔值或日期/时间,则必须更改报表参数数据类型。
更改报表参数的数据类型和默认值
1.在“报表数据”窗格中,展开“参数”,并双击 StartDate。
此时将打开“报表参数属性”对话框。
2.确保参数名称为 StartDate,并且提示为“开始日期”。
3.在“数据类型”中,选择“日期/时间”。
4.单击“确定”。
5.在“报表数据”窗格中,双击 EndDate。
验证名称和提示值。
6.在“数据类型”中,选择“日期/时间”。
7.单击“确定”。
8.单击“预览”。
StartDate 和 EndDate 参数将分别随附一个日历控件显示在报表工具栏中。
参数的数据类型是 Date/Time 并且未定义可用值列表时,将自动显示日历控件。
如果定义了可用值列表,则改为显示一个值下拉列表。
9.提供以下两个参数值以运行报表:
1.在 StartDate 参数文本框中,输入日期 1/31/2001。
2.在 EndDate 参数文本框中,输入日期 1/31/2003。
10.单击“查看报表”。
报表将仅显示位于报表参数值范围中的数据。
为报表创建报表参数后,可以为这些参数添加默认值。
默认参数可以使报表自动运行;否则,用户必须输入参数值,报表才能运行。
为参数设置默认值
1.在“设计”视图的“报表数据”窗格中,展开“参数”,并双击 StartDate。
此时将打开“报表参数属性”对话框。
2.单击“默认值”。
3.选择“指定值”选项。
此时将显示“添加”按钮和空的“值”网格。
4.单击“添加”。
空行即被添加到网格中。
5.单击“值”文本框,并删除默认文本 (Null)。
6.键入 1/31/2001。
单击“确定”。
7.在“报表设计”窗格中,双击 EndDate。
8.单击“默认值”。
9.选择“指定值”选项。
10.单击“添加”。
11.键入 1/31/2003。
单击“确定”。
12.单击“预览”。
由于为所有参数定义了默认值,因此报表会立即运行。
将新字段添加至查询以用于筛选
1.切换到“设计”视图。
2.右键单击数据集AdventureWorksDataset,并选择“数据集属性”。
打开查询设计器,并用以下新查询替换查询:
3.SELECT
4.soh.OrderDateAS[Date],DATENAME(weekday,soh.OrderDate)asWeekday,
5.soh.SalesOrderNumberAS[Order],
6.pps.NameASSubcat,pp.NameasProduct,
7.SUM(sd.OrderQty)ASQty,
8.SUM(sd.LineTotal)ASLineTotal
9.FROMSales.SalesPersonsp
10.INNERJOINSales.SalesOrderHeaderASsoh
11.ONsp.BusinessEntityID=soh.SalesPersonID
12.INNERJOINSales.SalesOrderDetailASsd
13.ONsd.SalesOrderID=soh.SalesOrderID
14.INNERJOINProduction.ProductASpp
15.ONsd.ProductID=pp.ProductID
16.INNERJOINProduction.ProductSubcategoryASpps
17.ONpp.ProductSubcategoryID=pps.ProductSubcategoryID
18.INNERJOINProduction.ProductCategoryASppc
19.ONppc.ProductCategoryID=pps.ProductCategoryID
20.GROUPBYppc.Name,soh.OrderDate,soh.SalesOrderNumber,
21.pps.Name,pp.Name,soh.SalesPersonID
HAVING(ppc.Name='Clothing'AND(soh.OrderDateBETWEEN(@StartDate)AND(@EndDate)))
在查询中,将以下命令添加至SELECT语句,以便为发生销售业务的工作日另外定义一个计算列:
DATENAME(weekday,soh.OrderDate)asWeekday.
22.单击“运行”(!
)。
“定义查询参数”对话框随即打开。
23.在“参数值”列中,为 @StartDate, 输入值,例如 1/31/2001。
24.在“参数值”列中,为 @EndDate 输入值,例如 1/31/2003。
25.单击“确定”。
结果集中应该显示一个标有Weekday的新列。
26.单击两次“确定”。
在“报表数据”窗格中,确保含有Weekday字段。
(可选)设置要筛选的表数据中的日期的格式
1.单击“设计”选项卡。
2.右键单击带[Date]字段表达式的单元,然后单击“文本框属性”。
3.单击“数字”,然后在“类别”字段中,选择“日期”。
4.在“类型”框中,选择“2000年1月31日,星期一”。
5.单击“确定”。
添加新报表参数
1.在“设计”视图中,单击“报表数据”窗格中的“新建”,然后单击“参数”。
此时将打开“报表参数属性”对话框。
2.在“名称”中,键入 DayoftheWeek。
3.在“提示”中,键入“筛选每周工作日:
”。
4.确保该数据类型是 Text。
5.单击“默认值”。
6.选择“指定值”选项。
此时将显示“添加”按钮和空的“值”网格。
7.单击“添加”。
8.键入 Friday。
9.单击“确定”。
使用参数表达式设置表筛选器
1.在“设计”视图中,右键单击表的行控点或列控点,并选择“Tablix属性”。
注意:
表数据区域是基于Tablix数据区域的模板。
2.单击“筛选器”。
此时将显示空筛选器网格。
3.单击“添加”。
空行即被添加到网格中。
4.在“表达式”的下拉列表中,选择 [Weekday]。
5.确保“运算符”显示为等号(=)。
6.单击“值”文本框旁边的表达式(fx)按钮。
此时将打开“表达式”对话框。
7.在“类别”中,单击“参数”。
当前参数列表将显示在“值”窗格中。
双击 DayoftheWeek。
该参数表达式便会添加至表达式文本框中。
现在表达式文本框中将显示以下表达式:
=Parameters!
DayoftheWeek.Value。
8.单击“确定”。
再次单击“确定”,退出“Tablix属性”对话框。
现在设置表的筛选器,使其比较字段Weekday中的值和 DayoftheWeek 的参数值。
例如,在报表工具栏中为 DayoftheWeek 输入值 Friday 时,报表处理器将仅处理表中字段Weekday的值是 Friday 的行。
单击“预览”。
由于所有参数都有默认值,因此报表会自动运行。
该表将仅显示由 StartDate 和 EndDate 定义的日期范围中的值,以及有关Friday的值。
后续步骤
您已成功地定义了查询参数和报表参数,为这些参数设置了默认值并在表上设置了筛选器。
在下一课中,您将学习如何为参数创建可用值列表,即有效值列表。
请参阅第2课:
添加创建可用值列表的参数。
第2课:
添加创建可用值列表的参数
第2课:
添加创建可用值列表的参数
可用值(即有效值)为用户提供一系列可能的报表参数值。
报表作者可以提供专门用于从数据源中检索一组值的查询中的有效值,也可以提供一组预定义的值。
通过将一组可用值绑定到处理报表时运行的数据集查询,可以确保只能从下拉列表中选择数据库中存在的值。
在本课中,您将修改SalesOrders报表以显示SQLServerAdventureWorks2008R2数据库中可用销售人员姓名的下拉列表。
并将设置一个表属性,以便在所选参数值的结果集中没有行时显示消息。
当选择某个姓名并查看此报表时,此报表只显示该销售人员的销售额。
替换现有数据集
1.在“报表数据”窗格中,右键单击数据集AdventureWorksDataset,然后单击“数据集属性”。
注意:
如果未显示“报表数据”窗格,请单击“视图”菜单上的“报表数据”。
2.在“数据源”中,确保已选中AdventureWorks_Ref。
3.在“查询类型”中,确保已选中“文本”。
4.单击“查询设计器”按钮打开查询设计器。
5.用下列查询替换文本框中的文本:
6.SELECT
7.soh.OrderDateAS[Date],DATENAME(weekday,soh.OrderDate)asWeekday,
8.soh.SalesOrderNumberAS[Order],
9.pps.NameASSubcat,pp.NameasProduct,
10.SUM(sd.OrderQty)ASQty,
11.SUM(sd.LineTotal)ASLineTotal
12.FROMSales.SalesPersonsp
13.INNERJOINSales.SalesOrderHeaderASsoh
14.ONsp.BusinessEntityID=soh.SalesPersonID
15.INNERJOINSales.SalesOrderDetailASsd
16.ONsd.SalesOrderID=soh.SalesOrderID
17.INNERJOINProduction.ProductASpp
18.ONsd.ProductID=pp.ProductID
19.INNERJOINProduction.ProductSubcategoryASpps
20.ONpp.ProductSubcategoryID=pps.ProductSubcategoryID
21.INNERJOINProduction.ProductCategoryASppc
22.ONppc.ProductCategoryID=pps.ProductCategoryID
23.GROUPBYppc.Name,soh.OrderDate,soh.SalesOrderNumber,
24.pps.Name,pp.Name,soh.SalesPersonID
25.HAVING
26.ppc.Name='Clothing'
27.AND(soh.OrderDateBETWEEN(@StartDate)AND(@EndDate))
ANDsoh.SalesPersonID=(@BusinessPersonID)
除添加了将结果集限定为一个销售人员的条件之外,该查询与以前的查询相同:
ANDsoh.SalesPersonID=(@BusinessPersonID)
28.单击“运行”(!
)按钮。
提示输入查询参数的值时,请使用下表来输入值。
@StartDate
1/31/2001
@EndDate
1/31/2003
@BusinessPersonID
290
29.单击“确定”。
随即显示 SalesPersonID =290的销售人员RanjitVarkeyChudukatil的结果集。
填充报表参数的有效值列表
1.在“报表数据”窗格中,单击“新建”,然后单击“数据集”。
此时将打开“数据集属性”对话框。
2.在“名称”字段中,键入 BusinessPersons。
该数据集将用于填充 SalesPersonID 报表参数的有效值列表。
3.确保数据源为AdventureWorks_Ref。
4.将以下Transact-SQL查询粘贴到查询窗格中:
5.SELECTSP.BusinessEntityID,C.FirstName,C.LastName
6.FROMSales.SalesPersonASSPINNERJOIN
7.HumanResources.EmployeeASEONE.BusinessEntityID=SP.BusinessEntityIDINNERJOIN
8.Person.PersonASCONC.BusinessEntityID=E.BusinessEntityID
ORDERBYSP.BusinessEntityID
单击两次“确定”。
随即填充BusinessPersons数据集的字段列表。
该数据集将用于提供 BusinessPersonID 参数的有效值。
9.您将发现BusinessPersons数据集具有名为FirstName和LastName的字段。
接下来,我们将这两个字段连接为一个名为Name的字段。
在“报表数据”窗格中定义计算字段
1.在“报表数据”窗格工具栏中,右键单击 BusinessPersons 数据集,再单击“添加计算字段”。
随即将打开“数据集属性”对话框的“字段”页,并向网格添加一个新行。
2.在最后一个“字段名称”文本框中,键入 Name。
3.在“字段源”文本框中,粘贴以下表达式:
=Fields!
LastName.Value&","&Fields!
FirstName.Value
4.单击“确定”。
5.在“报表数据”窗格的 BusinessPersons 数据集下,新字段Name将出现在该数据集的字段集合中。
使用可用值列表填充报表参数
1.在“报表数据”窗格中,展开“参数”节点,右键单击 BusinessPersonID,然后单击“参数属性”。
2.在“提示”中,键入“选择业务人员:
”。
3.在“数据类型”中,选择“整数”。
4.单击“可用值”。
5.选择“从查询中获取值”选项。
6.从“数据集”下拉列表中,选择 BusinessPersons。
7.从“值字段”下拉列表中,选择 BusinessEntityID。
8.从“标签字段”下拉列表中,选择“名称”。
通过选择标签的名称,BusinessEntityID 参数的有效值下拉列表现在将显示每个销售人员的姓名,而不是销售人员编号。
9.单击“默认值”。
10.选择“从查询中获取值”选项。
11.从“数据集”下拉列表中,选择 BusinessPersons。
12.从“值字段”下拉列表中,选择 BusinessEntityID。
13.单击“确定”。
14.单击“预览”选项卡。
此报表将显示业务人员姓名下拉列表。
15.单击“查看报表”。
选择其他参数值以查看结果。
后续步骤
您已经成功地向现有报表添加了参数的可用值列表。
接下来,您将修改 DayoftheWeek 和 SalesPersonID 参数,使其成为多值参数。
请参阅第3课:
添加在列表中选择多个值的参数。
3课:
添加在列表中选择多个值的参数
第3课:
添加在列表中选择多个值的参数
在本课中,您将 BusinessPersonID 和 DayoftheWeek 参数从单值参数更改为多值参数。
多值参数允许您为报表参数选择多个值。
若要修改报表参数BusinessPersonID,请更改AdventureWorks2008R22008 数据集的查询,以便对所选值集(而不等于单个值)中的 @BusinessPersonID 进行测试,并检查该报表参数的多值属性。
若要修改 DayoftheWeek 报表参数,需要检查多值属性、设置来自新数据集的可用值,并为默认值提供表达式。
您将创建一个新数据集,为 DayoftheWeek 参数提供可用值。
最后,您将向报表添加一个文本框,以便为选择的 DayoftheWeek 显示参数值。
替换现有数据集
1.在“报表数据”窗格中,右键单击数据集AdventureWorksDataset,然后单击“数据集属性”。
2.在“数据源”中,确保已选中AdventureWorks_Ref。
3.在“查询类型”中,确保已选中“文本”。
4.单击“查询设计器”按钮打开查询设计器。
5.用下列查询替换文本框中的文本:
6.SELECT
7.soh.OrderDateAS[Date],DATENAME(weekday,soh.OrderDate)asWeekday,
8.soh.SalesOrderNumberAS[Order],
9.pps.NameASSubcat,pp.NameasProduct,
10.SUM(sd.OrderQty)ASQty,
11.SUM(sd.LineTotal)ASLineTota