|
在SmartBI中,不同类型报表的汇总行数逻辑和支持行数存在差异,主要受报表类型、数据源性能及系统配置影响。以下是常见报表类型的详细说明:
一、汇总行数逻辑
汇总行(如合计、小计)在SmartBI中并非简单固定的行,而是动态生成的计算成员。其核心逻辑可概括为:
- 确定范围:系统会根据你当前的行、列、筛选条件,确定哪些数据参与汇总。
- 展开明细:如果当前成员是小计或合计,系统会先获取其下所有明细成员。
- 逐项计算:对每个明细成员,按你设定的统计方式(如求和、计数等)进行计算。
- 合并结果:将上一步的计算结果按汇总方式合并,得到最终的小计或合计。
如果你想了解如何在报表中设置合计,可参考: 报表合计不用愁!全场景报表合计一键搞定指南
资源类型
|
汇总逻辑
|
详细说明
|
透视分析(新)
交互式仪表盘-交叉表
基于模型汇总查询新建的电子表格/web电子表格
|
交叉表中的小计合计本质上是自定义成员,在维度层次上动态生成。计算范围受当前上下文(如行/列/筛选器)限定,根据汇总类型不同,计算方式分为两类,具体可看详细说明内容
|
内存计算型(SUM、COUNT、MAX、MIN)
- SUM / COUNT:
小计会对当前分组下的所有子成员求和/计数。若维度存在父子层次(如时间维度),小计可自动向上替换为父成员的值。 示例:订单年份为2020年,其下四个季度小计 = SUM(2020Q1,2020Q2,2020Q3,2020Q4) = 2020年总值。
- MAX / MIN:
直接在内存中比较子成员的值,取最大/最小。结果不等于子成员之和,但一定出现在子成员中。
SQL执行型(唯一计数、平均值、中位数、方差等)
- 唯一计数:小计/合计通过SQL的COUNT DISTINCT计算,每个分组对应独立SQL。
示例:2020年四个季度的小计对应SQL: SELECT COUNT(DISTINCT 度量) FROM 表 WHERE 季度 IN ('2020Q1','2020Q2','2020Q3','2020Q4')
- 平均值、中位数、标准差等:均通过SQL聚合函数计算,不依赖内存比较。

|
对于由原子度量计算得出的比率(如利润率 = 利润 / 成本),小计合计的值不等于各子项比率的平均值,而是按照“先合计原子度量,再相除”的规则计算。
|
销售利润率 = 销售利润 / 产品总成本。
- 小计(如东北两省)= SUM(两省利润) / SUM(两省成本)
- 合计(全国)= SUM(全国利润) / SUM(全国成本)

这种处理确保了比率在聚合层面的业务含义正确。
|
占比计算
|
- 全局占比:小计合计值 / 行列方向总的合计值 × 100%
(分母固定为整个报表的合计)

- 组内占比:小计合计值 / 当前分组值 × 100%
(分母为父级分组值,如2020年小计占2020年总值的比例)

|
排名:小计合计不支持,结果为空
|
当对度量设置排名时,小计/合计行不参与排名计算,单元格留空。这是因为排名是基于明细数据的顺序,聚合行没有参与排序的意义。
|
时间计算(前期、同期、累计、期初期末、日均)是最复杂的场景。
关键规则:当前时间成员为小计/合计成员时,系统会将其展开为底层成员列表,然后对每个底层成员应用时间计算,最后再聚合。
也就是遵循一个死理:先把每一个具体的“子项目”算出对比结果,最后再把子项目的结果加起来。
|
1. 前期值(ParallelPeriod)
含义:穿越时空,找去年的今天(或上个月、上个季度)。
核心逻辑:系统会先把“合计”拆成明细,分别算出每个明细的“前期值”,最后把这些结果加起来。
场景示例:
- 行列无时间层次(时间在筛选器):
如筛选2022年,华南小计的前期值 = 对华南各品类分别计算前期值,再求和。前期值基准为2021年同期。

- 行列有时间层次(时间在行/列):
如行上有2022年小计(包含四个季度),前期值会先展开为[2022Q1,2022Q2,2022Q3,2022Q4],分别向前移动一期得到[2021Q4,2022Q1,2022Q2,2022Q3],再求和。

同期值、累计值原理和前期值相同,仅表达式不同
2. 期初期末值(PeriodsBegin/PeriodsEnd)
一句话理解: “抓开头”和“抓结尾”。只看特定那一天。
- 期初值:返回当前时间成员之前那一天的度量值。例如当前是2022年7月,期初值就是2022年6月30日的值。
- 期末值:返回当前时间成员在指定层次上的最后一天的度量值。例如当前是2022年7月,指定层次为“月”,期末值就是2022年7月31日的值。
- 案例说明:
- 场景一:行列无时间层次(时间在筛选器):
- 小计值:因所选的时间层次是2022年07月,则华南期初时点的小计值=华南2022年6月30号的销售数量;华南期末时点的小计值=华南2022年7月31号的销售数量。

- 合计值:因所选的时间层次是2022年07月,则期初时点合计值=2022年6月30号的销售数量;期末时点合计值=2022年7月31号的销售数量。

- 小计:以2023年2季度的小计为例,展开得到对应的聚合成员列表是[2023-04],[2023-05],[2023-06]:
- 期初值:2023年03月31日,并求得对应的度量值。

- 期末值:2023年06月30日,并求得对应的度量值。

- 合计:这里时间维度的currentMember是合计成员,展开得到对应的聚合成员列表是从[2021-01]到[2023-08]:
- 期初值:2020年12月31日。但因期初不跨年的逻辑限制,所以结果是NULL;
- 期末值:2023年08月31日。因2023年8月31号没有数据,所以结果也是NULL。

由于期初不跨年,如果期初获取小计成员时,获取到上一年的成员值时,则计算结果是NULL。
3. 日均值(PeriodsAverage)
- 业务场景:你想知道“今年上半年平均每天卖多少钱”。
- 计算逻辑:从年初到当前成员之间所有日层次成员的平均值。即:总数 ÷ 日历天数。
注:计算公式中第三个参数为true的时候按自然日求日均,为false的时候按值的个数求平均。
报表中的快速计算是按自然日求日均。
- 案例说明:
- 场景一:行列无时间层次(时间在筛选器):
- 小计值:因所选的时间层次是2022年,则所选时间的自然日天数为365天,即华南的小计值为23,590/365=64.63。
- 合计值:和小计值类似,拿总的合计值除以所选时间的自然日天数,即合计值为100,865/365=276.34。

- 场景二:行列有时间层次(时间在行/列):
- 小计行:以2022年的小计为例:
- 计算日均时,展开得到的聚合成员列表是[2022-1],[2022-2],[2022-3],[2022-4];
- 对每个成员获取从年初到对应日期层次的成员列表,得到2022-01-01到2022-12-31;
- 求对应的度量值的合计,再除以自然日天数;
- 2022年的小计=248,258/365=680.16。
- 合计行:
- 展开得到的聚合成员列表是[2021-1],[2021-2],[2021-3],[2021-4],[2022-1],[2022-2],[2022-3],[2022-4],[2023-1],[2023-2],[2023-3];
- 对每个成员获取从年初到现在的日期层次的成员列表,得到2021-01-01到2023-09-30;
- 求对应的度量值的合计,再除以自然日天数;
- 合计=546,890/1003=545.25。

计算日均时,若日期维度的日不连续时,会影响日均计算结果,时间维度补齐功能详见: 时间计算日期自动补齐。
|
交互式仪表盘-树状表
|
树状表组件的分类汇总,是按照每个层级独立获取指标数据
|
比如【530】是河北省当前节点的销售量,而不是石家庄+张家口+秦皇岛的总销售量,此种展示逻辑也符合不能汇总的指标数据。

|
新即席查询、交互式仪表盘-明细表/汇总、基于模型明细查询新建的电子表格/web电子表格不支持合计。
二、数据集层面支持行数及单元格数

三、报表层面支持行数及单元格数
设置项名称
|
功能说明
|
默认值
|
影响范围
|
配置入口
|
报表最大单元格数【REPORT_MAX_CELLS】
|
全局控制单次查询执行的最大单元格总数(行数×列数),防止资源耗尽。
|
200,000
|
电子表格、web电子表格、旧透视分析、仪表盘的交叉表组件
|
【运维设置】-【系统选项】-【性能优化】

|
电子表格分组/Excel融合分析报表取数最大行数【SPREAD_SHEET_REPORT_MAX_DATA_ROWS】
|
限制电子表格分组报表或Excel融合分析报表中,每个数据集一次性取数的最大行数。
(其他设置项如打开时每页行数这个只是设置的初始打开的报表行数)
|
20000
|
电子表格、web电子表格
|
【运维设置】-【系统选项】-【性能优化】

|
透视分析单次查询数据行数【INSIGHT_ROWPERQUERY】
|
控制旧版透视分析在执行单条SQL查询时返回的行数。
|
10000
|
旧透视分析
|
【运维设置】-【系统选项】-【性能优化】

|
设置项名称
|
功能说明
|
默认值
|
影响范围
|
配置入口
|
Excel2007最大导出行数【EXCEL_EXPORT_MAX_COUNT】
|
所有报表导出为Excel格式时的最大行数限制
|
20000
|
所有报表导出为Excel
电子表格/web电子表格-分组表除外
|
【运维设置】-【系统选项】-【公共设置】

|
SPREAD_SHEET_REPORT_LIST_EXPORT_LIMIT_ENABLE
|
是否对清单表导出启用行数限制的开关
|
false
|
电子表格/web电子表格的清单表导出
|
【运维设置】-【系统选项】-【高级设置】

需手动添加
|
四、参数备选值支持行数
设置项名称
|
功能说明
|
影响范围
|
配置入口
|
示例说明
|
参数备选值最大返回行数【PARAM_SV_MAXROW】
默认值:10,000
|
限制所有具有备选值功能的参数(如下拉框、列表框等)在后台一次性返回的最大行数。
|
- 公共参数备选值
- 旧即席查询透视分析拖字段成为条件的备选值
- 数据模型参数管理中创建的模型参数备选值
- 电子表格/web电子表格参数管理中创建的报表私有参数
仪表盘、新即席查询、新透视分析直接拖的字段成为筛选器备选值不受PARAM_SV_MAXROW控制
|
【运维设置】-【系统选项】-【高级设置】

|
- 数据模型层设置参数,此时预览参数备选值有7条数据;

- 系统选项-高级设置中,调整【参数备选值最大返回行数】为2;

- 基于该模型创建透视分析引用该参数,可以发现此时该参数备选值只返回2条记录;

|
下拉筛选器最大返回行数【FILTER_SV_MAXROW】
默认值:1,000
|
控制下拉单选/多选筛选器、下拉单选/多选参数的后台最大返回行数。
前端页面默认只显示100条,超出部分需通过搜索定位。若搜索的值在此限制之外,则无法搜索到。
|
只影响新报表,支持:仪表盘;
不支持:新即席、新透视
|
【运维设置】-【系统选项】-【高级设置】

|
- 系统选项-高级设置中,调整【下拉筛选器最大返回行数】为150;

- 基于模型创建仪表盘,选择【OrderID】字段作为筛选条件,可见下拉筛选只返回100条记录;

- 仪表盘筛选器中,搜索不在下拉返回的记录数据,可正常搜索返回
|
输入框组件最大输入行数【INPUT_SV_MAXROW】
默认值:1,000
|
限制多选输入框筛选器、多选输入框参数一次性可输入的最大行数。
|
只影响新报表,支持:仪表盘、新即席、新透视。
|
【运维设置】-【系统选项】-【高级设置】

|
- 系统选项-高级设置中,调整【输入框组件最大输入行数】为2;

- 创建报表并设置多选输入框筛选器,输入3条数据后弹出提示

|
您已完成阅读,来做个题 巩固下把,答题可领取麦豆哦——>点击领取任务 |