过滤后代的MDX后代

时间:2017-06-29 19:33:05

标签: sql-server ssas mdx

我是MDX和Cubes的新手。

我需要使用具有特定属性的给定成员的后代的后代来切割数据。

DIM1是一个维度,其中Parent是其父子层次结构,它具有属性Attr1。

给出以下父树。必须使用成员601,711,712和811进行切片。如果他们的父母被退回是好的,那么测量数据只存在于叶级别。

  Id | Parent | Attr1
   1 |        |   1
   2 |     1  |   3
 501 |     2  |   5
 601 |    501 |  11
 701 |    501 |  11
 711 |    701 |  15
 712 |    701 |  16
 810 |    501 |   7
 811 |    810 |  11

我收到错误" DESCENDANTS函数需要1个参数的单个层次结构的成员或集合。传递了一组多个层次结构。" 在尝试时

WHERE 
  DESCENDANTS ( 
     { { DESCENDANTS ( [DIM1].[PARENT].&[501].CHILDREN ) } * { [DIM1].[Attr1].&[11] } } 
)

2 个答案:

答案 0 :(得分:0)

您可以尝试使用from子句的子查询而不是where条件。

e.g。

SELECT 
  NON EMPTY { [Measures].[Sale Amt] } ON COLUMNS, 
  NON EMPTY  {[Dim1].[Attr].children} * {[Dim1].[Parent].children } on rows 
from 
(
  SELECT ( { [Dim1].[ParentH].[Parent].&[501], [Dim1].[ParentH].[Parent].&[501].children} ) ON COLUMNS 
  FROM [DBSF Test]
)

答案 1 :(得分:0)

目前你在外部DESCENDANTS函数中有一个交叉连接 - 所以这将创建一组多个层次结构元组 - 因此是例外。如果你将交叉连接移到外面,它仍然是错误的吗?

WHERE 
  DESCENDANTS ( 
     DESCENDANTS ( 
       [DIM1].[PARENT].&[501].CHILDREN 
     ) 
  ) * { [DIM1].[Attr1].&[11] }