你在一堆由經理提供的打印出來的EXCEL表格、Access報表、和筆記中瘋狂的查找數據.你需要來自這個數據源的描述,來自那個數據源的指標,來自另一個數據源的過濾信息。對於這些無處不在的數據,你該如何是好呢?
連着做兩次深呼吸。本系列文章又來拯救你了!本篇文章討論如何連接到不同的數據源並抓取數據。如果你還未閱讀本系列的前兩篇文章,請看:
PS:別忘了深呼吸后把氣呼出來
數據,數據,數據
報表存在的目標是展示數據。雖然這些數據可能來自不同的數據源,但最終用戶只會看到你最終提供的數據。你需要兩個與數據有關的報表項來實現這個目標,它們分別為:數據源(Data Sources)和數據集(Datasets)
數據源(Data Sources)
數據源包含了所需要獲取數據的位置信息。這個信息可能是一個連接字符串,比如SQL Server數據庫或分析服務數據庫,如果是Web Service的話,也可能是一個URL。數據源為報表服務提供數據源的連接信息和安全驗證信息。
報表服務器包含了兩類數據源:
- 共享數據源是連接外部數據源的抽象鏈接。共享數據源可以在多個報表中使用,因此單獨上傳到報表服務器
- 嵌入數據源就像其名稱所示那樣是嵌入到報表中的。因此嵌入數據源不能在多個報表間共享,也不能在報表外部訪問
很多情況下改變數據來源的信息是家常便飯。比如你的開發環境由測試環境變為生產環境,或是由於公司新的命名規則的推行使得數據庫服務器名稱發生了變化。因為這類事情常常發生,所以我推薦在所有的報表中使用共享數據源。下面讓我們來看一下創建共享數據源的步驟。
創建共享數據源
打開Business Intelligence Development Studio (BIDS).在創建完報表服務項目后,在解決方案管理器中可以看到共享數據源目錄。右鍵點擊該目錄選擇添加新的數據源,如圖3-1所示:
圖3-1. 共享數據源
接下來出現數據源向導。我們可以在這個窗口看到數據源名稱,類型以及連接字符串,這個屬性窗口如圖3-2所示。
圖3-2.共享數據源屬性屏幕
將你的數據源命名為報表作者可以識別並不與具體報表環境相關的名稱。當創建一個SQL Server 數據連接時。直接使用數據庫的名稱是一個不錯的做法。對於Reporting Services 2008 R2來說,你可以連接到一下數據源:
- Microsoft SQL Server
- Microsoft SQL Azure
- Microsoft SQL Server Parallel Data Warehouse
- OLE DB
- Microsoft SQL Server Analysis Services
- Oracle
- ODBC
- XML
- Report Server Model
- Microsoft SharePoint List
- SAP NetWeaver BI
- Hyperion Essbase
- TERADATA
點擊“編輯”按鈕創建連接字符串。填入所需的信息后點擊OK,你就可以看到生成的連接字符串了。然后點擊確定,你就可以在解決方案管理器中看到剛剛創建的共享數據源了。
將共享數據源歸類為報表數據源
在創建完一個可以被所有報表共享的共享數據源之外,你還需要通過創建報表數據源告訴報表使用哪個共享數據源。這一步可以在BIDS的報表數據窗格來實現,如圖3-3所示,右鍵點擊數據源,選擇添加數據源
注意:如果你沒有看到報表數據窗口,你可以通過視圖菜單 –>報表數據或者按快捷鍵:Ctrl+Alt+D。
圖3-3.通過報表數據窗格添加數據源
因為你已經創建了共享數據源,現在你就可以在”使用共享數據源引用”下選擇剛才創建的共享數據源,如圖3-4所示。
圖3-4.數據源屬性窗口
下面我們可以准備開始抓取數據了。
數據集
在我們知道從何處抓取數據庫,我們還需要告訴報表服務抓取什么數據。這一步可以在報表服務中通過數據集來實現。與數據源的創建類似,你可以創建兩類數據集:
- 共享數據集僅僅在SQL Server 2008 R2以上可用,將查詢語句抽象出來供多個報表使用。
- 嵌入數據集存儲在單個報表中,這也是本篇文章將用到的。
創建一個嵌入數據集,我們來看一下BIDS的報表數據窗格,右鍵點擊數據集選擇添加數據集,如圖3-5所示。
圖3-5.通過報表數據窗格添加數據集
打開后,你可以在數據集屬性屏幕中填入合適的名稱,數據源和你需要的查詢語句。記住你可以在一個報表中擁有多個數據源。所以命名需要與細節相關以便你在用到的時候知道用哪個數據集。當然,不要命名的太細節以便在未來你還需要在數據集中添加額外字段時不必重新命名數據集。這類命名比如:SalesByCustomer或 SubUnitProperties.
在Reporting Services 2008 R2中,接着選擇”使用在我的報表中嵌入的數據集”來使你可以使用剛剛創建的數據源。最終,你還需要一個查詢語句來抓取數據。對於SQL Server作為數據源來說,你可以使用本文或是存儲過程選項。存儲過程選項允許你調用數據庫的存儲過程,存儲過程使得在多個報表間重用數據變得非常容易。接下來的選項,文本,可以通過寫查詢語句來抓取數據。表3-1是基於不同數據源類型的不同語句。
數據源類型 | 示例查詢語句 |
Microsoft SQL Server | select c.AccountNumber , soh.OrderDate , sum(soh.TotalDue) as TotalDue from Sales.SalesOrderHeader soh inner join sales.Customer c on soh.CustomerID=c.CustomerID where soh.OrderDate between @startDate and @endDate group by c.AccountNumber, soh.OrderDate |
Microsoft SQL Server Analysis Services | SELECT NON EMPTY { [Measures].[Sales Amount], [Measures].[Tax Amt] } ON COLUMNS , NON EMPTY { ([Dim Customer].[First Name].[First Name].ALLMEMBERS * [Dim Customer].[Last Name].[Last Name].ALLMEMBERS ) } ON ROWS FROM [Adventure Works DW] |
XML | <Query> <Method Name="DictionaryList" Namespace="http://services.aonaware.com/webservices"> </Method> <ElementPath IgnoreNamespaces="true">*</ElementPath> </Query> |
表1.基於不同數據源類型的不同查詢語句
一個完整的數據集屬性查詢窗口見圖3-6.
圖3-6.數據集屬性查詢窗口
在數據集屬性窗口的菜單窗格中,你可以看到其他四個選項:字段、選項、篩選器和參數。點擊字段選項來確保你的查詢語句正確,字段是否可用。如果這個步驟出現問題,則字段選項將會提示錯誤信息或者不顯示任何字段。選項可以設置對數據集調整的一些參數,包括:排序規則、區分大小寫、區分重音、區分假名類型、區分半角。過濾選項允許通過限制條件來限制那些行顯示在報表中,這些限制條件包括:=,like,Top N,between。最后,參數選項允許你修改傳送到數據源的查詢,查詢參數是基於數據源的協議的,而參數值可以基於報表運行時用戶的輸入數據。參數窗口可以在圖3-7中看到。我們將會在后續文章中討論用戶輸入參數。
圖3-7.數據集屬性參數窗口
在點擊確定創建完數據集后,我們就能在報表數據窗格中看到它了。點擊+號展開樹狀菜單就可以看到可用的字段了,如圖3-8所示。你將會在下一篇關於tablix報表項的文章中用到它。
圖3-8.最終完成后在報表數據中的數據源和數據集
接下來呢?
目前為止,我們已經連接到數據源並知道我們需要用到的報表元素。我們也可以在其它報表中使用這個報表所創建的共享信息。對於大BOSS所需要的報表來說,你還需要知道展示哪些數據,分組行和列,按某些命名規則排序,以及按特定格式展現數據。你將在本系列文章的下一篇Tablix指南中學到。
-----------------------------------------------------------------------
原文鏈接:Data Everywhere - Level 3 in the Stairway to Reporting Services
Translated By:CareySon