MDX MEDIAN() 函数结果不正确

MDX MEDIAN() Function Incorrect Results

我正在尝试实现一个数据立方体,借此我可以显示给定维度集的度量的平均值和中位数。使用 AdventureWorksDW 的基本示例:

WITH
    MEMBER [Measures].[Median Qty] AS
     MEDIAN ( [Product].[Product Categories].siblings, [Measures].[Reseller Sales-Order Quantity])
    MEMBER [Measures].[avgOrderSize] AS
    CASE
        WHEN [Measures].[Reseller Sales Count] = 0 THEN NULL
        ELSE ([Measures].[Reseller Sales-Order Quantity]  / [Measures].[Reseller Sales Count])
    END

SELECT {[Measures].[Reseller Sales-Order Quantity], [Measures].[Median Qty], [Measures].[avgOrderSize]} ON 0,
NON EMPTY([Product].[Product Categories].[Category]) ON 1
FROM [Analysis Services Tutorial]
WHERE ([Product].[Product Name].&[476]);

输出为:

我的 [Measures].[avgOrderSize] 是正确的,因为它似乎使用了查询中返回的实际度量。但是,[Measures].[Median Qty] 完全不符合我的要求。我希望该值约为 6(假设我的 AdventureWorksDW2012 有 344 个经销商订单,其中包括该产品)。 MEDIAN() 似乎适用于整个产品集?

我尝试了 [Product].[Product Categories].siblings 的变体,包括 [Product].[Product Name].CurrentMember,它返回与经销商销售订单数量相同的值 我做错了什么以及如何让 MEDIAN() 函数像我期望的那样运行?

我还没有使用过该功能,但您可以尝试以下几项操作:

在计算中添加EXISTING关键字:

WITH
    MEMBER [Measures].[Median Qty] AS
     MEDIAN ( 
        EXISTING [Product].[Product Categories].siblings
      , [Measures].[Reseller Sales-Order Quantity]
     )
...

添加 Exists 功能,虽然这可能与上面的非常相似:

WITH
    MEMBER [Measures].[Median Qty] AS
     MEDIAN ( 
        EXISTS([Product].[Product Categories].siblings, [Product].[Product Name].&[476])
      , [Measures].[Reseller Sales-Order Quantity]
     )
...

试试这个:

WITH
    MEMBER [Measures].[Median Qty] AS
     MEDIAN ( 
        [Product].[Product Categories].currentmember.siblings
      , [Measures].[Reseller Sales-Order Quantity]
     )
...

警告。这会很慢。但应该是正确的。恐怕中位数只是一个昂贵的计算。第一个参数应该是一个退化维度和一个属性,在事实 table 中每行有一个成员。

WITH
    MEMBER [Measures].[Median Qty] AS
     MEDIAN ( EXISTING [Reseller Sales].[Reseller Sales Order Number].[Reseller Sales Order Number].Members, [Measures].[Reseller Sales-Order Quantity])
    ...