1. 概述
1.1 版本
FineBI版本 | 功能变动 |
---|---|
6.1.2 | - |
1.2 功能简介
WINDOW 窗口函数常用于行间计算的场景,在对数据进行分组、排序后,对窗口上下限内的数据进行计算。
语法
WINDOW_汇总方式(指标 ,[分组字段1, 分组字段2.... ],[排序字段1,排序方式,排序字段2, 排序方式...],[窗口上限,窗口下限])
参数
窗口函数基于「分析视图」进行计算,函数内的指标/分组字段/排序字段需要均为聚合性质,且维度字段均需要来源于分析视图
参数 | 说明 |
---|---|
指标 | 不可为空 |
分组字段 | 缺省则不按照任何字段分组 |
排序字段 | 缺省则按照默认顺序计算 |
排序方式 | 支持 "asc"、"desc" 两个关键词,分别对应升序和降序排序,如缺省需要缺省所有排序方式,缺省则按照排序字段升序进行计算 |
窗口上限/下限 | 支持 "first"、"last" ,分别代表组内第一行/组内最后一行; 支持数值常量,0代表当前行,-n代表当前行的前n行,n代表当前行的后n行 缺省则按照["first","last"]使用组内全部计算 |
返回值
返回窗口中的所有行,对行内的指标依据「汇总方式」进行计算。
注:不同的 WINDOW 函数对应不同的汇总方式,汇总方式包括「求和,平均,最大值,最小值,标准差,方差」。除此以外,窗口函数还有 RANK_AGG-按指定规则排序 函数,支持对字段分组后按指定规则排序。详情见下文。
1.3 应用场景
窗口函数能够单独输出字段或和 DEF 函数组合使用。对分析视图的字段进行计算时,窗口函数比使用 EARLIER 函数进行跨行计算更简单、更易理解、性能更优。
一般场景
WINDOW 函数基于分析视图进行聚合计算,即依据已生成的组件结果进行计算(不包含明细表)如:
求累计
求组内累计
求近三行移动平均
求分组下近三行移动平均
嵌套场景
当 WINDOW 和 DEF 类函数嵌套使用时,基于 DEF 函数下的独立视图进行计算,这种情况下如果使用的是 DEF 函数(指定维度)可输出明细级别的字段。
DEF+WINDOW 的嵌套场景下支持在自助数据集和明细表中使用 WINDOW 函数。
1.4 函数类型
window函数 | 场景 |
---|---|
WINDOW_SUM-跨行求和/求累计 | |
WINDOW_AVG-跨行求平均 | 求移动平均 |
WINDOW_MAX-跨行求最大值 | - |
WINDOW_MIN-跨行求最小值 | - |
WINDOW_STDEV-跨行求标准差 | - |
WINDOW_VAR-跨行求方差 | - |
RANK_AGG-按指定规则排序 |
2. 使用位置
3. 注意事项
WINDOW 基于分析视图进行计算,指标/分组字段/排序字段需要均为聚合性质,且维度字段均需要来源于分析视图
WINDOW 函数输出的是聚合字段,在自助数据集中不支持直接输出,需要与 DEF 函数组合后输出明细级别字段。
如果对于排序要求较高,建议把排序字段和排序方式都依次罗列到 WINDOW 函数中。未指定的字段按照默认顺序计算
年月累计场景
由于当前 WINDOW 计算时所使用的字段都是从待分析区进行选择,来对应分析区的字段。而我们分析区又支持日期分组、自定义维度分组。当一个字段被重复拖入分析区并设置多种分组方式时, WINDOW 计算会将字段设置的所有分组都带入计算。
例如,「合同签约时间」在分析区按「年」分组,然后再次拖入后按「月份」分组。WINDOW 函数计算的「合同签约时间」会按年月分组参与计算。如下图所示:
如果我们要求按年分组下,各月的购买数量累计,需要在待分析区域复制「合同签约时间」字段并重命名用于区分不同分组。
在分析区拖入字段「年、月」并依次设置分组。添加计算字段「购买数量组内累计值」,计算对「年」分组后,按月依次累计的购买数量。
2013 年的购买数量按月依次累计,效果如下图所示:
4. 示例
示例数据:超市销售数据.xlsx
1)制作分组表,拖入「订单日期、销售额」求不同年月的销售额情况。如下图所示:
2)计算近三个月销售额移动平均,如下图所示:
公式=WINDOW_AVG(SUM_AGG(销售额),[],[订单日期],[-2,0])
公式内容 | 说明 | 备注 |
---|---|---|
WINDOW_AVG(SUM_AGG(销售额)) | 销售额跨行求平均 | |
参数2:[] | 不对数据进行分组 | |
参数3:订单日期 | 按订单日期(年月)升序
| 不写排序方式默认升序 |
参数4:[-2,0] | 获取窗口范围内的数据
| 按订单日期(年月)顺序获取前两行和当前行数据,求移动平均 |
完成后,将字段拖入分组表,并设置数值格式为「万」。如下图所示: