麦粉社区
>
帖子详情

[报表开发] 各类型资源汇总行数逻辑及支持行数

动态中心 发表于 3 小时前
发表于 3 小时前

在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电子表格不支持合计。


二、数据集层面支持行数及单元格数







































































































设置项名称



设置项功能说明



生效范围



新数据集(V10及以上默认数据集)



旧数据集(V9及以下版本使用)



数据模型



业务主题



自助数据集



原生sql数据集



sql数据集



可视化数据集



存储过程数据集



Java数据集



多维数据集



即席查询数据集



透视分析数据集



数据集单次查询最大单元格数【MEMDB_MAXCELLS】



限制数据集单次查询最大单元格数



sql引擎生效



-





















SparkSQL结果集最大行数【SPARKSQL_LIMIT_MAXROW】



限制SparkSQL引擎允许查询的最大行数。设置此限制是因为SparkSQL的分页查询在数据量越大时性能越低。





-





-







-



-



-







内存数据库最大返回行数【MEMDB_MAXROW】



从业务库中查询多少行数到内存数据库中(内存数据库:hsql)



-



-



-













-







OLAP_QUERY_MAX_ROW_LIMIT



避免OLAP引擎因加载和处理过大数据量而导致内存溢出。此限制在数据库返回结果集时生效,超过设定行数的数据将被截断。





-



-



-



-



-



-



-



-



-



-



是否设置Statement的最大行数【SET_STATEMENT_MAX_ROWS】



通过JDBC的Statement接口对结果集进行分页。此设置项主要对结果集分页生效,对原生SQL数据源有效。增加此配置项是为了解决特定数据库(如SQL Server)在设置Statement最大行数后查询变慢的问题。



-



-



-









-



-



-







 


三、报表层面支持行数及单元格数



  • 报表浏览限制:


































设置项名称



功能说明



默认值



影响范围



配置入口



报表最大单元格数【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条数据后弹出提示


   


高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

0回帖数 0关注人数 26浏览人数
最后回复于:3 小时前

社区

指南

AI

搜索

快速回复 返回顶部 返回列表