[]
累积分析一般用来做累积的计算。
比如:
从1月到12月,或者到现在的累计销售率分析。
今年的销售完成率,也即全年的Sum(Cost)/Sum(Budget)。
到目前为止的销售完成率,也即到现在为止的Sum(Cost)/Sum(Budget)。
在本例中,我们要累计的值为 Sum(SaleAmount),维度为年份。
1. 添加图表,并绑定分类字段。
2. 在表 'FactResllerSales'上添加一个度量值。
3. 输入度量值的名称和分析表达式并保存。
表达式内容如下,有关表达式的解析请见本页下方内容。
CALCULATE(
SUMW(
SUMMARIZE(
CALCULATETABLE(
SELECTCOLUMNS(
FactResellerSales,
"FactResellerSales_OrderDate_Year",
Year(
'FactResellerSales'[OrderDate]
)
)
),
[FactResellerSales_OrderDate_Year],
"FactResellerSales_SalesAmount_SUMX",
CALCULATE(
SUMX(
CALCULATETABLE(
ADDCOLUMNS(
SELECTATTRIBUTES(
FactResellerSales,
'FactResellerSales'[SalesAmount]
),
"FactResellerSales_OrderDate_Year",
Year(
'FactResellerSales'[OrderDate]
)
)
),
'FactResellerSales'[SalesAmount]
)
),
"FactResellerSales_OrderDate_Year_Order_null",
CALCULATE(
ROWNUMBERW(
CALCULATETABLE(
DISTINCT(
SELECTCOLUMNS(
FactResellerSales,
"FactResellerSales_OrderDate_Year",
Year(
'FactResellerSales'[OrderDate]
)
)
)
),
OrderBy(
[FactResellerSales_OrderDate_Year]
)
)
)
),
[FactResellerSales_SalesAmount_SUMX],
OrderBy(
[FactResellerSales_OrderDate_Year_Order_null]
)
)
)
4. 使用新建度量值绑定到数值区域绘制图形。
首先来看最外层的 CALCULATE函数。
第一个参数是必需的,过滤器是可选的。在这种情况下,我们可以删除 CALCULATE 函数。
其次,SUMW 函数语法如下:
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)])])
在这种情况下,可选子句仅按 sub-function 排序。
1) 参数 <table>
第一个参数 <table> 是必需的。它可以是一个表或一个表函数,返回值是一个表。这个参数非常重要,必须包含维度(用于分组),值(需要在窗口函数中计算)的列。
当前情况下,表是一个函数。我们可以看到它包含按列分组(Year(OrderDate)),需要在窗口函数中计算的两个值(“FactResellerSales_SalesAmount_SUMX”,“FactResellerSales_orderDate_Year_Order_null”)。
结构如下:
可以看到我们使用了 Summarize 函数来生成表格。第一个参数也是一个表格(使用表格函数),第二个参数是维度(需要分组),第三个等等。
参数是名称和表达式。维度名称必须遵循规则:如果不需要提取日期时间,名称为“tableName_columnName”,如果需要提取日期时间,名称为“tableName_columnName_Type”,这里的类型可以是年,月,日,小时,分,秒。维度名称不区分大小写。
2) 参数<expression>
第二个参数 <expression> 是必需的。这里它可能是来自第一个参数 <table> 的“非限定”名称。
3)参数<OrderBy>clause
该参数是可选的。但是如果我们要计算累积值,就需要这个参数。这也是来自第一个参数 <table> 的“非限定”名称。