[]
        
(Showing Draft Content)

SUMW

概述

计算一组行中每一列的 SUM 值 。

语法

分析表达式

SUMW(<table>,<expression> [,PARTITIONBY(<expression>[,[expression] [,...]])] [,ORDERBY(<expresion> [(ASC|DESC)] [,<expression> [(ASC|DESC)] [,...] ] )] [,(ROWS|RANGE)( ((UNBOUNDED|<Number>) (PRECEDING|FOLLOWING) | CURRENT ROW) [,((UNBOUNDED|<Number>) (PRECEDING|FOLLOWING) | CURRENT ROW)])])

参数

参数

定义

table

进行计算的表。

expression

计算表达式。

PARTITION BY 子句

将查询结果集划分为多个分区。

窗口函数分别应用于每个分区,并为每个分区重新启动滑窗计算。

如果未指定 PARTITION BY,则此函数将查询结果集的所有行视为单个分区。

ORDER BY 子句

定义结果集的每个分区内行的逻辑顺序。

也就是说,它指定了执行窗口函数计算的逻辑顺序。

如果未指定,则默认顺序为 ASC,且开窗函数将使用分区中的所有行。

ROWS|RANGE 子句

通过指定分区中的起点和终点,进一步限制分区中的行数。

这是通过按照逻辑关联或物理关联对当前行指定某一范围的行实现的。 物理关联通过使用 ROWS 子句实现。

ROWS 子句通过指定当前行之前或之后的固定数目的行,限制分区中的行数。

此外,RANGE 子句通过指定针对当前行中的值的某一范围的值,从逻辑上限制分区中的行数。 基于 ORDER BY 子句中的顺序对之前和之后的行进行定义。

窗口框架“RANGE …CURRENT ROW ...”包括在 ORDER BY 表达式中与当前行具有相同值的所有行。

例如,ROWS BETWEEN 2 PRECEDING AND CURRENT ROW 意味着该函数对其操作的行的窗口在大小上是 3 行,开头为之前的 2 行,再包括当前行。

UNBOUNDED PRECEDING

在窗口中,指定当前行之前的所有行。

CURRENT ROW

当前行,指定窗口与 ROWS 一起使用时在当前行开始或结束,或与 RANGE 一起使用时指定当前值。CURRENT ROW 可以指定为起点和终点。

UNBOUNDED FOLLOWING

在窗口中,指定当前行之后的所有行。

<Number> PRECEDING | FOLLOWING

当与 ROWS 或 RANGE 一起使用时,指定窗口在下一行或上一行开始或结束。

返回值

返回一个十进制的数。

示例

以DimProductCategory表 的 EnglishProductCategoryName列进行分片,在DimProduct 表中进行滑窗运算。

每一行返回它前一行到后两行的ListPrice 求和结果。

分析表达式

SUMW( 
    'DimProduct',
    'DimProduct'[ListPrice],
    PARTITIONBY('DimProductCategory'[EnglishProductCategoryName]),
    ORDERBY('DimProduct'[ProductName]),
    ROWS(1 PRECEDING , 2 FOLLOWING)
)

备注

当使用rows/range子句时,必须使用orderby子句。