如何仅过滤MDX中的子成员?

时间:2014-05-28 11:32:28

标签: ssas mdx business-intelligence olap

当我运行此mdx查询时,工作正常(从层次结构级别获取子成员):

select {} on columns,
[Dimension].[hierarchy].[level].children on rows
from [Cube]

但是,当我在行上添加一些元组时,不会过滤子元素(显示所有成员):S

select {} on columns,
[Dimension].[hierarchy].[level].children 
* [Dimension2].[hierarchy2].[level2].allmembers on rows
from [Cube]

3 个答案:

答案 0 :(得分:0)

*是一个交叉联接 - 您将获得[Dimension].[hierarchy].[level].children[Dimension2].[hierarchy2].[level2].allmembers的笛卡尔积,因为它们的尺寸不同。

如果它们是来自同一维度的两个层次结构,则自动存在行为将限制结果,例如与2014年划分的2014年应该只显示2014年的月份。

尝试使用DESCENDANTS函数+您可能不需要NULL,因此请尝试NON EMPTY

SELECT
  {} ON COLUMNS,
  NON EMPTY
  DESCENDANTS(
    [Dimension].[hierarchy].[level].[PickAHigherUpMember],
    [Dimension].[hierarchy].[PickTheLevelYouWantToDrillTo]
    ) 
  * 
  [Dimension2].[hierarchy2].[level2].allmembers ON ROWS
FROM [Cube]

答案 1 :(得分:0)

如果查看子项的mdx语言参考,您还可以找到另一个如何使用带有层次结构的函数而不是member_expression的示例。

http://msdn.microsoft.com/en-us/library/ms146018.aspx

但它不适用于层次结构级别。

也许行表达式最初是一个层次结构,您已将其更改为级别表达式。

下面是一个类似的工作mdx,行上有层次结构:

select {} on 0,
[Product].[Model Name].children
*
[Geography].[Country].[All Geographies]
 on 1
FROM [Adventure Works

菲利普,

答案 2 :(得分:0)

我想你只想要那些孩子在默认度量上有值的行。在这种情况下,您可以尝试以下方法:

select {} on columns,
Nonempty([Dimension].[hierarchy].[level].children 
* [Dimension2].[hierarchy2].[level2].allmembers) on rows
from [Cube]

现在,如果对于孩子们,您需要Dimension2中的所有成员,那么您可以尝试:

select {} on columns,
Nonempty([Dimension].[hierarchy].[level].children, [Dimension2].[hierarchy2].[level2].allmembers)
* [Dimension2].[hierarchy2].[level2].allmembers) on rows
from [Cube]

在第二种情况下,Nonempty函数接受第二个参数,并且使用Nonempty函数的结果完成交叉连接。有关Nonmpty的文档,包括第二个参数的用法,请参阅https://docs.microsoft.com/en-us/sql/mdx/nonempty-mdx