你在一堆由經理提供的列印出來的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