非叶级节点的自定义聚合以避免重复计算

use*_*883 5 sql-server ssas sql-server-2008-r2 mdx

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

WorkerName 
OrderId
NumberOfPackagesPerOrder
Run Code Online (Sandbox Code Playgroud)

请注意,在此事实表中既不是WorkerName也不OrderId是唯一的。多个用户可以处理单个 OrderId 还要注意,NumberOfPackagesPerOrder仅取决于OrderId,即对于每个OrderId,数量NumberOfPackagesPerOrder将相同。

我正在尝试构建一个多维数据集,以按员工层次结构报告来自此数据的分层报告:

ManagerLevel1           [Total orders completed] [Total Packages Shipped]
    Managerlevel2
        .....
        ManagerLevelN
                  Worker
Run Code Online (Sandbox Code Playgroud)

由于多个工作人员可以按相同的顺序工作,因此我需要避免PackagesPerOrder对经理级别(非叶节点)进行重复计算 。

这该怎么做?我需要什么 MDX 脚本才能正确地SUM NumberOfPackagesPerOrder将它们相加,然后将DISTINCT它们添加到OrderId

注 1 - 雇佣层次结构是递归定义的 - 级别不是静态的。
注意 2 - 非叶节点上的管理器也可能会运送包。

use*_*883 0

解决该问题的正确方法是在 SSAS 中使用多对多关系。

更多详细信息请参见/sf/ask/768011541/和此处http://www.sqlbi.com/wp-内容/上传/The_Many-to-Many_Revolution_2.0.pdf

那么就不需要MDX了。