2014-10-29 88 views
0

使用Adventureworks DW 2008多維數據集我試圖構建MDX查詢,該查詢將返回沒有訂單的特定原因代碼的網絡訂單數。SSAS MDX用於多對多關係

FactInternetSales與FactInternetSalesReason具有多對多關係。每筆銷售都有一個或多個原因代碼。

如果我嘗試返回未使用「On Promotion」原因的訂單,我仍然會收到計數中包含的促銷訂單,因爲他們也有其他原因。

如何寫MDX來說,如果這個訂單有這個原因,不要將其包含在計數中,而不考慮任何其他原因?

對冒險的等效SQL工作SQL數據倉庫是:

select count(distinct salesordernumber) from FactInternetSales 
where not exists (select salesorderNumber 
        from FactInternetSalesReason 
        where SalesReasonKey = 2 
        and FactInternetSales.SalesOrderNumber = FactInternetSalesReason.SalesOrderNumber 
       ) 

回答

1

這是互聯網訂購數:

SELECT 
    { 
    [Measures].[Internet Order Count] 
    } ON 0 
FROM [Adventure Works]; 

這是互聯網秩序與關於促進排除字數:

SELECT 
    { 
    [Measures].[Internet Order Count] 
    } ON 0 
FROM [Adventure Works] 
WHERE 
    Except 
    (
    [Sales Reason].[Sales Reason].[Sales Reason] 
    ,[Sales Reason].[Sales Reason].[On Promotion] 
); 

以下內容將這些排除事項轉化爲具體措施:

WITH 
    MEMBER [Measures].[Internet Order Count OnPromotion] AS 
    (
     [Measures].[Internet Order Count] 
    ,[Sales Reason].[Sales Reason].[On Promotion] 
    ) 
    MEMBER [Measures].[Internet Order Count excl OnPromotion] AS 
     [Measures].[Internet Order Count] 
    - 
     [Measures].[Internet Order Count OnPromotion] 
SELECT 
    {[Date].[Calendar].[(All)]} ON 0 
,{ 
    [Measures].[Internet Order Count] 
    ,[Measures].[Internet Order Count OnPromotion] 
    ,[Measures].[Internet Order Count excl OnPromotion] 
    } ON 1 
FROM [Adventure Works]; 
+0

謝謝。這是冒險工程立方體,但它不適用於我的立方體。我的立方體上必須打破某些東西。回到繪圖板。 :) – Mike 2014-10-31 17:39:07

+0

當我查看更接近的數字時,第二個查詢返回21,197從AW立方體的排除On促銷的訂單,但您的第三個查詢使用計算的度量返回On Promotion Excluded orders as 24,144。所以現在我試圖找出造成這種差異的原因 – Mike 2014-10-31 17:48:47