BI之SSAS完整實戰教程7 -- 設計維度、細化維度中 :瀏覽維度,細化維度

MiroYuan發表於2016-09-21

上篇文章我們已經將Dim Geography維度設計好。

若要檢視維度的成員, AS需要接收該維度的詳細資訊(包括已建立的特性、成員屬性以及多級層次結構), 通過XMLA與AS的例項進行通訊。

今天我們將維度部署到AS上進行檢視。

文章提綱

  • 補充背景知識
  • 瀏覽維度,細化維度
  • 總結

補充背景知識

XMLA是一種基於簡單物件訪問協議(SOAP)的XML應用程式程式設計介面的行業標準, 設計用於OLAP和資料探勘。

XMLA規範定義了兩個函式,即Execute和Discover, 這兩個函式用於向主機例項傳送操作及從主機例項檢索資料。

下面是一個使用XMLA傳送到AS例項的Execute請求示例。

<Execute xmlns="urn:schemas-microsoft-com:xml-analysis">

    <Command>

    <Statement>

        SELECT Measures.MEMBERS ON COLUMNS FROM [Adventure Works DW]

    </Statement>

</Command>

<Properties>

    <PropertyList>

        <Catalog>

ASMultidimensionalPOC

</Catalog>

<Format>Multidimensional</Format>

<AxisFormat>ClusterFormat</AxisFormat>

    </PropertyList>

</Properties>

</Execute>

上面的XMLA中傳送了一個請求, 執行在Statement命令中指定的MDX查詢。與AS Server進行通訊的一些常見命令包括Create、Alter、Process和Statement.

AS 物件的定義通過DDL(Data Definition Language, 資料定義語言)來實現。

其他命令處理已經定義的資料,稱為DML(Data Manipulation Language, 資料操作語言)命令。

當專案部署到AS伺服器時,會傳送一些XMLA請求,如下所述:

1. 從AS請求一個資料庫列表以確定當前專案所定義的資料庫是否已在該例項中存在, 指定的專案名稱將被用作資料庫名稱。

SSDT將針對資料庫傳送Create或Alter命令,具體取決於該資料庫是否已存在於伺服器上。

2.隨後, SSDT將傳送一個XMLA請求,以處理你建立和/或修改的物件。

SSDT將執行驗證,以確保維度設計正確無誤。

瀏覽維度,細化維度

現在我們來將維度部署到AS上來檢視維度的內容:

右擊專案Deploy,SSDT嘗試將該專案部署到AS例項。

可以看到,部署失敗。

SSDT將使用Error List視窗報告由SSDT從AS例項識別出的所有警告和錯誤。

上圖中顯示的前15個警告是提醒違反最佳實踐的情況,一般按照必要性進行排序。這些錯誤是可以忽略的(右鍵選Dismiss, 類似於Word忽略拼寫錯誤)

另外一種是AS例項報告的警告,這種是不能解除的。

如右擊第16個警告,可以發現Dismiss是灰色禁用狀態。

第16條警告指出,在處理City特性時,識別出重複的特性鍵值,表明具有多個使用相同名稱的城市,但無法確定哪個State Province Name與某個特定的城市具有關係。例如有多個Augsburg

由於該錯誤,AS例項無法處理City特性,隨後也就無法處理Dim Geography維度,最終導致部署失敗。

若要更正上述問題,需要確保每個城市都是唯一的。

我們使用組合鍵的方式(City+State Province Code)來唯一標識一個City特性。

設定組合鍵

1. 在維度設計器中開啟Dim Geography維度,然後在Attributes窗格中選擇City特性

2. 在Properties窗格中,找到KeyColumns屬性,然後單擊省略號

在跳出的對話方塊中,將StateProvinceCode新增到Key Columns列表中。

3. 設定NameColumn

預設情況下,使用列名稱作為特性的鍵列。

AS例項會自動將同一列推斷為NameColumn(用於顯示特性的成員名稱的列)。只要定義一個組合鍵,就需要為特性定義一個名稱列,因為SSDT和AS例項不知道應該使用組合鍵的哪個列作為特性的名稱列。

在KeyColumns下面可以看到NameColumn屬性,單擊省略號,選擇City作為Name Column.

再次Deploy, 可以發現還是有問題:

Warning    16    OLAP 儲存引擎中存在錯誤: 處理時找到重複的屬性鍵: 表:"dbo_DimGeography",列:"PostalCode",值:"12171"。該屬性為"Postal Code"。        

 

根據錯誤提示,我們再次確認資料,發現Postal也有重複。

類似剛才City特性所執行的操作一樣,也需要Postal Code特性成員具有唯一性。

1. 選擇Postal Code特性,

2. 在Properties窗格中,找到KeyColumns屬性,然後單擊省略號, 包含資料來源中的StateProvinceCode、City和Postal Code列。

3.設定NameColumn為PostalCode

再次Deploy就成功了。

瀏覽維度

切換到Browser選項卡來瀏覽Dim Geography維度的資料。

預設選中的Hierarchy就是Geography, 隨便展開一些level來看

我們來做幾個修改,使得UI更加友好。

將Geography層次結構的All級別名稱更改為All Countries

我們回到維度設計器Dimension Structure

在Hierarchies窗格中選擇Geography層次結構

按F4切換到Properties視窗,第一個屬性是AllMemberName, 預設不顯示任何值,填入All Countries

再次部署專案,再次切換到Browser頁面,點選Reconnect選單。

可以看到All已經變成All Countries了。

對某個級別的成員進行排序

某個級別的成員就是構成該級別的特性的成員。

如Geography層次結構中Country級別的成員實際上就是特性English Country Region Name的成員。(前面我們重新命名過English Country Region Name,改成了Country)

我們就以這個Country為例,使用名稱列來顯示特性名稱,使用鍵列來進行排序。

維度中每個特性都有以下兩個屬性:KeyColumns和NameColumn, 其中,KeyColumns屬性用於指定對成員進行排序所用的列,而NameColumn屬性用於儲存成員的描述性名稱。

預設情況下,維度嚮導和維度設計器會在向維度中新增新增特性時設定KeyColumns屬性,但不會設定NameColumn屬性。

如果NameColumn屬性為空,AS將返回KeyColumns值作為成員的描述性名稱,以響應客戶端請求。

按F4切換到Country的屬性,預設是如下設定

我們將KeyColumns改成Country Region Code, 將NameColumn改成原來的KeyColumns中的值。

再確認下Properties視窗的Advanced部分中, 確保OrderBy屬性的值為Key

再次部署專案,再次切換到Browser頁面,點選Reconnect選單。

優化特性

在設計維度中,如果維度過多,看起來會很亂,我們可以通過兩個特性屬性來操縱特性對終端使用者的可見性。

選中相應屬性,直接看下屬性視窗的說明就可以區別開來:

AttributeHierarchyEnabled

Indicates whether an atrribute hierarchy is enabled for this attribute. If the attribute hierarchy is not enabled, then the attribute cannot be used in a user-defined hierarchy.

AttributeHierarchyVisible

Indicates whether the attribute hierarchy is visible to client applications.

Even if the attribute hierarchy is not visible, it can still be used in a user-defined hierarchy and referenced in Multidimensional Expressions(MDX).

 

我們簡單測試下:

將English Country Region Name 的AttributeHierarchyEnabled設為False, 可以看到Deploy會報錯。(因為我們在使用者層次結構中使用了它)。

將French Country Region Name的AttributeHierarchyEnabled設為False, Deploy後可以發現,Browser選項卡中已經沒有這一項了。

在維度中定義翻譯

最後再看下Tanslations選項卡。

我們利用之前的French Country Region Name,建立法語翻譯

1. 切換到Translations頁面,New Translation,選擇French(France)

2. 在新新增的列中單擊English Country Region Name右邊的單元格按鈕,在彈出對話方塊中選擇FrenchCountryRegionName列。

3. 重新Deploy後瀏覽 可以看到變成了法語。

總結

我們需要掌握維度部署過程中錯誤的查詢除錯。

需要掌握常見的維度功能,如設定組合鍵,排序,優化特性等。

 

祝學習進步:)

 

相關係列文章列表:

 

所有文章列表
首發部落格園 by MiroYuan,轉載文章之後必須在文章頁面明顯位置給出作者和原文連線,否則保留追究法律責任的權利。

 

相關文章