2017-05-23 140 views
0

我真的很新的MDX,但我花了两天来寻找一个答案,但失败了。所以我非常感谢您的帮助和耐心。添加多个计算过滤器MDX

我试图用多个维度上的过滤器来查询多维数据集,并且我意识到已经存在许多类似的问题,例如thisthis

的事情是不是指定我找的,我试图建立拾取以特定字符串开头的所有记录过滤特定的内容。这需要在滤波器中使用left函数(即计算滤波器?),但我无法将它们很好地融入代码中。

我的失败代码是这样的(两个过滤器应该在AND关系)

Select Non Empty ([Measures].[Sales]) ON 0 
FROM [Cube_Name] 
WHERE 
(
FILTER 
(
[Customer].[CustomerID].Members, Left([Customer].[CustomerID].CurrentMember.Name,4)="ABCD"), 
[Product].[ProductID].Members, Left([Product].[ProductID].CurrentMember.Name,3)="EFG") 
) 
) 

(我的审判是根据最后的答案here。)

我也看了,有一些解决方法就像CROSSJOINWITHAGGREGATE或子SELECT,但我只是没有在1任何线索)如何把里面的条件; 2)表现(听说CROSSJOIN可以慢)。

我不知道我是否应该在这里提到它,但我实际使用ADOMB.Cellset对象实现从Excel VBA的MDX。它只是给了我总计我Cellset.Items(0)下执行的查询(没有更多的项目)。

谢谢!

回答

0

你需要两套分成两个过滤器:

Select 
Non Empty [Measures].[Sales] on 0 
From [Cube_Name] 
Where 
(
    Filter(
     [Customer].[CustomerID].[CustomerID].Members, 
     Left(
      [Customer].[CustomerID].CurrentMember.Name, 
      4 
     ) = "ABCD" 
    ), 
    Filter(
     [Product].[ProductID].[ProductID].Members, 
     Left(
      [Product].[ProductID].CurrentMember.Name, 
      3 
     ) = "EFG" 
    ) 
) 
+0

谢谢Danylo!你的代码完美无缺!你介意告诉我关于如何在过滤器中加入OR子句的更多事情吗? 我尝试修改所述第二过滤器进入 '筛选( [产品]。[产品id]。[产品id] .Members, 左( [产品]。[产品id] .CurrentMember.Name,) =“EFG”OR Left( [Product]。[ProductID] .CurrentMember.Name,)=“HIJ” )' 但它不起作用。谢谢! – Aster37a

+0

对不起,OR连接起作用。这只是我输入错误信息中的一个错误。但是再次感谢您的及时和准确的回应! – Aster37a

+0

很高兴知道,不要忘记标记答案。 –