从 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]
)
在我的多维数据集中,我有一个 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]
)