MDX BottomPercent 函数

MDX BottomPercent 函数将给定数据按升序排序。然后 BottomPercent 从排序后的数据中选择所需数量的记录,使其总和大于或等于指定的百分比。

MDX BottomPercent 函数语法

MDX BottomPercent 在多维表达式中的基本语法如下所示:

BOTTOMPERCENT (Set_Expression, Percentage, Numeric_Expression)
  • Set_Expression:您想检查的任何 Multidimensional Expression 或属性。
  • Percentage:请输入您想要检索的百分比。
  • Numeric_Expression:任何多维表达式或度量。BottomPercent 函数将使用此 Numeric_Expression 按升序对数据进行排序,然后选择满足百分比所需的记录数。

如何编写 MDX BottomPercent 函数以从(Adventure Works Cube 中存在的)Geography Dimension 中提取所有在其零售商销售额(Reseller Sales amount)中处于底部 1% 的州?为此,我们将使用下面显示的数据。

MDX BottomPercent 函数示例

以下查询返回 Geography Dimension 中所有在零售商销售总额中贡献了底部 1% 的州。

提示:请使用 MDX TopPercent 函数来查找顶部百分比。

SELECT {[Measures].[Reseller Sales Amount]} ON COLUMNS,
 BOTTOMPERCENT (
	    [Geography].[Geography].[State-Province], 1
            ,[Measures].[Reseller Sales Amount]
	    ) ON ROWS
FROM [Adventure Works]

在上面的 MDX 查询中,我们在列上选择了 [Reseller Sales Amount] 度量,在行上选择了 Geography Dimension 中存在的 [State Province] 列。接下来,BottomPercent 函数将使用 Measures.[Reseller Sales Amount] 按升序对数据进行排序。然后,它找到占总销售额的百分比。

MDX BOTTOMPERCENT FUNCTION 1

如果您观察上面的 BottomPercent 屏幕截图,它们并不是总记录的底部 1% 的行。如果您将上面屏幕截图中存在的零售商销售额总和相加,它将大于或等于总零售商销售额的 1%。简而言之,上述州是贡献了总销售额底部 1% 的底部州。

MDX BottomPercent 函数示例 2

在此示例中,我们将使用两个度量 ([Measures].[Reseller Sales Amount] [Measures].[Reseller Gross Profit])。

SELECT {[Measures].[Reseller Sales Amount], 
        [Measures].[Reseller Gross Profit]} ON COLUMNS,
 BOTTOMPERCENT (
             [Geography].[Geography].[State-Province], 1
            ,[Measures].[Reseller Sales Amount]
	   ) ON ROWS
FROM [Adventure Works]
MDX BOTTOMPERCENT FUNCTION 2

如果您观察上面的屏幕截图,我们发现 [Reseller Gross Profit] 的结果不一致。这是因为数据是根据 [Reseller Sales Amount] 排序的。

注意:请在 BOTTOMPERCENT 函数中使用适当的度量作为第三个参数。否则,您将得出错误的结果。

NON EMPTY 与 MDX BottomPercent 函数结合使用

在此示例中,我们将使用 Non Empty 关键字来删除 BottomPercent 函数返回的 NULL 值。

SELECT {[Measures].[Reseller Sales Amount] } ON COLUMNS,
 NON EMPTY
  BOTTOMPERCENT (
	      [Geography].[Geography].[State-Province], 1
	     ,[Measures].[Reseller Sales Amount] 
	      ) ON ROWS
FROM [Adventure Works]
BOTTOMPERCENT 3

尽管我们要求的是底部 1% 的记录,但上面的查询显示了少量记录,因为其余记录为 NULL。我们在上述查询中使用的 MDX Non Empty 关键字删除了这些 NULL 记录。