如何根据 mdx 中的另一个维度层次结构过滤维度层次结构
Posted
技术标签:
【中文标题】如何根据 mdx 中的另一个维度层次结构过滤维度层次结构【英文标题】:How to filter a dimension hierarchy based on another dimension hierarchy in 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
将不起作用。
【参考方案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
中不起作用。我会尝试考虑不同的方法。以上是关于如何根据 mdx 中的另一个维度层次结构过滤维度层次结构的主要内容,如果未能解决你的问题,请参考以下文章