繁体   English   中英

SSAS-MDX计算成员

[英]SSAS - MDX calculated member

我有一个事实表,其中详细列出了我组织下达的订单的各个行金额。 事实上,在生产线级别,我已经包括了要使用的总订单金额,因为在某些时候我们可能需要该级别的详细信息。

这是我所拥有的例子:

+------------+------------+---------------+------------+---------------------+
| 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查找“类别”维度。

使用这种结构,我创建了一个简单的多维数据集,并且基本上可以正常运行。

我遇到的问题是,我希望能够查看Total Line_Value金额,并以某种方式在其中包含Total_Booking_Value

因此,例如,我可能将Categories维度添加为过滤器,并想通过Category_FKey = 4进行过滤。

如果是这种情况,我希望聚合告诉我总Line_Value为250(对于BookingKeys 2和4), Total_Booking_Value应该为700。使用常规聚合(即SUM),我得到的Total_Booking_Value为1400 (显然-因为它将为多维数据集返回的两行添加700 * 2)。

因此,按照我的看法,我想创建一个MDX计算,该计算以某种方式采用Total_Booking_Value并仅给出所涉及的Booking的值。

应该使用某种平均值还是除以不同的项目数来完成? 我不知道这个。 我尝试过这样的事情:

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和总预订金额。

然后,这两种措施中的每一个都将很容易被总结。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM