在数据处理与分析领域,Smartbi 的能力远不止于将处理后的数据直观呈现,其通过电子表格实现数据补录回写的功能,更是为业务场景中 “数据闭环管理” 提供了关键支撑。
不少用户好奇这一功能的具体落地方式,别急,本文将聚焦六大常见回写场景,拆解每类场景的实现思路,带您清晰掌握 Smartbi 数据回写的实操逻辑。
本文将围绕以下核心场景展开详细说明,逐一解析具体回写效果的实现路径:
1.1、数据库文件上传下载
1.2、ftp服务器上传下载
- 2、回写更新时间
- 3、批量回写
- 4、回写保存主键自增
- 5、回写参数联动
- 6、规范填写内容(通过正则表达式校验)
- 7、回写插入一整行
1、文件回写管理
在日常业务运营中,文件类回写是高频且关键的需求 —— 无论是业务附件的归档存储,还是跨系统文件的流转同步,都离不开这一功能的支撑。
其中,文件类回写的核心逻辑,是通过 Smartbi 电子表格回写报表,让用户能够直观选择本地文件(如 Excel 报表、PDF 附件、图片等),并按照预设规则将文件精准回写到指定位置,最常见的便是数据库与 FTP 服务两大场景。以下将针对这两类场景,详细拆解具体实现路径。
在此之前,我们先来文件回写的前提:
①文件上传下载功能只支持直接拖数据源下的表的字段。
上传下载不支持拖数据集字段,原因为产品文件下载是点击的时候才临时从数据库读取获取的文件流,如果放在数据集里面要查询的时候就把文件查出来,这样数据量大的时候会有问题。
②回写文件名需要带上文件后缀。
需确保 “回写的文件名” 完整包含对应的文件后缀(如.txt、.pdf、.xlsx、.jpg等)。
若省略文件后缀(如将 “1.txt” 仅回写为 “1”),会导致后续用户下载该文件时,系统无法识别文件的正确格式,进而显示为 “未知文件类型”。
1.1、数据库文件上传下载
上面说的回写上传下载文件的前提,接下来我们谈谈回写到数据库再进行上传下载的前提:
首先数据库得新建对应存储文件的字段,用于存储文件的二进制流数据 ,已MySQL为例,MySQL中的4种BLOB类型,其他数据库类型以实际情况为准。
- TinyBlob最大为255byte
- Blob最大为65K
- MediumBlob最大为16M
- LongBlob最大为4G
另外需要注意,MySQL数据库要回写的话,需要数据源链接字符串加上&useServerPrepStmts=true 的参数,否则会回写文件失败。

基于上面前提,下面开始进行报表开:
①数据库建表,用于存储对应数据及文件
本示例中建了3个字段,c_id(主键字段)、c_filename(文件名称)、c_file(文件),同时把表映射到smartbi中,具体看下图:

②新建电子表格,定义对应静态表样

③拖拽字段到对应单元格,其中上传文件直接空的,配置填报属性上传即可,如下:
(1)C4单元格:c_id字段,填报属性为数字,其中为了方便补录,勾选允许插入行

(2)D4单元格:文件名称,填报属性为单行文本

(3)E4单元格:上传文件,单元格中输入静态文本,具体文本可自定义,填报属性配置为文件,上传选择数据库

(4)F4单元格:下载文件,拖入的是主键字段,此单元格是点击下载,故不用配置填报属性,配置格式为文件,接着根据实际配置对应显示的名称。
注意:因为下载文件需要关联对应文件,所以为了保证唯一性,此单元格拖入进去的字段必须是主键字段。其中显示内容是单元格显示的文本,可根据实际配置,文件名称和文件字段分别配置即可。


④回写规则设置
配置好了填报属性,接着就可以配置回写规则了,回写规则如下:

⑤上传文件
配置好之后就可以发布预览进行填报,上传对应文件即可

⑥下载效果
保存后效果如下,此时点击下载文件下方的单元格,即可下载刚上传的文件。

小tip:此时还需要手动输入文件名称,那有没办法不需要手动输入,直接获取上传文件名称,然后回写到数据库呢?
我们可以用公式引用上传文件单元格,如下图:

接着回写规则文件名回写G4,隐藏G4即可。

1.2、ftp文件上传下载
上面讲了存储到数据库的场景,接下来我们来实现通过ftp进行上传下载文件,整体逻辑其实是一致的,只不过一个是存储到具体表,一个是存储到服务器那边。
①ftp服务器配置
首先要回写到ftp服务,肯定是需要配置对应的服务器地址,不然没地方存储文件的。配置入口就是运维设置—>系统选项—>公共设置—>文件存储位置设置

找到后我们点击设置,会弹出来框,这个时候根据实际配置对应地址、用户密码即可,配置好之后,右侧可以点击测试链接,可以测试对应服务器是否是通的,也就是是否能正常使用。像上图,第一个是点击测试的效果,第二个是点击测试后通过,第三个为不通过。

②数据库新建表存储
配置好之后接着来数据库新建表存储,本示例表结构如下,跟数据库存储文件不一样的是,文件字段是字符串字段,用于存储上传到ftp的文件信息。

③表样设计
本示例跟上面回写到数据库示例表样一样。

④拖入字段,设置填报属性
(1)C4单元格:编号字段,勾选允许插入行进行补录;

(2)D4单元格:拖入文件名称字段,只是用于展示,不做回写,用辅助的G4获取上传的文件名称回写进去,最后隐藏G列即可;

(2)E4单元格:上传文件,配置上传至ftp,选择对应ftp及目录,其中ftp站点是前面系统选项公共设置配置的,路径的话是配置ftp的相对路径;


(3)F4单元格:配置下载文件,具体根据实际配置字段及显示内容。

⑤回写规则设置

⑥上传及下载效果
发布后此时就是可以正常上传文件到ftp,以及下载效果如下图:


2、回写更新时间
还有一个场景很经常遇到,即,设置回写报表时还想要知道数据是什么时候更改的,那这东西咋取到的呢。我们可以通过简单的三步实现保存自动记录修改时间:
2.1、在需要记录时间的单元格中输入公式:=NOW()
- 通过该公式会自动获取当前日期
- 每次保存时,这个时间会自动更新

2.2、设置回写规则时注意:
- 将回写规则里面对应字段的单元格设置为该公式所在单元格
- 必须勾选【回写所有内容】

为什么需要勾选【回写所有内容】?
这里就要复习下回写规则的两个设置了:
- 回写修改内容(默认选项):回写规则所对应的回写表中,只有当回写表中的数据发生了修改,修改的数据才回写到数据表中。一般适用于回写表和电子表格数据表是不同的。
- 回写所有内容:不管数据是否修改,所有数据都会回写到数据表中。一般适用于回写表和电子表格数据表是相同的。
在上述场景里,【回写修改内容】只会回写被手动编辑过的单元格数据,即鼠标点击过的单元格。而像=NOW()这样的公式自动计算的结果,系统不会识别为"修改"。
因此,要确保更新时间能自动记录到数据库,必须勾选【回写所有内容】选项。这样每次保存时,所有数据(包括公式计算结果)都会被回写到数据库。
简单来说:
- 用公式计算的单元格值要回写到库里 → 选【回写所有内容】
- 只回写手动修改的数据 → 选【回写修改内容】
【温馨小贴士】
- 如果你发现设置的通过公式计算的值没有保存到数据库,首先检查是否勾选了【回写所有内容】
- BI自带的ssr公式不支持回写,所以即便是勾选了【回写所有内容】,那也是不生效的。这点请注意了!
3、批量回写
回写是个好功能,但是数据量大需要一条一条回写的时候,很麻烦,有没有比较快的办法呢?有的,朋友!就是批量回写。批量回写有以下配置需要注意:
1、拖拽数据集中展示的需要回写的表的字段,并在回写规则里面勾选上【允许批量导入】:

2、之后要记得配置对应单元格的填报属性,按照实际落地的表的字段属性进行配置即可:

3、设置父格属性为【默认】,其中,数据设置必须为【列表】:

4、到这里就设置好了,接下来我们验证下,首先准备一个需要批量回写的文件,也可以直接下载当前模板填入数据后上传:

注意:文件后缀名必须为”.xlsx“,且该表中的sheet个数与填报报表个数一致,sheet1名称也要与回写表里面的sheet名称一致,本示例中Sheet的名称为,Sheet1:

在下载的模板中填入上述数据后保存,在批量导入的界面上传保存的.xlsx,保存成功后页面即可展示刚才上传的数据:

这个功能还是挺方便的吧,但是有比较多的注意事项,大家在用的时候要留意了,很多时候批量回写不生效可能是没有满足以下条件:
- 1、父格必须是默认父格。
- 2、数据设置必须是列表。
- 3、填报报表所在sheet名称与Excel文件导入数据所在sheet名称必须一致。
- 4、回写设置时,必须勾选”允许批量导入“项。
除此以外,因为批量回写相当于把Excel文件中的数据全部插入到电子表格,保存后落地到数据库,所以数据量大的时候可能会浏览器内存溢出,故数据量大建议可用此前数据入库中的Excel导入模板,地址:数据轻松入库,高效分析即刻开启!-二、Excel导入模板,配置好后可绑定到电子表格,工具栏也会有按钮,点击后就会弹窗让用户选择文件上传。


4、回写保存主键自增
有一些场景下,主键字段并不需要用户手动输入填报进去,想要每次自增回写到数据库中,那咋实现呢?
①首先,需要数据库表字段配置好自增,否则产品这边无法实现。本示例表结构如下,数据库建好后通过数据源管理映射到产品这边;

②新建表样进行回写,编码单元格配置数字,勾选允许插入行,后面单元格均配置为字符串即可;


③配置回写规则,同时编号字段右键配置“设置主键(自增)”;

④配置好之后进行回写即可,此时编号列不需要回写,会自动生成序号回写到数据库中,如不需要展示此列,隐藏列发布即可。此时一张主键自增报表就配置好了,当填入对应单元格数据后,点击保存即可生成自增的主键。

5、回写参数联动
回写报表不单单支持手动输入对应数据,还支持绑定参数,选择参数后将选择的值回写到数据库中,并且有些时候需求还要求说选择A,B参数能自动联动出来A下边的数据,那这个怎么实现呢?
此示例以主键自增为示例,实现区域、省份联动,选择对应区域后,联动出对应区域下的省份,接下来让我们一步步实现参数联动效果。
①首先需要新建参数,我们去【系统运维】—>【全局资源定义】—>【参数定义】里新建好区域和省份参数,其中省份参数基于区域参数联动出来;

区域参数配置为下拉框,备选值如下:

省份参数本示例也配置为下拉框,备选值如下,细心的小伙伴就有发现,后面还有个where条件,拖进去了上面刚新建的区域参数。没错,就是通过拖参数,实现后面where部分动态过滤数据,返回满足要求的数据,从而实现参数联动。

②建好参数后,那接下来就要报表中绑定,跟上面填报属性的入口一样,只不过填报属性类型选择参数,分别将区域和省份绑定好即可。

本示例中,因为本身是拖了字段,省份左父格为区域,所以已经实现了对应效果,如下图,区域选中的是华东,省份也联动出华东下的省份。

但是有些场景是空表单回写,比如类似下面的表样,此时需要把省份回写单元格左父格配置为区域所在单元格,让其实现父子联动关系,否则无法实现联动。配置参数联动最主要的就是看父格设置是否生效。如果联动不正确,优先检查父格设置是否正确噢!

6、规范填报内容
在上述示例中,有个电话以及邮箱的字段,有些小伙伴可能就想限制用户输入的内容,比如手机号那不能是少于11位的,邮箱格式也得满足,那咋搞呢。不用慌,支持的!
回到我们的填报属性,看,配置项有个正则表达式,是的,没错,可以通过正则表达式限制,像手机号是要11位,正则表达式配置为:^\d{11}$,然后下方可以自定义不满足正则表达式时候的提示。

这个时候填报不是11位小数就会弹出提示了。

当然,也可以显示第二位数是什么,比如显示第二位只能是1 3 5,那可以配置为:^1[3,5,8]\d{9}$,具体可参考相关正则表达式语法哦。
邮箱也是类似的,例如可以配置为:^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$,那不满足正则表达式的也会提示。

总之,这块可以根据实际场景需求自己去配置正则表达式,限制用户填入的内容即可,还是很灵活的~
7、回写插入一整行
在回写中,很经常是需要插入一行进行补录数据回写,但是是不是经常有小伙伴点击插入行后,莫名奇妙的有合并单元格了呢,那如果要插入没有合并单元格的一整行咋办呢?下面就教你如何轻松实现插入一整行的效果。
(1)动态扩展字段
还是以上面主键自增那个资源示例,其实只要第一个扩展字段“编号”单元格勾选“可以插入/删除行”即可,后面单元格不需要配置,此时也能选中新增行,且会往前读父格,从而实现插入一整行。

(2)非动态扩展字段
第一个编号字段就不是动态字段,只是ssr函数或者是row函数等出来的静态数据,此时因为没有扩展字段,填报属性是不能勾选“可以插入/删除行”,那这个时候要怎么处理呢?
此时有两种处理方案:
①第一列还是拖个动态字段进去,然后勾选填报属性,并勾选“可以插入/删除行”,回写规则不回写此单元格,界面也直接隐藏,此时后面单元格一样可以插入行。

②如果表样不方便第一列拖个辅助列,那可以可以宏去实现,宏参考地址:电子表格回写点击任一单元格插入整行
上述示例中用到的资源可从此处获取: writedb_zhangsan_all.zip (91.72 K)
压缩包里面包含建表语句以及orders表的示例数据,为MySQL数据库,导入资源和建表语句后请记得修改数据源的连接字符串。
以上就是我们一些场景的回写场景示例,大家如果有其他更好的想法,欢迎到评论区交流互动~ |