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

Getting Order Cost from Order Line in MDX

在我的多维数据集中,我有一个 Fact Order Line,它有变量 Order Cost。当然,此变量对于每个订单都是唯一的,并且在一个订单的每个订单行中具有相同的值。

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

所以,使用计算成员this

+-------------------+--------------+------------+            
| Order Line Number | Order Number | Order Line |
|                   |              | Order Cost |
+-------------------+--------------+------------+
|                10 |            1 | [=10=].20      |
|                11 |            1 | [=10=].20      |
|                20 |            2 | [=10=].25      |
+-------------------+--------------+------------+

必须变成这样

+--------------+------------+
| Order Number | Order Cost |
+--------------+------------+
|            1 | [=11=].20      |
|            2 | [=11=].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]

请尝试以下操作:

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