0

我有一个包含以下行的事实表:

WorkerName、OrderId、NumberOfPackagesPerOrder

请注意,在此事实表中, WorkerNameOrderId都不是唯一的。多个用户可以在单个 OrderId 上工作 另请注意,NumberOfPackagesPerOrder仅取决于OrderId,即对于每个OrderIdNumberOfPackagesPerOrder的数量将是相同的。

我正在尝试构建一个多维数据集,以按员工层次结构从这些数据中报告层次结构报告:

ManagerLevel1 [完成的订单总数] [运送的包裹总数]
    经理级2
      ......
        经理级别N
                  工人

由于多个工作人员可以处理同一个订单,因此我需要避免对经理级别(非叶节点)重复计算 PackagesPerOrder

管理器层次结构是递归定义的,即它不是静态的。

经理也可以运送包裹。

这个怎么做?我需要什么 MDX 脚本才能正确地对 NumberOfPackagesPerOrder 进行求和,仅在通过 OrderId 对这些进行 DISTINC 之后才对它们进行求和?

4

1 回答 1

2

最简单的方法是完全不使用 MDX 脚本,而是实现多对多关系。根据您的描述,我无法完整描述必要的内容,但我模拟了一个示例并获得了正确的值。正如您所描述的那样,我有一个工作人员维度,它与经理建立了层次关系 - 使用父子结构。我有一个包含工人、订单 ID 和包裹数量的事实表。在最后一种情况下,包的数量并不是真正需要的——它应该被忽略。我添加了第二个事实表,以便为订单 ID 和包裹数量提供不同的值。

然后在 SSAS 项目中,我有两个维度 - 一个用于工人,一个用于订单 ID。

然后我创建一个包含两个度量组的多维数据集——每个事实表一个。具有工人和订单 ID 的可以使用包裹数或行数 - 没关系,但需要隐藏度量。它只是用作多对多的中间事实表。

然后,具有不同订单 ID 和包数的事实表是第二个度量值组。您可以添加订单计数并将包裹数用作此度量组中的两个单独度量。

在维度使用选项卡上,Worker 和 Order ID 与中间事实表(该事实表中的 worker 和 order ID 列)有关系。订单 ID 还与带有订单 ID 和包裹数量的事实表有规律的关系。Worker 使用另一个事实表作为中间度量值组,与该事实表(具有唯一订单 ID 的表)具有多对多关系。

当您以这种方式进行设置时,您的订单计数和包裹数量将由工作人员和经理在层次结构的所有级别正确汇总。不需要 MDX。

于 2012-06-11T17:29:31.080 回答