如圖,在年月表中建立了層次結構html
當須要實現傳統的年、月、按列查詢的時候,MDX須要藉助 時間裏面的年和時間外面的月份,或者時間外面的年和時間裏面的月份,經過CROSSJOIN函數進行拼接。架構
SELECT NON EMPTY {Hierarchize( {[Measures].[年初數 的總和], [Measures].[期末數 的總和], [Measures].[本期發生數 的總和]} ) } ON COLUMNS, NON EMPTY {Hierarchize( { CROSSJOIN({[年月表].[時間].[年]} ,CROSSJOIN({[年月表].[月份].[月份]} ,CROSSJOIN( {[組織架構表].[組織編碼].[組織編碼]}, CROSSJOIN({[組織架構表].[組織名稱].[組織名稱]} ,CROSSJOIN({[帳簿表].[帳簿名稱].[帳簿名稱]} ,CROSSJOIN({[損益視圖].[項目名稱].[項目名稱]} ,{[資產負債視圖].[資產項目].[資產項目]}) ) ) ) ) ) } ) } ON ROWS FROM [FinBPCube]
這樣年月是獨立的兩列函數
若是同時使用時間層次結構裏面的年、月,則會發生查詢出來的結果會把年、月份都會放到同一列中。post
SELECT NON EMPTY {Hierarchize( {[Measures].[年初數 的總和], [Measures].[期末數 的總和], [Measures].[本期發生數 的總和]} ) } ON COLUMNS, NON EMPTY {Hierarchize( { CROSSJOIN({[年月表].[時間].[年], [年月表].[時間].[月份]} ,CROSSJOIN( {[組織架構表].[組織編碼].[組織編碼]}, CROSSJOIN({[組織架構表].[組織名稱].[組織名稱]} ,CROSSJOIN({[帳簿表].[帳簿名稱].[帳簿名稱]} ,CROSSJOIN({[損益視圖].[項目名稱].[項目名稱]} ,{[資產負債視圖].[資產項目].[資產項目]}) ) ) ) ) } ) } ON ROWS FROM [FinBPCube]
這樣是混合一列編碼