查询使用MDX仅从SSAS多维数据集返回叶节点

问题描述 投票:3回答:2

我需要将结果叶节点的父级别列出到它们对应的列中的一行。

以下查询返回预期结果

  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

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

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

ssas mdx olap-cube mdx-query
2个回答
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
投票

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

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] 
© www.soinside.com 2019 - 2024. All rights reserved.