Filter 用MDX进行子选择
欢迎来到我们的社区 我最近开始在SSAS2008中构建OLAP多维数据集,但遇到了问题。如果有人能至少为我指出正确的方向,我将不胜感激 情境:两个事实表,同一个立方体。FactCalls保存有关订阅者呼叫的信息,FactTopups保存topup数据。两个表都有许多公共维度,其中一个是订户维度 FactCallsFactTopupsFilter 用MDX进行子选择,filter,ssas,mdx,exists,subquery,Filter,Ssas,Mdx,Exists,Subquery,欢迎来到我们的社区 我最近开始在SSAS2008中构建OLAP多维数据集,但遇到了问题。如果有人能至少为我指出正确的方向,我将不胜感激 情境:两个事实表,同一个立方体。FactCalls保存有关订阅者呼叫的信息,FactTopups保存topup数据。两个表都有许多公共维度,其中一个是订户维度 FactCallsFactTopups subscriberkey subscriberkey CallDurationDateKey CallCostTopup值 我试图实现的是能够根据过去7天内已加
subscriberkey subscriberkey
CallDurationDateKey
CallCostTopup值 我试图实现的是能够根据过去7天内已加满帐户的不同订户构建FactCalls报告 我基本上是在寻找与SQL等价的MDX:
select *
from FactCalls
where SubscriberKey in
( select distinct SubscriberKey from FactTopups where ... );
我已尝试为包含SubscriberKey和doing的两个表创建退化维度:
Exist(
[Calls Degenerate].[Subscriber Key].Children,
[Topups Degenerate].[Subscriber Key].Children
)
没有成功
亲切问候,
文斯你知道有时候最简单、最明显的解决方案不知怎的让你难以捉摸吗?这显然是其中之一。他们说“MDX不是SQL”,我现在知道他们的意思了。我一直从完全SQL的角度来研究这个问题,完全忽略了filter命令的明显用法
with set [OnlyThoseWithTopupsInMarch2010] as
filter(
[Subscriber].[Subscriber Key].Children,
( [Measures].[Topups Count],
[Topup Date].[Calendar].[Month Name].&[2010]&[3] ) > 0
)
select non empty{
[Measures].[Count],
[Measures].[Cost],
[Measures].[Topup Value]
} on columns,
non empty{ [Test] } on rows
from [Calls] ;
令人尴尬的简单 您可能会发现下面这样的功能会更好。过滤器方法将被强制遍历每个订阅服务器,而NonEmpty()函数可以利用存储引擎中的优化
select non empty{
[Measures].[Count],
[Measures].[Cost],
[Measures].[Topup Value]
} on columns,
{
NonEmtpy( [Subscriber].[Subscriber Key].Children,
( [Measures].[Topups Count],
[Topup Date].[Calendar].[Month Name].&[2010]&[3] ) )
} on rows
from [Calls] ;