2014-10-29 48 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