查询仅使用MDX

时间:2017-12-14 21:57:32

标签: ssas mdx olap-cube mdx-query

我需要将结果叶节点的父级别列入其对应的列中。

以下查询返回预期结果

  SELECT NON EMPTY { [Measures].[Value] } ON COLUMNS, 
    NON EMPTY { ([Account].[Account List].[Account List].ALLMEMBERS ) } 
        DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS FROM [My Cube]

这会返回格式

的结果
My Child | 1234

但我正在寻找类似于

的东西
Parent 5| Parent 4| Parent 3| My Child| 1234

基本上我需要叶节点

所以我尝试了下面的查询,它确实返回了叶子,但它也包括它的父母,我也不感兴趣。

 SELECT NON EMPTY { [Measures].[Value] } ON COLUMNS, 
    NON EMPTY { (DESCENDANTS([Account].[Account].[Level 02].ALLMEMBERS) ) } 
        DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS FROM [My Cube] 

上面的结果返回格式为

的结果
> Parent 5| Null| Null| Null| 1
> Parent 5| Parent 4| Null| Null| 12
> Parent 5| Parent 4| Parent 3| Null| 123
> Parent 5| Parent 4| Parent 3|My Child| 1234

从上面的结果我只需要最后一行。当然,一种解决方案是将其写入表并过滤掉" null行"。但是,有没有更好的方法来获得叶子?

只是fyi,我们的解决方案是使用SSIS使用MDX查询Olap并将其提取到二维表。

2 个答案:

答案 0 :(得分:3)

LEAVES函数中的以下DESCENDANTS参数将执行您想要的操作。此功能的文档为here

SELECT NON EMPTY { [Measures].[Value] } ON COLUMNS, 
    NON EMPTY { DESCENDANTS([Account].[Account].[Level 02].ALLMEMBERS, , LEAVES) } 
        DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS FROM [My Cube] 

答案 1 :(得分:1)

我不确定你到底要做的是什么。如果要仅返回叶子的值,请尝试以下操作:

With 
Member [Measures].[ValueLeaf] as
IIF(IsLeaf([Account].[Accounts].CurrentMember),[Measures].[Value],Null)

Select 
Non Empty [Measures].[ValueLeaf] on 0, 
Non Empty Descendants([Account].[Account].[Level 02].ALLMEMBERS) DIMENSION PROPERTIES MEMBER_CAPTION on 1 
From [My Cube]