【问题标题】:How to filter a dimension hierarchy based on another dimension hierarchy in mdx如何根据 mdx 中的另一个维度层次结构过滤维度层次结构
【发布时间】:2015-04-22 14:32:16
【问题描述】:

我有一个发件人和收件人维度,它们是员工物理表之外的角色扮演维度。 我的事实表有发件人、收件人、消息列。 我想从员工那里收到消息,发送给公司中的每个人,除了那些向他的经理报告的人。 我试过这样的东西

WITH 
  SET [Others] AS 
    Except
    (
      Ascendants([Recipient].[Manager])
     ,[Sender].[Manager].Parent
    ) 
SELECT 
  [OTHERS] ON COLUMNS
 ,{[Measures].[Messages]} ON ROWS
FROM [cube]
WHERE 
  [Sender].[Manager].&[xyz];

基本思想是..获取给定发件人的收件人的所有升迁,并过滤其升迁列表由发件人父级组成的那些。

这不起作用,因为除了两个不同的维度层次结构之间我不能这样做。

【问题讨论】:

  • 好的 - 正如你在这种情况下所说的那样 Except 将不起作用。

标签: ssas mdx


【解决方案1】:

尝试通过关键字EXSITING 使Set 更具上下文感知能力,然后使用过滤器比较member_caption

WITH 
  MEMBER [Measures].[SenderName] AS 
    [Sender].CurrentMember.Member_Caption 
  SET [ExistingRecip] AS 
    (EXISTING 
      [Recipient].[Manager].MEMBERS) 
  SET [Others] AS 
    Filter
    (
      [ExistingRecip]
     ,
        [ExistingRecip].Item(
        [ExistingRecip].CurrentOrdinal - 1).Member_Caption
      <> 
        [Measures].[SenderName]
    ) 
SELECT 
  [OTHERS] ON COLUMNS
 ,{[Measures].[Messages]} ON ROWS
FROM [cube]
WHERE 
  [Sender].[Manager].&[xyz];

【讨论】:

  • 它在 100K 员工表和 26M 事实表上工作,但性能超级慢
  • Filter 是一个慢函数 - 我认为它是迭代的,mdx 计算引擎在 block mode 中不起作用。我会尝试考虑不同的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多