如何在MDX中使用从两个关键字返回匹配项的搜索

如何在MDX中使用从两个关键字返回匹配项的搜索,mdx,pentaho,olap,olap-cube,mondrian,Mdx,Pentaho,Olap,Olap Cube,Mondrian,我是mdx新手 是否有任何方法可以使用MDX从两个关键字中搜索和返回匹配项,就像我们在MySQL中使用的“%iphone”和“%samsung”一样 我的MDXcode是: SELECT NON EMPTY {[Measures].[Average Price]} ON COLUMNS, Filter({[Product Names].MEMBERS}, [Product Name].CurrentMember.Name MATCHES '(?i)apple.*' or [Product Nam

我是mdx新手

是否有任何方法可以使用MDX从两个关键字中搜索和返回匹配项,就像我们在MySQL中使用的“%iphone”和“%samsung”一样

我的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]

您好,谢谢您的回复,我尝试了您的代码,但它显示:MondrianException:Mondrian错误:第11行第1列的语法错误,标记'HAVING'So
Mondrian
没有
HAVING
子句!等等,我会再加一种味道。@MidhunKrishna-补充道。请检查。@SouravA-Hi,谢谢您的编辑,我再试了一次,但仍然显示MondrianException:Mondrian错误:没有函数与签名“InStr()”匹配。这里的错误是什么,我不明白。从您的问题来看,您只需要在
过滤器
条件下用
替换