SSAS - MDX计算成员

时间:2018-02-06 13:25:14

标签: sql-server ssas mdx cube

我的事实表详细说明了我的组织下达的订单的单行金额。在这个事实中,在行级别,我已经包含了要使用的总订单金额,因为在某些时候我们可能需要该级别的详细信息。

以下是我所得到的一个例子: -

+------------+------------+---------------+------------+---------------------+
| 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作为1400(显然 - 因为它为多维数据集返回的两行添加了700 * 2)。

所以,我看到它的方式我想创建一个MDX计算,以某种方式取Total_Booking_Value并仅给出有问题的预订值。

是否应该使用某种平均值,或按不同数量的项目进行划分?我无法解决这个问题。我试过这样的事情: -

create member currentcube.measures.[Calculated Booking Value]
as
[Measures].[Total_Booking_Value] / count(Measures.Booking_ID);

但这不起作用。

希望这是有道理的,你可以指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

我觉得奇怪的是,booking_ID是一种衡量标准 - 直觉上它让我觉得它是一种属性,因此是一种层次结构 - 在这种情况下,你能够像这样计算:

[Measures].[Total_Booking_Value] 
/ 
COUNT(EXISTING [Booking].[Booking_ID].[Booking_ID].members)

答案 1 :(得分:0)

一个简单的解决方案是拥有两个事实表:一个具有粒度预订密钥,另一个具有粒度预订ID。第一个包含除预订总值以外的所有列,第二个包含预订ID和预订总值的列。

然后,每个措施都很容易相加。

第二个事实表和类别维度之间的引用类型可以通过第一个事实表配置为多对多。因此,您将看到每个所选类别的相关预订的完整值,自动消除重复计算。