如图,在年月表中创建了层次结构
当需要实现传统的年、月、按列查询的时候,MDX需要借助 时间里面的年和时间外面的月份,或者时间外面的年和时间里面的月份,通过CROSSJOIN函数进行拼接。
SELECT NON EMPTY {Hierarchize( {[Measures].[年初数 的总和], [Measures].[期末数 的总和], [Measures].[本期发生数 的总和]} ) } ON COLUMNS, NON EMPTY {Hierarchize( { CROSSJOIN({[年月表].[时间].[年]} ,CROSSJOIN({[年月表].[月份].[月份]} ,CROSSJOIN( {[组织架构表].[组织编码].[组织编码]}, CROSSJOIN({[组织架构表].[组织名称].[组织名称]} ,CROSSJOIN({[账簿表].[账簿名称].[账簿名称]} ,CROSSJOIN({[损益视图].[项目名称].[项目名称]} ,{[资产负债视图].[资产项目].[资产项目]}) ) ) ) ) ) } ) } ON ROWS FROM [FinBPCube]
这样年月是独立的两列
如果同时使用时间层次结构里面的年、月,则会发生查询出来的结果会把年、月份都会放到同一列中。
SELECT NON EMPTY {Hierarchize( {[Measures].[年初数 的总和], [Measures].[期末数 的总和], [Measures].[本期发生数 的总和]} ) } ON COLUMNS, NON EMPTY {Hierarchize( { CROSSJOIN({[年月表].[时间].[年], [年月表].[时间].[月份]} ,CROSSJOIN( {[组织架构表].[组织编码].[组织编码]}, CROSSJOIN({[组织架构表].[组织名称].[组织名称]} ,CROSSJOIN({[账簿表].[账簿名称].[账簿名称]} ,CROSSJOIN({[损益视图].[项目名称].[项目名称]} ,{[资产负债视图].[资产项目].[资产项目]}) ) ) ) ) } ) } ON ROWS FROM [FinBPCube]
这样是混合一列