在MDX查询中筛选出维度层次结构的特定成员

时间:2017-08-28 14:07:35

标签: reporting-services ssas mdx

我是MDX的新手,我编写了一个基本的MDX查询,它返回一个度量以及我的产品维度的完整层次结构:

SELECT {[Measures].[Amount]} on 0,
{
DESCENDANTS([ProductH].[ProductH], [ProductH].[ProductH].[Lvl4], LEAVES)
}
ON 1
FROM
(
  SELECT 
    {StrToSet('[AccountH].[AccountH].[Lvl1].&[TST17:0]',CONSTRAINED)} ON COLUMNS
  FROM
  (
    SELECT
      {StrToSet('[ProductH].[ProductH].[All]',CONSTRAINED)} ON COLUMNS
    FROM [Model]
  )
)

这将返回我的SSRS报告的结果集,该结果集基本上是用户所选帐户层次结构的产品维度中所有级别的金额

现在,我想从这个集合中排除第二级帐户层次结构中具有特定名称"排除"的金额。 我设法使用crossjoin添加此过滤器,除了 - 基于帐户节点的唯一名称:

[AccountH].[AccountH].[Lvl2].&[TST17:0]&[TST17:1000]

但我想特别根据显示的名称过滤掉,删除金额:

[AccountH].CURRENTMEMBER.MEMBER_CAPTION = "Exclude"

如何根据层次结构节点的名称过滤掉?

2 个答案:

答案 0 :(得分:0)

Where子句必须足够:

select
...
from [Model]
where ({[AccountH].[AccountH].Members - [AccountH].[AccountH].[Exclude]})

答案 1 :(得分:0)

我已经找到了一些帮助,“排除”帐户节点在层次结构中不是唯一的,即使在同一级别(对于我来说也是level2),因此使用EXCEPT()删除它们并不起作用。 但是这有用:

Filter([AccountH].[AccountH].[Lvl2]].Members
      ,[AccountH].[AccountH].CURRENTMEMBER.MEMBER_CAPTION <> "Exclude")

因为它检查名称。但显然过滤功能很慢,所以我使用交叉加入账户*产品,然后删除SSRS报告中的“排除”账户