如何将带有子选择的 SQL 查询转换为 MDX 查询?

Posted

技术标签:

【中文标题】如何将带有子选择的 SQL 查询转换为 MDX 查询?【英文标题】:How to transform a SQL query with subselects into an MDX query? 【发布时间】:2016-09-13 11:08:10 【问题描述】:

我有一个名为“tableOne”的数据库表。桌子与立方体相连。

以下 SQL 选择查询

select row_id, row_group_id, col_group_id, measure_col from tableOne where 
(row_group_id in (select row_group_id from tableOne a where row_id in ('R0020', 'R0030') and col_id = 'C0050')
or col_group_id in (select col_group_id from tableOne a where row_id in ('R0020', 'R0030') and col_id ='C0050'));

必须转换为 MDX 查询。

请注意:

row_id、col_id、row_group_id 和 col_group_id 列是 尺寸。 measure_col 列是一个度量值。

我使用的是 Mondrian,不知道如何将 subselect 转换为 MDX 查询。

编辑:

这是我目前得到的:

SELECT

 [Measures].[measure_col]

ON COLUMNS,
non empty(
 CrossJoin([ROW].[ROW].Members
,CrossJoin([COL_GROUP].[COL_GROUP].Members
,[ROW_GROUP].[ROW_GROUP].Members
)))
ON ROWS
FROM [tableOne]
WHERE (
[COL].[COL].[C0050]
) 

除了我已经告诉过你的以外,无法告诉你有关立方体的任何其他信息。

【问题讨论】:

如果有人标记了一个问题 C# 并粘贴了一个 Java 并说“我需要 C# 中的这个 Java 代码”,他们会被大量否决。你有任何你尝试过的mdx吗?你能更详细地告诉我们你的立方体的尺寸吗? 嗨,更新了问题。 【参考方案1】:

首先我建议你将你的 SQL 改写成这样:

select row_id, row_group_id, col_group_id, measure_col 
from tableOne a
where 
    exists(
        select *
        from tableOne b
        where
            row_id in ('R0020', 'R0030') and 
            col_id = 'C0050' and
            (
                a.row_group_id = b.row_group_id OR
                a.col_group_id = b.col_group_id
            )
)

它应该从您的计划中删除一次扫描。现在是 MDX 部分。

如果您想在计算度量中使用它,最好在 SQL 中执行此操作。

不确定此 MDX 是否会返回您想要的输出。

WITH
SET mySet
AS
NONEMPTY (
    (
        [COL_GROUP].[COL_GROUP].Members,
        [ROW_GROUP].[ROW_GROUP].Members
    ),
    (
        [ROW].[ROW].[R0020],[ROW].[ROW].[R0030],
        [COL].[COL].[C0050],
        [Measures].[measure_col]
    )

)
SELECT
    
     [Measures].[measure_col]
    
    ON COLUMNS,
    NON EMPTY
    CROSSJOIN(
        [ROW].[ROW].MEMBERS,
        mySet
    )
    ON ROWS
FROM [tableOne]

mySet 应该为您提供COL_GROUPROW_GROUP 的所有组合,它们具有ROW R0020 和R0030 和COL C0050 的值。

【讨论】:

以上是关于如何将带有子选择的 SQL 查询转换为 MDX 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MDX 查询中的行的集合转换为单个值?

如何将带有子查询的 MySQL select 语句转换为同一张表的更新语句?

如何将带有内连接的 sql 查询转换为 linq lambda 表达式?

如何将选择 sql 查询的结果转换为 ms 访问中的新表

MDX:如何将具有多个成员的元组转换为具有单个成员的元组?

如何将带有内连接语句的 Sql 查询转换为带有 Where 语句的 sql 查询(语句中没有内连接)