我是 mdx 新手。
有没有办法像我们在 MySQL 中使用 LIKE '%iphone' AND LIKE '%samsung' 那样使用 MDX 搜索并返回两个关键字的匹配项?
我的 MDXcode 是:
SELECT
NON EMPTY {[Measures].[Average Price]} ON COLUMNS,
Filter({[Product Names].MEMBERS},
[Product Name].CurrentMember.Name MATCHES '(?i)apple.*' or [Product Name].CurrentMember.Name MATCHES '(?i)screen.*') ON ROWS
FROM [Price History]
在我的代码中,可以满足任何搜索条件,但我希望这两个条件都得到满足。
请问有什么办法吗?
最佳答案
MDX
没有 LIKE
运算符,但是您可以使用 InStr
函数来检查关键字是否属于名字。
with member measures.iPhoneInName as
VBA!InStr([Product Name].CurrentMember.Name, "iPhone")
member measures.SamsungInName as
VBA!InStr([Product Name].CurrentMember.Name, "Samsung")
SELECT
NON EMPTY {[Measures].[Average Price]}
ON COLUMNS,
[Product Names].MEMBERS
HAVING
measures.iPhoneInName >= 1
OR
measures.SamsungInName >= 1
ON ROWS
FROM [Price History]
编辑:
如果您只想要那些名称以 iPhone
或 Samsung
结尾的成员,那么在代码中添加一个小部分:
(
VBA!InStr([Product Name].CurrentMember.Name) + len("Samsung") + 1
= LEN([Product Name].CurrentMember.Name)
AND measures.SamsungInName >= 1
)
OR
(
VBA!InStr([Product Name].CurrentMember.Name) + len("iPhone") + 1
= LEN([Product Name].CurrentMember.Name)
AND measures.iPhoneInName >= 1
)
蒙德里安版
with member measures.iPhoneInName as
VBA!InStr([Product Name].CurrentMember.Name, "iPhone")
member measures.SamsungInName as
VBA!InStr([Product Name].CurrentMember.Name, "Samsung")
SELECT
NON EMPTY {[Measures].[Average Price]}
ON COLUMNS,
FILTER
(
[Product Names].MEMBERS,
(
VBA!InStr([Product Name].CurrentMember.Name) + len("Samsung") + 1
= LEN([Product Name].CurrentMember.Name)
AND measures.SamsungInName >= 1
)
OR
(
VBA!InStr([Product Name].CurrentMember.Name) + len("iPhone") + 1
= LEN([Product Name].CurrentMember.Name)
AND measures.iPhoneInName >= 1
)
)
ON ROWS
FROM [Price History]
关于mdx - 如何在 MDX 中使用从两个关键字返回匹配项的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34179850/