层次结构

 

如图,在年月表中创建了层次结构

当需要实现传统的年、月、按列查询的时候,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]

这样是混合一列

 

 

SSAS系列随笔

posted on 2019-03-24 18:16  Neo0820  阅读(656)  评论(0编辑  收藏  举报

导航