反馈已提交

网络繁忙

您正在浏览的是 FineBI6.1 帮助文档,点击跳转至: FineBI5.1帮助文档

FineBI6.0灵活开发与系统性能

  • 文档创建者:April陶
  • 历史版本:8
  • 最近更新:April陶 于 2024-06-24
  • 概述

    用户使用 FineBI 时,需要培养良好的使用习惯,提高 FineBI 系统的敏捷度。

    灵活开发与系统性能

    FineBI的合理性能表现(抽取数据)

    在FineBI中,展现速度是随着仪表板组件的复杂程度而各有不同的,组件越复杂,展现速度越慢。

    此处列出一些会导致性能表现差异的因素,和它们对应的时间指标。

    整体表现

    对FineBI的抽取数据来说,最大支持的底表数据量是1亿(行),在不超过此限制的情况下,单组件响应时长应在3秒内,仪表板有15个组件时,响应时长应在30秒内

    复杂组件展现表现

    1)1亿行以下的分组表

    • 以下场景在3秒以内展现出来是合理的:

      • 求记录数

      • 快速计算:环期值、环期比

      • 函数计算:todouble、DAYSOFYEAR、DAYS360、DATESUBDATE

    • 以下场景在5秒以内展现出来是合理的:

      • 汇总计算:求和、平均、中位数、最大值、最小值、标准差、方差

      • 合计方式:自动、中位数、平均、方差、最小值、标准差

      • 单维度排序,其他维度组内排序

      • 被联动(带有过滤)

      • 分析区、待分析区的过滤:属于、介于/不介于、结尾是、TopN(最大的N个、前N个)

      • 复杂场景:过滤+计算+排序

      • 函数计算(5个维度5个指标的情况下,计算越多越慢):tointeger、todouble、lower、len、find、SWITCH、RAND、MAX、INT、IF、EXP、DAYSOFYEAR、DAYS360、DATESUBDATE、DATEDIF、AND

    注:如果在1kw原始数据的情况下,出现了100w个分组,则会影响展现表现(因为分组越多计算量越大)。其中快速计算和维度排序的表现在30秒以内都是合理的。

    2)交叉表

    在不做复杂计算、数据集行数在一亿行以内的情况下,10行*10列*10指标和5行*5列*10指标的交叉表,都应在5秒以内展现出来。

    3)对于开启了大数据模式的图表来说

    • 若数据集的行数在1kw以内,在图表分析时产生的维度分组数在5000以内,柱形图、点、线、面积图这些图表的展现应该在5秒之内完成。

    • 若数据集的行数在1kw以内,在图表分析时产生的维度分组数在100w以内,仪表盘、填充地图、文本、漏斗图、热力点、矩形块、饼图、多层饼图、漏斗图、矩形树块、聚合气泡图、词云、雷达图、流向地图、点地图、热力地图这些图表的展现应该在5秒之内完成。

    导出表现

    固定配置下,单元格越少、分组数越低、计算越简单,系统能支撑的最大并发数越大。超过推荐的最大并发数时系统仍然支持,不会报错,但响应时间将大于等于单独导出时的3倍

    导出时长包括两部分

    • 准备导出时长:开始导出至服务端导出数据准备完毕的时长。该段时长依赖于计算速度,主要由工程分配内存和模板本身的计算量有关。

    • 数据传输时长:服务器数据传回客户端以完成请求响应的时长。该段时长受网络传输、浏览器、网络环境、服务器等因素影响。

    Excel导出速率和单元格数量的关系:最快10w单元格/秒,常规在20~40w单元格/秒

    1)不同类型表的导出特性:


    明细表
    分组表交叉表
    导出时长影响因素(固定配置下)导出单元格数每格内容大小分组数、列数、计算方式影响较大总行数影响相对较小行分组、列分组、计算方式数影响较大总行数影响相对较小
    CPU和内存占用率主要由模板的单元格数以及每格内容大小决定,整体占用率较低主要由模板的分组数和计算复杂度决定,整体占用率较高主要由模板的分组数和计算复杂度决定,整体占用率较高
    其他大数据量过滤后导出,跟单独导出同样数据量原始表的时间差距,主要时差为过滤条件的执行耗时

    2)导出性能表现标准:

    表类型导出方式数据量单元格数功能细节响应时间推荐并发(响应时间是单并发的3倍内)
    分组表全局导出excel/pdf、单表导出excel(1kw)1w分组*20列20w不带计算、去重记录数、累计值、排序、自定义分组、方差3s内30
    (1kw)35w分组*20列700w不带计算、去重记录数、累计值、自定义分组、方差30s内20
    (1kw)35W分组*20列700w排序1min内20
    交叉表全局导出excel/pdf、单表导出excel(100w/500w/1kw)100行*3列*5指标
    不带计算2s内30
    (100w/500w/1kw)300行*1200列*6指标
    不带计算2min内
    (100w/500w/1kw)31200行*1200列*6指标
    不带计算10min内10
    明细表全局导出excel/pdf、单表导出excel100w行*202kw不带计算1min内20
    2ww不带计算10min内10

    数据集开发建议

    基础数据集

    通用规范

    1. 添加基础数据集时,字段数建议不超过100个,字段数增多对性能会有一定程度的影响。

    2. 如果需要对基础表进行字段类型转换,建议改成SQL表,在SQL中进行字段类型转换。

    3. 若数据表在数据库中查询超5s,则不推荐添加成DB表,建议优化数据库中对应的表SQL(直连+抽取)。优化过程参考一份非常完整的MySQL规范SQL 性能起飞了

    4. 建议使用的基础表数据量不超过1kw,或者先过滤到1kw再进行分析。


    Excel数据集使用

    1)导入Excel时,若数据量过大,会导致导入慢,或造成前端卡死。

    因此建议:

      1. 限制单个Excel导入的文件大小在100M以下。

      2. 去除Excel中无用行/空行,只保留有效数据。

      3. Excel落库,通过添加SQL表或DB表的形式替代。

    2)如果在直连模式下使用excel,制作大量自助数据集,且自助数据集的血缘层级很深,对拥有复杂血缘的自助数据集数据集进行编辑、预览、制作组件等操作时,容易占用大量内存造成宕机。

    因此建议:

      1. 使用Excel进行数据分析时,如非必须使用实时数据的场景,建议在抽取数据下添加Excel。

      2. 直连模式下的Excel表不建议超过10w行。

      3. Excel与其他数据集进行融合分析时,数据集所在的最深血缘层级不能超过3层。


    直连sql数据集使用

    1. 创建SQL数据集时,避免写非常复杂的SQL语句,查询时间不超过5s。若SQL表的查询时间过长,使用SQL表制作仪表板和自助数据集只会更慢。可将一个表分成若干部分,减少单次扫描的数据量,提升效率。

    2. SQL书写性能规范:

      1. 使用 SELECT 语句时,应指出列名,只取需要的字段,不应使用列的序号或者用“*”替代所有列名,所有操作尽量明确指定列名。

      2. 大表关联查询语句中,做到先过滤再关联,不允许使用WHERE来进行关联。

      3. 如果SQL语句中有多处重复的子查询,可以将其提取出来,进行参数化,减少数据库查询次数。减少子查询(嵌套查询)至三层以内(即三次以内的左右合并、上下合并),嵌套太多则会影响最终展现的性能。

      4. 减少不必要的扫描计算。如果UNION ALL可满足要求,就使用UNION ALL,而不用UNION,因为UNION会有一个比较然后去重的过程,而UNION ALL没有。

      5. 避免对大表的全表扫描操作,经常查询的大数据量表,需要在数据库底表中创建索引,过滤和排序尽量放在索引列上操作,提高SELECT效率,WHERE 语句尽量避免使用函数和算数运算等。

      6. 区间范围比较(特别是索引列比较)要有明确边界,降低比较时的计算精度,用>=、<=代替>、<。

      7. 大表查询时,避免不必要的排序,排序需放在执行计划最后一步。尽量在子查询中避免ORDER BY、DISTINCT等语句。其中ORDER BY是对结果进行排序,而DISTINCT和GROUP BY是在计算过程中排序。子查询数据量较大时用EXISTS子句代替DISTINCT。

      8. 检测 SQL 逻辑是否笛卡尔积,或者检测数据量是不是太大,数据量大的情况就采用分表、分区、瘦身、合并、索引等数据库策略。

    3. 合理使用直连缓存。参考【直连】缓存设置,对高频使用但每次查询性能较差的数据集,可依据数据时效性配置缓存功能,减少数据库查询,提升展示效率。

    自助数据集(在主题数据编辑后发布的表)

    字段数建议

    选字段字段数建议不超过30个。

    创建自助数据集,在选字段阶段应只选择需要用到的字段,不建议直接全选,避免造成服务器物理空间浪费与更新耗时增加


    步骤数建议

    1. 单个数据集数据处理步骤不超过 15 步。

    2. 新增列不超过 10 列。

    3. 左右合并步骤不超过 3 步。

    4. 分组汇总步骤不超过 3 步。

    超过推荐步骤数,建议转化成数据库表再加入使用。


    步骤顺序建议

    1. 优先对数据进行过滤,不要用全部数据进行计算。

    2. 大数据量排序性能不佳,把排序的步骤尽量放在过滤步骤之后

    3. 新增公式列后再对新增列进行排序或者汇总,性能会非常差,建议减少在新增列后使用排序和汇总


    步骤类型建议

    1. 左右合并、分组汇总、其他表添加列、行列转换 步骤性能偏弱,数据量大于 1000w 行时尽量减少使用,若超过1kw则先进行过滤以减少数据量。

    2. 左右合并/其他表添加列避免出现 N:N 情况,若逻辑需要 N:N,控制笛卡尔积后的数据量不超过 1000w 行。

    3. 分组汇总字段总数不超过10个,包含汇总条件的字段数不超过3个,结果不超过 1000w 行。

    4. 新增列计算性能和函数复杂度强相关,函数公式越复杂性能越差;使用DEF函数的字段不超过3个,且避免嵌套;新增列-所有值汇总、新增列-汇总值含分组 性能偏弱;数据处理公式 同比环比等日期形式的计算在组件中「快速计算」中进行。

    5. 字段设置-字段类型转换建议在SQL表中使用SQL语句进行字段类型转换。若自助数据集最简表中有字段类型转换操作,建议增加步骤,使表抽取到本地。

    若步骤公式过于复杂,建议转化成数据库表再加入使用。


    血缘层级

    自助数据集血缘关系过于复杂时,会导致基础表、自助数据集更新慢,相关基础表长时间无法使用。

    因此建议:

    1. 抽取自助数据集所在的最深血缘层级,建议不超过 5

    2. 直连数据集所在的最深血缘层级,建议不超过 2 

    若超过,建议通过SQL数据集实现,或下沉到数据库表再通过添加DB表添加使用。


    性能表现参考

    • 自助数据集符合性能标准的场景

    功能场景(单步骤)功能细节响应时长数量级
    上下合并、左右合并、字段设置、排序、过滤功能场景下的所有子场景3s内1kw
    分组汇总数值字段求方差、标准差、记录数、去重计数、平均值、最值、求和3s内1kw
    新增列除分组赋值外的其他子场景3s内1kw
    • 自助数据集不符合性能标准的场景

    功能场景(单步骤)功能细节响应时长数量级
    分组汇总数值字段求中位数、环期值、环期比10s以上1kw
    文本字段求记录数、去重计数,日期字段求记录数、去重计数、最早/晚时间,查看自定义分组、区间分组3~5s1kw
    新增列分组赋值5s以上1kw

    主题模型

    • 主题内数据模型,默认关联上限为 100 张表

    • 如果使用主题模型,自助数据集不能有复杂计算步骤

    • 数据模型建议使用星形结构、雪花结构,详情请参见文档:主题模型的官方使用推荐

    • 尽量不要使用模型的N:N关联表分析,会降低性能水平,且膨胀易有限制报错。场景示例:

      • A:B=n:n,使用A、B进行分析

      • A:B=1:N,A:C=1:N  使用B、C进行分析

      • 过滤组件绑定多张N端表字段进行过滤

    可视化开发建议

    首先建议开发时使用的浏览器,尽可能使用新版,例如chrome要使用110版本及以上,太旧的浏览器也会导致请求卡顿。

    布局

    组件数量很多时,完全加载出仪表板所需时间很长;30+的复杂图表组件很容易出现渲染慢,view请求慢,导致模板访问白屏。

    布局优化建议:

    1. 减少组件总数量:最好不超过30

    2. 使用TAB组件的方式进行异步加载:不推荐过多组件全堆砌在一页,组件越多性能越差。

    3. 合理使用页面拆分、页面跳转方式布局:具备下钻逻辑的组件,可以采取页面跳转的方式,减少同一页面内组件数量。

    组件效果选择

    组件选择优化建议:

    1. 组件类型简化:如无必须使用图表组件的场景,使用表格组件代替;交叉表仅使用行维度或列维度时,使用分组表代替。

    2. 分析维度简化:使用诸如柱形图、条形图、散点图等图表时,尽量选取更高效的分析维度,分析维度不宜过多,在X个之内。

    3. 数据展示简化:原始表行数在1kw以上时,不建议开启指标数据条。

    4. 数据量级简化:使用大分组图表(分组超过5k)时,建议取消勾选“查看所有数据”。

    字段数/数据量

    数据量优化建议:

    1. 减少字段总数量:组件使用到的计算字段数不超过15个,在主题内的数据集,可以通过字段设置取消勾选不会用到的字段,以限制可能被组件使用的字段数量;同时需要定期检查,去除无用字段。

    2. 减少编辑预览计算数据量:编辑组件时,取消分组表/图表组件的“查看所有数据”,取消勾选即使用部分数据(1万条)查询,可以显著提升性能体验。

    组件计算

    组件中新增计算指标时,若新增指标多、公式复杂,会导致计算慢,进而导致计算线程池满,造成系统卡慢。

    仪表板有很多的字段和计算指标,编辑状态下,添加、删除、移动字段前端响应慢。

    同时,若有些字段标红,检测逻辑会导致在编辑、导出时损失性能。

    组件计算优化建议:

    1. 单个组件新增计算不超过 5 个。

    2. 手动检查,确保仪表板中没有标红字段。

    3. 减少计算字段间相互嵌套。

    4. 复杂公式下放到自助数据集中计算,如去重计数、表头过滤、公式过滤、维度转指标。

    5. 减少使用性能偏弱的场景,如:去重计数、表头过滤、公式过滤、维度转指标、分组汇总-环期值&环期比、组件过滤-TopN过滤、过滤混合二次计算混合排序、合计方式-中位数&方差&标准差&求平均&最小值、DEF函数、EXP、TODOUBLE、DATESUBDATE、DAYS3600、行表头字段a按照相关联字段b升序。

    6. 特殊函数使用注意点:

        • 文本函数中减少使用长文本,长文本很容易导致宕机,建议文本处理尽量都放在数据集中进行。

        • IN/NOT函数,里面参数不宜过多,建议不超过100个;如果是长文本的话尽量控制在10个值以内。

        • IF公式嵌套不要超过4层,尽量用SWITCH代替IF嵌套。

        • DEF函数嵌套不超过4层

        • 1w条数据以上,尽量不使用 earlier 函数

        • 明细过滤字段不使用 FIXED/DEF 函数。

        • 明细函数不与聚合函数混用。

        • 日期转换公式尽量简单。

        • 例如,正确方式:TODATE("20240611","yyyyMMdd")

          错误方式:TODATE(CONCATENATE(LEFT(${日期},4),"- ",MID(${日期},5,2),"-",RIGHT(${日期},2))) 。

    过滤

    过滤优化建议

    1. 对于及相对固定的一些过滤,下放到自助数据集中进行;在组件中使用过滤组件的参数参与计算和过滤时,除非需要查看时动态改变参数值,否则尽量放在自助数据集解决。

    2. 将表头过滤 修改为 结果过滤器过滤 或者 过滤组件过滤,达到同样的过滤效果。

    3. 用“包含/不包含”等条件,替代 “属于固定值再进行模糊搜索”的过滤 。

    4. 减少过滤组件和明细过滤的联动,尽量使用FineBI自带组件过滤。

    5. 为过滤组件配置对应的维度表作为下拉选项,过滤控件绑定值不要与事实表绑定。

        • 维度表:用来绑定参数控件值的数据表,例:产品维度表。

        • 事实表:数据库表某业务表明细数据,数据量大,例:产品销售明细表。

    联动

    • 在5.X版本中,添加组件时,当多个组件使用的数据表是同一张数据表,或者使用的数据表之间有关联关系,那么这多个组件之间有系统默认设置的联动。

    • 在6.0版本中,添加组件时,当多个组件使用的数据表是同一张数据表,那么这多个组件之间有系统默认设置的联动。

    编辑或者预览时点击触发联动,多层联动嵌套场景,类似 组件A 联动到 组件B 再联动 组件C ,在多个组件间互相点击进行联动,超过 5 个组件时,会造成前端浏览器卡死,服务器的cpu内存上升,日志膨胀,进而导致服务不可用。

    联动优化建议:

    1. 如果实际业务场景并不需要默认联动,则关闭仪表板的【开启默认联动】;根据组件间逻辑手动添加需要的联动。

    2. 如果实际业务场景需要默认联动,但并不需要多次联动后的结果,则可以在组件间联动三次后,手动清除仪表板联动。

    导出场景

    导出优化建议:

    1. 限制导出数量:在所用表数据量较大的仪表板中说明导出限制,全局导出限制xx,组件导出限制xx。

    2. 减少数据量:通过组件过滤的方式,减小数据量、分多次导出。(BI v5.1.20及之后的版本,默认限制交叉表导出列数为100,不建议导出超过100列的数据,会有宕机风险。建议超过该限制的表格通过调整数据来满足限制。)

    3. 减少计算量:包括排序,分组汇总,计算指标,过滤等,如果计算量过大,可以做成抽取自助数据集优化。

    4. 限制导出时间:使用定时调度功能,在工程空闲时段进行导出。


    附件列表


    主题:
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持