簡體   English   中英

如何將帶有子選擇的SQL查詢轉換為MDX查詢?

[英]How to transform a SQL query with subselects into an MDX query?

我有一個名為“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,我不知道如何將子選擇轉換為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]
) 

除了我已經告訴你的內容之外,不能告訴你關於立方體的任何其他信息。

首先,我建議你將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的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM