使用 SQL Server 2012 Analysis Services Tabular Mode 表格建模 圖文教程


以下內容為我個人對 MSDN 上提供的 "SQL Server 2012 Analysis Services Tabular Model 表格建模" 教程的實踐, 包含了每一課中具體操作的圖片實例, 一步一步圖文記錄了從數據源導入, 創建關系, 計算列, 度量值, 層次結構, 透視, 角色到部署等每一個階段, 對這個教程相信是一個有益的補充.

如果覺得光看 MSDN 上文字教程比較枯澀, 對比着圖片來一步一步操作也會幫助節省大家寶貴的學習時間, 可以快速瀏覽本文了解一下 Tabular Mode 下各對象創建的難易程度, 較之傳統的 Multidimensional Mode 是否會更加簡單易用一些.

MSDN 原教程 - http://msdn.microsoft.com/zh-cn/library/hh231691.aspx

以下正文開始


SQL Server 2012 Tabular Model 表格建模

目標

在表格建模的過程中我們需要能夠熟練掌握的知識點包括以下內容 –

  • 使用 SSDT (SQL Server Data Tools) 創建 SQL Server 2012 Analysis Services 表格模型項目
  • 將數據從 SQL Server 關系型數據庫導入表格模型
  • 創建和管理模型中表之間的關系
  • 創建和管理可幫助用戶分析模型數據的計算, 度量值和關鍵績效指標
  • 創建和管理透視和層次結構, 通過提供業務和應用程序特定的視點, 幫助用戶更輕松的瀏覽模型數據
  • 創建分區將表數據划分為可獨立於其它分區進行處理的更小邏輯部分
  • 創建角色以及用戶成員來保護模型對象和數據安全
  • 將表格模型部署到在表格模式下運行的 Analysis Services 的 Sand Box 或 Production 環境中

 


實驗條件

SQL Server 2012 Analysis Services 示例在安裝時選擇了表格模式 Tabular Mode安裝, 另外一種模式就是我們之前一直熟悉的 Multidimensional and Data Mining Mode, 兩者只能選一, 但是可以在下一次安裝時把另外一種模式安裝到另外的一個實例中.

下載http://msftdbprodsamples.codeplex.com/releases/view/105902 示例數據庫

                        

WIN 7 下右鍵管理員身份運行 SQL Server 2012 並附加下載的Demo 數據庫

CREATE DATABASE AdventureWorksDW2012 ON (FILENAME = 'M:\Data\AdventureWorksDW2012_Data.mdf'), (FILENAME = 'L:\Tlogs\AdventureWorksDW2012_Log.ldf') FOR ATTACH; 

 


使用 SSDT (SQL Server Data Tools) 創建 SQL Server 2012 Analysis Services 表格模型項目

雖然是在 SQL Server 2012 安裝的過程中安裝的, 但是 SSDT BI 開發工具仍然使用的是 Visual Studio 2010 Shell, 之前BI 開發工具名稱是我們所熟悉的 BIDS.

創建新項目

因為我本機就安裝了這一個示例, 所以直接選擇本機.

Compatibility Level – 我選擇的是 SQL Server 2012 SP1, 之前選擇另外一種默認模式發生了錯誤.

 

創建完項目后在 AW Internet Sales Tabular Model 工程中可以看到這個 Project 名稱是 .smproj

並且默認情況下生成了一個Model.bim 的文件, 這個文件就是以后我們重點工作的內容,並且在之后的設計過程中會發現相對於以前的 SSAS 多維數據的Cube 設計 在 Model 模式下無論界面還是設計過程個人感覺更簡潔和容易些.

 

選中項目右鍵屬性 – 以后的部署過程和這里相關.

選擇模型看它的屬性中有一項 Direct Query 模式 – 指定是在內存模式還是在直接查詢模式下部署模型, 我們選擇默認的內存模式 Off 創建和部署模型.

 

注意到在 SSDT 的 Visual Studio 環境下多了 Model, Table, Column 這些菜單項.

Model 下的大致功能

  • 啟動表導入向導
  • 查看和編輯現有連接
  • 刷新工作區數據
  • 使用 Excel 分析瀏覽模型
  • 創建透視和角色
  • 選擇模型視圖和設置計算選項

Table 的大致功能

  • 創建和管理表之前的關系
  • 創建和管理以及指定日期表設置
  • 創建分區以及編輯表屬性

Column 的大致功能

  • 在表中添加和刪除列
  • 凍結列以及指定排序順序
  • 自動求和為選定列創建標准聚合度量值

這樣我們就創建了第一個基於 Tabular Mode 的SSAS 項目模型並了解了一些基本的配置選項和相關的概念.

 


將數據從 SQL Server 關系型數據庫導入表格模型

在Model 菜單中選擇 Import From Data Source… 就會看到很多 Data source 可供我們選擇, 以后我們可以一一去嘗試不同的數據源下我們的模型是如何導入源數據的, 目前的示例中我們選擇 Microsoft SQL Server.

 

接上圖 Relational Database 還有以下數據庫

Multidimensional Sources 和 Data Feeds

 

文本文件以及 Excel 文件作為數據源

 

選擇好 Server Name 和 Database Name

 

 指定Windows 用戶名和密碼 我使用的是我安裝虛擬機上系統的用戶名和密碼

 

 選擇表或者視圖

 

按照http://msdn.microsoft.com/zh-cn/library/hh231690.aspx完成所有表的重命名但不要急於點擊NEXT 操作, 因為在選擇數據源的過程中不是所有的數據都是我們需要的, 因此需要對表的列進行篩選.

選中 DimCustomer 表並點擊 Preview & Filter

 

可以對這個表進行瀏覽, 這里大概顯示了 DimCustomer 表的50條數據. 可以點擊一下下拉按鈕很容易明白這里的篩選器和Excel中的篩選操作一樣.

 

清除這幾個列, 因為在后面模型的設計中不需要.

 

完成后點擊 OK 可以看到 DimCustomer 后面有一個 Filter Details

 

Filter Details 其實就列出了我們選擇的列有哪些.

 

按照http://msdn.microsoft.com/zh-cn/library/hh231690.aspx 完成對其它表不需要的列進行清除操作, 操作完成后應該能看到Filter Details 的鏈接.

 

點擊完成后看到所有表導入時的信息包括狀態和導入的條數, 可以查看 Data preparation 的 Details 信息.

 

Details 信息中顯示了表與表之前的關系 –

  • DimCustomer 引用了 DimGeography 表中的 GegraphyKey
  • DimProduct 引用了 DimProductSubcategory 表中的 ProductSubcategoryKey
  • DimProductSubcategory 引用 DimProductCategory 表中的 ProductCategoryKey
  • FactInternetSales 引用了 DimCustomer 表中的 CustomerKey 和 DimProduct 表中的 ProductKey

 

點擊OK 保存好項目可以看到這個模型下所有已導入表的信息以及數據, 個人感覺從界面上看非常直觀.

 

在設計模型的過程中往往要對表列進行重命名以便於客戶端更好的展現和導航.

選中 Customer 表並點擊CustomerKey 對它進行編輯重命名為 Customer ID.

 

請按照http://msdn.microsoft.com/zh-cn/library/hh231695.aspx 對其它表中的列重命名操作.

編輯完成后保存, 可以通過右下角的視圖看看表與表之間的關系, 非常直觀並且界面操作非常流暢.

 

從上圖中也可以看到目前 Date 表還沒有與其它的表進行關聯, 但是在后面的使用中會對日期表進行關聯, 以便於 DAX 時間智能函數的計算.

現在要做的是將這個Date 表標識為日期表, 盡管它確實包含了時間和日期的數據, 但是我也需要在設計中標識以下, 指定日期表和該表中唯一的標識符日期列, 最后再創建其它表與日期表之間的關系.

選中 Date 表並標識它為日期表

 

並選中 Date 列作為唯一標識列

在設計過程中如何知道某張表有沒有設計為時間表, 可以通過查看 Table 下 Date 選項的內容. 如果 Mark As Date Table 已經被選中並且 Date Table Settings 選項顯示可使用的狀態時即這個表對象已經標識為日期表了.

 


創建和管理模型中表之間的關系

驗證導入數據時自動創建的關系並在不同表之間添加新的關系, 確立表與表之間的數據應該如何相關.

在上面的操作中, 使用了表導入向導來導入數據, 總共有7張表被導入. 如果從關系源中導入數據, 則將自動導入現有關系以及數據.

在模型關系視圖中單擊 Customer 和 Geography 表之間的實線, 這個實線表示此關系處於活動狀態, 即當計算 DAX 公式時, 默認情況下將使用此關系.

注意觀察兩個表中 Geography ID 都同時顯示, 還有右側的關系顯示出來這兩張表通過何種字段關聯. 這個操作感覺非常靈活和直觀, 非常容易用來檢查表與表之間的關聯關系是否正確, 特別在表很多的情況下, 檢查起來非常方便.

還有一點要注意的就是右側的RelationShip 中的 Active 狀態為 True.

 

但是從上圖中也可以看到 Date 表目前還沒有被關聯起來, 因此需要為它建立關聯關系.

將 InternetSales 表中的 Order Date 拖放到 Date 表中的 Date 建立關聯關系.

 

同樣的操作, 將Due Date 和 Ship Date 拖放到 Date 表的 Date 上, 最終顯示的結果如下圖所示

注意看到三條關系線中有一條實心線和兩條虛線, 實心線表示的是 Relationship 是Active 的, 虛線表示Relationship 是不活動的. 這里也稱它們為活動關系和非活動關系.

這里有一個概念需要強調的是 – 表與表之間可以具有多個關系, 但一次只有一個關系可以處於活動狀態.


創建計算列

在多維數據集 Cube 的構建過程中對於視圖的創建也用到過計算列, 所以概念很容易理解.

在Date 表中創建 Month Calendar 計算列

 

編輯名稱並在 fx 編輯欄中輸入=RIGHT(" " & FORMAT([Month],"#0"), 2) & " - " & [Month Name] 並保存, 列名稱修改為 Month Calendar

 

至於這個表達式具體的含義這里不做解釋.

按照http://msdn.microsoft.com/zh-cn/library/hh231703.aspx 的要求完成對其它計算列的創建.

在操作過程中要理解對 Product 表的 Product Subcategory Name 計算列的創建.

按照我們的理解, 既然 Product 表已經可以引用到 Product Subcategory 表中的 Product Subcategory Name 這一列, 為什么還需要在這里創建這個計算列? 原因就在於這個計算列是用來在 Product 表中創建一個層次結構, 其中包含了來自 Product Subcategory 表中 Product Subcategory Name 列的數據, 層次結構不能跨多個表.

從=RELATED('Product Subcategory'[Product Subcategory Name]) 的用法直觀的看就能明白這個列引用了 Product Subcategory 表中的 Product Subcategory Name 這一列.  要注意這些表名稱中間的空格, 這里的引用名稱應該完全和你所創建的表的名稱和列的名稱完全匹配.

而之所以能夠這么引用的原因就是之前我們已經建立了這幾張表之間的關系.

 


創建度量值

在模型中創建度量值與創建計算列比較類似, 度量值從本質上說是使用 DAX 公式創建的計算. 但是與計算列不一樣的是, 度量值是基於篩選器進行計算的.

為了創建度量值, 需要使用度量值網格, 每個表都有一個空的度量值網格, 如下圖所示.

 

按照http://msdn.microsoft.com/zh-cn/library/hh231688.aspx 完成所有度量值的創建

 

要注意的是在使用自動求和功能創建的度量值將自動放入關聯下方度量值網格中的最頂部單元中.

 

 


創建關鍵績效指標

關鍵績效指標 KPI 用於根據目標值來度量基礎度量值定義的值的性能. 在保鏢客戶端應用程序中, KPI 可以向業務專業人士提供一種快速簡便的方法, 使他們了解業務績效的摘要或確定趨勢.

在Internet Sales中新增一個新的度量值

Internet Current Quarter Sales Performance:=IFERROR([Internet Current Quarter Sales]/[Internet Previous Quarter Sales Proportion to QTD],BLANK())

 

這個度量值作為 KPI 的基礎度量值.

創建 KPI

 

使用 Absolute Value 並且可以調整 KPI 狀態閥, 移動狀態來調整 KPI 的目標.

 

 


創建透視

創建 Internet Sales 透視, 透視可定義模型的可查看子集, 我們可以將注意力集中在特定業務或特定應用程序上. 當用戶使用透視連接到模型時, 將只能看到與該透視中定義的字段相同的那些模型對象(表, 列, 度量值, 層次結構和KPI )

在模型菜單中找到透視

 

這次的透視只和 Internet Sales 相關, 因此排除掉 Customer, 保存即可.

 

可以看到選擇Internet Sales 透視后, 下面的表選項中 Customer 已經排除在視圖之外了, 這樣可以讓我們更關注於需要關注的業務.

 

 


創建層次結構

為Product 創建層次結構

 

創建完成后只需要簡單的拖拽就可以將需要的列拖拉到層次結構中

 

對它們重命名, 左邊是重命名之后的名稱, 括號中是實際引用的列的名稱.

 

為Date 創建三個層次結構

 

 


創建分區將表數據划分為可獨立於其它分區進行處理的更小邏輯部分

可以通過創建分區將 Internet Sales 表划分為可獨立於其它分區進行處理的更小邏輯部分. 默認情況下, 在模型中的每個表都有一個分區, 所有的行和列都是在一個分區上.

對於 Internet Sales 我們可以通過分區將數據按年份划分,這樣做可以減少查詢的體積, 提高查詢效率.

 

分區名稱 – Internet Sales 2005 並且點擊 SQL 編輯

 

輸入以下SQL 語句 表示查詢的是2005年到2006年間的數據

SELECT [dbo].[FactInternetSales].[ProductKey], [dbo].[FactInternetSales].[CustomerKey], [dbo].[FactInternetSales].[PromotionKey], [dbo].[FactInternetSales].[CurrencyKey], [dbo].[FactInternetSales].[SalesTerritoryKey], [dbo].[FactInternetSales].[SalesOrderNumber], [dbo].[FactInternetSales].[SalesOrderLineNumber], [dbo].[FactInternetSales].[RevisionNumber], [dbo].[FactInternetSales].[OrderQuantity], [dbo].[FactInternetSales].[UnitPrice], [dbo].[FactInternetSales].[ExtendedAmount], [dbo].[FactInternetSales].[UnitPriceDiscountPct], [dbo].[FactInternetSales].[DiscountAmount], [dbo].[FactInternetSales].[ProductStandardCost], [dbo].[FactInternetSales].[TotalProductCost], [dbo].[FactInternetSales].[SalesAmount], [dbo].[FactInternetSales].[TaxAmt], [dbo].[FactInternetSales].[Freight], [dbo].[FactInternetSales].[CarrierTrackingNumber], [dbo].[FactInternetSales].[CustomerPONumber], [dbo].[FactInternetSales].[OrderDate], [dbo].[FactInternetSales].[DueDate], [dbo].[FactInternetSales].[ShipDate] FROM [dbo].[FactInternetSales] WHERE (([OrderDate] >= N'2005-01-01 00:00:00') AND ([OrderDate] < N'2006-01-01 00:00:00')) 

依次創建完 2005,2006,2007,2008,2009 年分區的結果

創建完畢后要處理分區

 

選中所有分區進行處理

 

有可能需要輸入密碼

 

分區完畢 2009年分區中的數據可能沒有.

 

 


創建角色以及用戶成員來保護模型對象和數據安全

角色通過只限作為角色成員的那些 Windows 用戶進行訪問, 提供模型數據庫對象和數據的安全性. 每個角色都使用單個權限進行定義 – 無, 讀取, 讀取和處理, 處理和管理員.

通過使用 SQL Server Data Tools 中的角色管理器在模型創建期間定義角色. 在部署模型后, 可以使用 SQL Server Management Studio 管理角色.

默認情況下, 當前登錄的賬戶對於模型將具有管理員權限. 但是, 為了讓其他的用戶能夠通過報表客戶端應用程序瀏覽模型, 我們必須建立至少建立一個具有讀取權限的角色, 並將這些用戶添加為成員.

在本Tutorial 中, 我們將創建三個角色 –

Sales Manager – 對所有模型對象和數據具有讀取權限的用戶.

Sales Analyst US – 只能瀏覽與 US 美國的銷售相關的數據的用戶, 對於這個角色, 將使用 DAX 公式來定義行篩選器, 該篩選器將成員限制為只能瀏覽針對美國的數據.

Administrator – 具有管理員權限的用戶, 管理員權限可讓用戶具有不受限制的訪問權限, 從而對模型數據庫執行管理任務.

打開模型-角色

 

創建角色 – 在Members 一欄可以添加Windows 用戶組, 但是我的例子中就是本地賬戶, 所以未有添加.

對於 Sales Analyst US 角色, 做出了一些限制  =Geography[Country Region Code] = "US"

 


在 Excel 中分析

接下來將使用 Office 2013 中的Excel 連接模型在部署模型之前對模型設計的進行有效的檢測, 但這里的Excel 必須和開發工具在一台機器上.

除了使用 Excel 之外也可以使用 PowerView 來連接和瀏覽部署的模型數據.

首先使用默認透視和 Internet Sales 透視進行瀏覽

 

當前用戶和默認視圖

 

在Excel 中將能看到所有的Date 和 InternetSales 度量值和所有表透視列 包括 Customer

 

選中 Internet Sales 透視

 

將看不到 Customer

 

查看角色 Internet Sales Manager 應該只具備讀取權限

 

 


將表格模型部署到在表格模式下運行的 Analysis Services 的 Sand Box 或 Production 環境中

配置部署屬性, 指定在表格模式下運行的 Analysis Services 的部署服務器實例以及要部署的模型指定一個名稱. 然后將模型部署到該實例, 部署完成之后, 用戶將可以使用報表客戶端應用程序連接到該模型 .

右擊項目 – 屬性 並編輯部署的信息 最后部署該項目

 

部署狀態 – 成功

 

查看Analysis Service

 

全文完!


總結

個人感覺SSDT 工具的操作非常的簡單和直觀, 處理的速度也非常的流暢, 界面也很友好!

通篇下來對於Tabular Mode 的從開始的數據源數據導入到模型設計到最后的部署也有了初步的認識和了解, 但是對其中的一些概念和細節還值得繼續研究, 特別是 DAX 語句的設計感覺比較陌生. 和MDX在SSAS Cube的設計以及一些Calculated Member 還有Scope 等等設計上還有些對應不起來,因此還有進一步學習的空間! 並且在Tabular Mode 和之前的 Multidimensional Mode 具體的區別和各自優缺點上也值得進一步總結, 深入了解Analysis Service 在數據處理方式的差異和各自優缺點.


再次回顧以下知識點看看掌握了多少

  • 使用 SSDT (SQL Server Data Tools) 創建 SQL Server 2012 Analysis Services 表格模型項目
  • 將數據從 SQL Server 關系型數據庫導入表格模型
  • 創建和管理模型中表之間的關系
  • 創建和管理可幫助用戶分析模型數據的計算, 度量值和關鍵績效指標
  • 創建和管理透視和層次結構, 通過提供業務和應用程序特定的視點, 幫助用戶更輕松的瀏覽模型數據
  • 創建分區將表數據划分為可獨立於其它分區進行處理的更小邏輯部分
  • 創建角色以及用戶成員來保護模型對象和數據安全
  • 將表格模型部署到在表格模式下運行的 Analysis Services 的 Sand Box 或 Production 環境中
 

更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM