从MDX中的订单行获取订单成本

问题描述:

在我的立方体中,我有一个事实订单行,其变量为订单成本。这个变量当然是每个订单唯一的,并且在订单的每个订单行中具有相同的值。从MDX中的订单行获取订单成本

现在我想创建一个总计订单成本的计算字段,但每个订单只取这个值一次。

所以,使用计算出的构件此

+-------------------+--------------+------------+    
| Order Line Number | Order Number | Order Line | 
|     |    | Order Cost | 
+-------------------+--------------+------------+ 
|    10 |   1 | $0.20  | 
|    11 |   1 | $0.20  | 
|    20 |   2 | $0.25  | 
+-------------------+--------------+------------+ 

有可能成为该

+--------------+------------+ 
| Order Number | Order Cost | 
+--------------+------------+ 
|   1 | $0.20  | 
|   2 | $0.25  | 
+--------------+------------+ 

MDX表达式我现在有(见下文),求和通过顺序线,使得订单成本订单编号1为0.40美元。

SUM( 
    DISTINCT( 
     CROSSJOIN(
      [Order Line Details].[Order Number].[All].Children, [Measures].[Order Line Order Cost] 
     ) 
    ) 
) 

我需要更改以获得所需的行为?

请让我知道,如果有什么不清楚的问题。

解决方案

好吧,我发现这个问题。我将聚集行为从[Measures]。[Order Line Order Cost]改为min。之后,你的初始解决方案工作。谢谢您的帮助!

以下是否有效?我摆脱了不必要的crossjoin,并将distinct函数放在[Order Line Details].[Order Number].Children上,并使用SUM函数将Order Line Order Cost与订单号码相加。

SUM(
    DISTINCT([Order Line Details].[Order Number].Children) 
    , [Measures].[Order Line Order Cost] 
    ) 

编辑 试试下面的代码:

WITH 
SET DistinctOrderNumbers AS 
DISTINCT(EXISTING [Order Line Details].[Order Number].Children) 

MEMBER [Measures].[Order Cost] AS 
SUM(DistinctOrderNumbers, [Measures].[Order Line Order Cost]) 

SELECT NON EMPTY { [Measures].[Order Cost] } ON COLUMNS, 
NON EMPTY { ([Reseller].[Reseller].[Reseller].ALLMEMBERS) } ON ROWS 
FROM [BI Cube] 

EDIT2(不平均之和)

WITH 
SET DistinctOrderNumbers AS 
DISTINCT(EXISTING [Order Line Details].[Order Number].Children) 

MEMBER [Measures].[Order Cost] AS 
AVG(DistinctOrderNumbers, [Measures].[Order Line Order Cost]) 

SELECT NON EMPTY { [Measures].[Order Cost] } ON COLUMNS, 
NON EMPTY { ([Reseller].[Reseller].[Reseller].ALLMEMBERS) } ON ROWS 
FROM [BI Cube] 
+0

不,它仍将所有订单行上的[订单行订单成本]相加。 – Raymond 2015-03-31 14:07:25

+0

什么是您使用的整个MDX查询? – SouravA 2015-03-31 14:15:07

+0

'WITH MEMBER [Measures]。[Order Cost] AS SUM(DISTINCT([Order Line Details]。[Order Number] .Children),[Measures]。[Order Line Order Cost]) SELECT \t NON EMPTY { ([Reseller]。[Reseller]。[Reseller] .ALLMEMBERS)} ON ROWS \t FROM [BI Cube]' – Raymond 2015-03-31 14:48:20

请尝试以下:

MIN( 
    [Order Line Details].[Order Number].[All].Children 
    ,[Measures].[Order Line Order Cost] 
    )