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

标签 mdx pentaho olap olap-cube mondrian

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

编辑: 如果您只想要那些名称以 iPhoneSamsung 结尾的成员,那么在代码中添加一个小部分:

(
    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/

相关文章:

database - 如何使用 MDX 查询检索内部节点的数据集?

sum - MDX 对一维层次结构中的所有值求和

filter - MDX:根据属性过滤维度

java - 无法连接 Windows 10 上安装的 Pentaho PDI 中的步骤

sql-server - 从头开始构建 OLAP 解决方案时应该注意什么?

postgresql - 在聚合数据和记录级数据之间快速移动

sql-server - mdx 层次结构 XXX 已出现在 axis0 轴中

mysql - Pentaho MySQL 8 连接错误 Driver class 'org.gjt.mm.mysql.Driver' could not be found

mysql - 无法将检查点信息写入日志表

python - 使用 Python 连接到 Power BI XMLA 端点