如何将带有子选择的 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_GROUP
和ROW_GROUP
的所有组合,它们具有ROW
R0020 和R0030 和COL
C0050 的值。
【讨论】:
以上是关于如何将带有子选择的 SQL 查询转换为 MDX 查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有子查询的 MySQL select 语句转换为同一张表的更新语句?