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])
...
我正在尝试实现一个数据立方体,借此我可以显示给定维度集的度量的平均值和中位数。使用 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])
...