在MDX

时间:2017-05-23 11:13:07

标签: filter ssas 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。)

我还读到有一些解决方法,例如CROSSJOIN WITH AGGREGATE或Sub - SELECT,但我对1)如何合并没有任何线索内在的条件; 2)性能(我听说CROSSJOIN可能很慢)。

我不确定我是否应该在这里提及它,但我实际上是使用ADOMB.Cellset对象从Excel VBA实现MDX。它只给出了我在Cellset.Items(0)下实现的查询总数(没有更多项目)。

谢谢!

1 个答案:

答案 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"
    )
)