在 MDX 中添加多个计算过滤器

Add multiple calculating filters in MDX

我真的是 MDX 的新手,但过去两天我一直在寻找答案但没有成功。因此,非常感谢您的帮助和耐心等待。

我正在尝试查询具有多维过滤器的多维数据集,我意识到那里已经有很多类似的问题,比如 this or

事实是,我没有指定我要查找的特定内容,而是尝试设置过滤器来挑选以特定字符串开头的所有记录。这需要过滤器中的 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) 下实施的查询的总计(没有更多项目)。

谢谢!

您需要将两组分成两个过滤器:

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