我有一个事实表,详细介绍了我组织下的订单的单个行金额。在这个事实中,在线级别上,我包括了要使用的总订单金额,因为我们可能在某个时候需要该级别的细节。
这是我所拥有的示例: -
+------------+------------+---------------+------------+---------------------+
| BookingKey | Booking_ID | Category_FKey | Line_Value | Total_Booking_Value |
+------------+------------+---------------+------------+---------------------+
| 1 | 12 | 8 | 150 | 700 |
| 2 | 12 | 4 | 150 | 700 |
| 3 | 12 | 5 | 300 | 700 |
| 4 | 12 | 4 | 100 | 700 |
+------------+------------+---------------+------------+---------------------+
您可以看到,Total_Booking_Value
这是示例中预订的Line_Value
的总和(booking_id = 12(。
Category_FKey
仰望类别维度。
使用此结构我创建了一个简单的立方体,这主要工作正常。
我遇到的问题是,我希望能够查看总Line_Value
金额,并以某种方式包括Total_Booking_Value
。
所以,例如,我可能会将类别维度添加为过滤器,并想通过 Category_FKey
= 4。
如果是这种情况,我希望聚合会告诉我总LINE_VALUE为250(对于BookingKeys 2和4(,并且Total_Booking_Value
应为700。使用正常聚合(即SUM(Total_Booking_Value
AS 1400(显然 - 因为它为两行添加了700 * 2,该立方体将返回(。
所以,我想创建的MDX计算方式,以某种方式采用Total_Booking_Value
,并给出了有关预订的值。
是否应该使用某种平均数量的平均值或分裂来完成此操作?我无法弄清楚。我尝试了这样的事情: -
create member currentcube.measures.[Calculated Booking Value]
as
[Measures].[Total_Booking_Value] / count(Measures.Booking_ID);
但这不起作用。
希望这是有道理的,您可以将我指向正确的方向。
我觉得奇怪的是,booking_id是一种措施 - 直觉上它使我成为属性,因此是层次结构 - 在这种情况下,您可以像这个:
[Measures].[Total_Booking_Value]
/
COUNT(EXISTING [Booking].[Booking_ID].[Booking_ID].members)
一个简单的解决方案是有两个事实表:一个带有粒度预订键的事实表,一个带有粒度预订ID。第一个将包含除总预订值以外的所有列,第二个将包含列预订ID和总预订值。
然后,这两个措施都可以很容易地总结。
第二个事实表和类别维度之间的参考类型可以通过第一个事实表众多地配置。因此,您会看到每个选定类别的涉及预订的全部值,自动消除双重计数。