Ssas 用LINKMEMBER优化MDX计算测度
我有两种报告(发送报告和接收报告)和两个角色扮演维度(发送者和接收者)。我正试图通过一个组织的发送者/接收者来比较每个报告中的金额 我目前的查询是:Ssas 用LINKMEMBER优化MDX计算测度,ssas,mdx,cube,Ssas,Mdx,Cube,我有两种报告(发送报告和接收报告)和两个角色扮演维度(发送者和接收者)。我正试图通过一个组织的发送者/接收者来比较每个报告中的金额 我目前的查询是: with member [Measures].[SentAmount] as ( [Receiver].[Code].&[XXX],[Measures].[Sent] ) member [Measures].[ReceivedAmount_Temp] as ( [Sender].[Code].&[XXX],
with member [Measures].[SentAmount] as ( [Receiver].[Code].&[XXX],[Measures].[Sent] )
member [Measures].[ReceivedAmount_Temp] as
(
[Sender].[Code].&[XXX],
[Measures].[Received]
)
member [Measures].[ReceivedAmount] as
(
LINKMEMBER
(
[Sender].[Code].CURRENTMEMBER,[Receiver].[Code]
),
root([Sender]),
[Measures].[ReceivedAmount_Temp]
)
SELECT
{
[Measures].[SentAmount],
[Measures].[ReceivedAmount]
} ON COLUMNS,
NON EMPTY
{ (
[Sender].[Code].[Code].ALLMEMBERS
*[Sender].[Name].[Name].ALLMEMBERS
)} FROM MyCube
结果是正确的,但执行时间很长。特别是在真实的查询中,我有15-20个度量
是否可以以任何方式优化此查询?这不是一个完整的解决方案,而是一种方法:使用“角色扮演事实表”怎么样:您将拥有两个事实表副本,分别命名为“已发送”和“已接收”。两者都将引用相同的维度“Customer”(作为接收方来自接收的事实表,作为发送方来自发送的事实表)。另一方(接收事实的发送方和发送事实的接收方)也将引用customer表,这次使用角色扮演维度 从技术上讲,您可以通过DSV中的视图或命名查询来实现这一点,因为BIDS GUI不允许对两个度量值组使用一个事实表
这样做的好处是,您的查询不需要任何计算出的度量,这可能是性能不佳的主要原因。这不是一个完整的解决方案,而是一种方法:使用“角色扮演事实表”怎么样:您将有两个事实表副本,分别命名为“发送”和“接收”。两者都将引用相同的维度“Customer”(作为接收方来自接收的事实表,作为发送方来自发送的事实表)。另一方(接收事实的发送方和发送事实的接收方)也将引用customer表,这次使用角色扮演维度 从技术上讲,您可以通过DSV中的视图或命名查询来实现这一点,因为BIDS GUI不允许对两个度量值组使用一个事实表 这样做的好处是,查询不需要任何计算出的度量值,这可能是性能不佳的主要原因。尝试将root()函数替换为显式[All]成员。出于一个奇怪的原因,当我在计算的度量值上尝试LinkedMember()函数时,root()的工作速度非常慢 希望这对你也有帮助 尝试替换显式[All]成员的root()函数。出于一个奇怪的原因,当我在计算的度量值上尝试LinkedMember()函数时,root()的工作速度非常慢
希望这对你也有帮助 您可以更改多维数据集,或者这必须是对现有多维数据集的MDX的优化吗?最好不要更改现有多维数据集。但若MDX的优化是不可能的,我可以进行更改。不幸的是,我仍然找不到任何解决方案。我非常感谢您的帮助。您可以更改多维数据集吗?或者这必须是对现有多维数据集的MDX进行优化吗?最好不要更改现有多维数据集。但若MDX的优化是不可能的,我可以进行更改。不幸的是,我仍然找不到任何解决方案。我将非常感谢任何帮助。看起来这是一个很好的简单的解决方案。我一定要试试这个。不好的是,这个查询中使用的4个事实表中有3个非常大,需要很长时间来处理。看起来是一个很好的简单解决方案。我一定要试试这个。不好的是,此查询中使用的4个事实表中有3个非常大,处理时间很长。