1. 概述
1.1 版本
| FineBI 版本 | 功能变动 |
|---|---|
| 7.0.6 | - |
1.2 功能简介
半累加指标是解决「部分维度不需要聚合,仅取特定值(最大 / 最小),其他维度正常汇总」的可视化配置功能。
不用写复杂函数,通过指标可视化配置就能实现快照类数据的统计,替代原来需要手动编写 def 函数的高难度操作。

1.3 应用场景
| 示例 | 场景 | 可视化配置 |
|---|---|---|
| 账户余额统计 | 按账户取「最后一次流水时间」的余额,再按「网点/支行」汇总 |
|
| 库存数量统计 | 按库房、品类取「最后一次记录时间」的库存,再按地区汇总 |
|
| 考试成绩统计 | 考生同一科目多次考试,取「最高/最低分」作为最终成绩 |
|
1.4 注意事项
指标的 「汇总方式」 不能是「聚合」 或 「明细值」
主指标 + 过滤条件有且仅有一个基准表(不能跨多个表)
2. 操作步骤
示例场景:计算账户余额(账户分组下取最大时间的余额)
原始数据:
| 地区 | 账户 | 时间 | 流水余额 |
|---|---|---|---|
| A | ZH100 | 2025-10-11 18:00 | 100 |
| A | ZH100 | 2025-10-11 19:00 | 200 |
| A | ZH101 | 2025-10-11 18:00 | 300 |
2.1 前置条件
上传数据到「数据目录」并添加到「模型管理」后,制作指标。
计算方式选择「字段」,依据「流水金额」进行「求和」,如下图所示:
过滤:无
衍生方式:无

注意事项:
指标的 「汇总方式」 不能是「聚合」 或 「明细值」
计算方式的「对应指标 」+ 「过滤条件」有且仅有一个基准表(不能跨多个表)
2.2 配置指标
在指标可视化定义界面,开启「半累加指标」后,进行配置。该指标在不可累加维度下不聚合,仅选取窗口分组中最大/最小的不可累加维度值参与计算。例如计算账户余额,「不可累加维度=时间;窗口分组=[账户];取值=最大值」。配置如下图所示:

计算逻辑说明:
指标配置转化为公式 = sum_agg(def_add(sum_agg(流水余额),[账户],[时间= def(max_agg(时间),add_dim()) ]))
公式计算优先级:先执行过滤条件 → 再按「窗口分组」+「不可累加维度」取最大 / 最小值对应的指标值 → 最后按其他维度正常聚合
示例:无过滤条件,跳过 → 按账户分组取最大流水时间的余额 → 按 「分析使用的维度」 汇总余额合计
配置项说明:
| 配置项 | 选择范围 | 限制 | 说明 |
|---|---|---|---|
| 不可累加维度 | 「对应字段」所在基准表的全部原始表字段 (不区分字段类型) |
| 无需聚合的维度(如账户余额场景的 「时间」),仅选取窗口分组内指定规则的该维度值 |
| 窗口分组 | 资源 / 维度列表中能够分析「对应字段」的字段 (需判断字段分析方向) |
| 分组维度(如账户余额场景的 「账户」),基于该维度筛选不可累加维度的极值记录 |
| 取值 | 可选 「最大值」或「最小值」 |
| 不可累加维度的筛选规则(如账户余额场景选 「最大值」,即取窗口分组内最大时间的记录) |
2.3 效果预览
完成指标配置后,查询数据结果。地区 A 所有账户余额为「500」。

账户「ZH100」余额为「200」。

添加所有字段预览数据明细,效果如下图所示:

3. 计算逻辑说明
3.1 基础计算逻辑
半累加函数计算逻辑转化为公式如下:
汇总方式(def_add(汇总方式(指标) , [窗口分组] ,[不可累加维度=def(最大/最小值聚合函数(不可累加维度),add_dim())]))
公式说明:
外层汇总方式:按用户预期的最终聚合方式(如 “平均”“求和”),对窗口分组计算后的结果再次聚合(例:求支行下各账户平均余额,先算每个账户余额,再按支行求平均);
内层汇总方式:若窗口分组内不可累加维度最大/最小值对应多条记录(数据异常场景),复用配置的汇总方式处理(如余额场景选 “求和” 则累加多条最大/最小值记录,优先规避数据异常导致的计算逻辑复杂化);
def_add/def 函数:实现窗口分组内不可累加维度的最大/最小值筛选,max_agg对应 “取值 = 最大值”,min_agg对应 “取值 = 最小值”;
add_dim:规避 def_add 函数第一个参数必须为数值的限制,曲线兼容字段类型。
3.2 交叉场景计算逻辑
半累加指标可叠加 「指标过滤、时间衍生」 配置,核心规则为:不可累加逻辑是对主指标聚合的修饰,过滤在聚合前执行。
1)过滤 + 半累加
不可累加=sum_agg(def_add(sum_agg(if(条件, 指标, null)), [窗口分组],[不可累加维度=def(最大/最小值聚合函数(不可累加维度),add_dim()]))
注:因公式包含 def 函数,暂不支持过滤下推优化(功能暂未正式对外)。
2)时间衍生 + 半累加
年同期场景公式如下:
sum_agg( def_add(sum_agg(def_add(汇总方式_指标, [窗口分组 ],[不可累加维度=def(最大/最小值聚合函数(不可累加维度),add_dim()])),[ ],[current(sub_dim(日期)),日期年=earlier(yeardelta(日期年,-1)))
current(sub_dim(日期):锁定当前分析的时间粒度(年)和具体值(比如用户分析 2024 年的数据,该函数就返回 “2025”);
yeardelta(日期年,-1) → 年份减 1(2025 → 2024,对应 “去年同期”)
注:半累加本身使用了 2 层 def ;时间衍生本身使用 1 层 def ;聚合过滤本身使用一层 def 。如果叠加可能会导致 def 超限,建议如有此场景适当放开一层 DEF 层数限制。
4. 常见问题
Q:不可累加维度为何最多选 1 个?
A:多个不可累加维度会导致 「最大/最小值」判定歧义(如同时选时间、金额,无法明确先取哪个维度的极值)。
Q:窗口分组非必填,不填会怎样?
A:不填窗口分组时,会基于全量数据筛选不可累加维度的极值记录,再按汇总方式聚合。
Q:不可累加维度最大/最小值对应多条记录(数据异常),如何处理?
A:复用配置的 「汇总方式」处理(如求和、平均),优先保证逻辑简洁,数据异常需提前诊断修正。
Q:什么是主指标?
A:添加指标选的「对应字段」为主指标。下面的过滤条件添加的若干指标为次指标。

Q:什么是基准表?
A:指标分析时维度用的哪张表,哪个就是基准表。跨表计算的指标,依据维度所在多表之间的关联关系,生成一张虚拟的基准表。
