微軟BI 之SSRS 系列 - 在 Cube 中通過 MDX 查詢實現基於父子遞歸關系的匯總報表


之前我寫了一篇在 SSRS 開發中處理這種父子關系的匯總與聚合的文章 (SSRS 系列 - 使用分組 Group 屬性實現基於父子遞歸關系的匯總報表),示例中的查詢是基於 SQL Server 關系型數據庫的,這一篇是基於 MDX 父子維度的 SSRS 報表。

沿用上一篇中的 (SSAS系列 - 關於父子維度的設計)父子維度 和(SSAS 系列 - 自定義的日期維度設計) 的時間維度,並在此基礎上創建 Cube 並部署。

 

當然在這個例子中可能不會使用到時間維度,之所以添加進來只是因為在 Cube 的創建過程中 SSDT 開發工具會提示:不要創建只含有一個維度的多維數據集。

部署完成之后,我們可以通過 MDX 查看一下相應的維度和度量值數據。

SELECT ([Measures].[Sales Amount]) ON COLUMNS,
       NON EMPTY([Employee].[Employees].Members) ON ROWS
FROM [BIWORK_ParentChildDemo]

但是像這樣顯然不夠,因為我們不僅僅需要知道我們應該查詢的不光是當前成員,而且應該展現當前成員的后代子成員。

並且通過 Dimension 屬性來定義要獲取到這些成員的 MEMBER_CAPTION (在父子維度設計的那篇文章已經提到了), 成員的唯一名稱 MEMBER_UNIQUE_NAME,父成員的唯一名稱 PARENT_UNIQUE_NAME, 層次結構中的級別 LEVEL_NUMBER。

SELECT NON EMPTY { [Measures].[Sales Amount]} ON COLUMNS,
       NON EMPTY { 
                    (
                        DESCENDANTS(
                                     [Employee].[Employees].ALLMEMBERS
                                   ) 
                    ) 
                 } 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME, PARENT_UNIQUE_NAME, 
LEVEL_NUMBER ON ROWS 
FROM [BIWORK_ParentChildDemo]

 

每一個成員的后代子成員都會被查詢出來,這里只展現部分數據。

 

如何創建報表和連接 SSAS 分析服務數據庫,以及如何創建基於 SSAS MDX 查詢的 Dataset 在這里就不再說了,可以參考我的這篇文章

設計好報表並拖放好一個 Table 組件,指定好 Employees 和 Sales Amount 列。

 

選中 Employees 這一行,右鍵編輯 Group 屬性。

 

在這里注意分組的屬性並不是 Employees 而是它的維度屬性 Employees.UniqueName 。

 

遞歸父類也是使用的維度屬性 Employees.ParentUniqueName 。

 

可以根據名字或者 Sales Amount 排序,這里選擇的是 Employees 。

 

設置顯示和隱藏是根據點擊 Employees 決定的。

 

設置 Employees 名稱的 Textbox 屬性,根據級別高低來決定左邊距的縮進距離。

=Cstr(Level() * 20) & "pt"

 

為了顯示不同的級別的背景,也可以手動的設置行背景,粗略的設置了一下顏色,實際開發中可以精心設置。

=Switch(LEVEL()=0,"LightSlateGray",LEVEL()=1,"LightSteelBlue",LEVEL()=2,"LightBlue",LEVEL()=3,"LightCyan",LEVEL()=4,"Azure",LEVEL()=5,"White")

 

保存並預覽報表的效果,雖然是基於 Cube 的 MDX 查詢,但是實現起來也比較容易。

可以對比一下之前通過數據倉庫直接查詢的父子遞歸實現的 SSRS 報表,數據上都是正確的。

 

 

 


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

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


 


免責聲明!

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



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