我真的很喜欢MDX,但我过去两天都在寻找答案但却失败了。所以我非常感谢你的帮助和耐心。
我正在尝试使用多维度的过滤器查询多维数据集,并且我意识到已经存在许多类似的问题,例如this或this。
问题是,我正在尝试设置过滤器来获取以特定字符串开头的所有记录,而不是指定我要查找的特定内容。这需要过滤器中的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)
下实现的查询总数(没有更多项目)。
谢谢!
答案 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"
)
)