【问题标题】:Filter out a specific member of a dimension hierarchy in MDX query在 MDX 查询中过滤掉维度层次结构的特定成员
【发布时间】:2017-08-28 14:07:35
【问题描述】:

我对 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 报告的结果集,它基本上是用户选择的帐户层次结构中产品维度中所有级别的金额

现在,我想从该集合中排除具有特定名称“排除”的第二级帐户层次结构下的金额。 我已经设法使用交叉连接添加了这个过滤器,除了 - 基于帐户节点的唯一名称:

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

但我想根据显示的名称专门过滤掉,删除以下金额:

[AccountH].CURRENTMEMBER.MEMBER_CAPTION = "Exclude"

如何根据层级节点名称过滤掉?

【问题讨论】:

  • 你试过过滤功能了吗?
  • 是的,两者都是同一个问题,好像我不能在那里指定节点的名称,当我这样做时,节点没有被删除

标签: reporting-services ssas mdx


【解决方案1】:

Where 子句必须够用:

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

【讨论】:

  • AccountH 是一个层次结构,据我所知,我无法仅使用其可见名称来获取“排除”成员
  • 为什么不呢?尝试:从 [Model] 中选择 0 上的 {[AccountH].[AccountH].Members - [AccountH].[AccountH].[Exclude]}
  • select [AccountH].[AccountH].[Exclude] 有效,我有一个同名的成员。但是删除成员不起作用,我已经尝试过您的版本和 .[Lvl2] 规范...
【解决方案2】:

我在一些帮助下弄清楚了,“排除”帐户节点在层次结构中不是唯一的,即使在同一级别(对我来说是 2 级),所以显然用 EXCEPT() 删除它们是行不通的。 但是,这可行:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多