麦粉社区
>
帖子详情

[数据准备] 告别字段碎片化!SmartBI 多场景字段合并实操指南

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

一、案例场景


在 SmartBI 中,合并字段是常见的数据处理需求,例如:



1、将分散的省、市、区、街道等字段合并为完整地址字段,便于地理分析或空间定位。


2、合并姓与名字段为全名,解决用户信息碎片化问题。


3、将年、月、日字段合并为标准日期格式,支撑时间维度分析。


4、数据存在于多张相同结构的表中,需要将数据行做合并处理。


碰到以上类似场景如何处理?接下来我们会介绍多种处理数据字段合并方式并介绍他们各自的优缺点及适用场景。


二、字段合并解决方案对比







































实现路径



合并方式



适用场景



适用对象



注意事项



数据准备层面



 


SQL处理



1、数据库直接输出整合后的字段,减少数据传输量,尤其在大表查询时显著提升效率;


2、拼接逻辑可随SQL脚本迁移,减少应用层适配成本;


3、统一数据格式,避免前端/应用层重复处理;


4、多表纵向合并:将结构相似的表(如季度销售明细)合并为年度总表,适配年度分析、趋势预测等场景;



数据分析师



1、字段长度限制:需关注数据库字段长度约束(如VARCHAR(255)),避免拼接后数据截断。


2、空值处理:使用COALESCE或IFNULL处理空值,避免拼接结果出现NULL(如CONCAT(COALESCE(first_name, ''), ' ', COALESCE(last_name, '')))。


3、超大数据量拼接时,可能存在全表扫描或临时表膨胀。


4、去重操作(UNION)在大数据量场景下可能影响性能,并且需确保各SELECT语句的列数、数据类型严格一致,否则可能导致查询失败;



 数据模型(计算列)



1、支持跨库联合查询,无需数据迁移;


2、通过可视化界面配置处理,使用门槛低;


3、公共模型上处理后,后续各类报表层面皆可复用;



数据分析师


 


普通业务人员



1、跨库查询依赖网络与源系统性能,高频更新场景可能影响实时性;



ETL数据预处理



1、拖拽式工作流设计,无需编程,业务人员可自助操作;


2、支持数据行列合并;


3、内置丰富预处理节点,除了支持字段合并,还支持数据去重、排序、元数据编辑等操作;



数据分析师


 


普通业务人员



1、实时性与更新延迟,对数据实时性要求较高的场景不太适用;


2、加工处理后的数据需要额外再存放在另外一张新表或者高速缓存库中;


3、项目上需要采购有 ETL模块才能使用



报表层面



 计算列



1、通过可视化界面配置处理,使用门槛低;


3、无需调整数据模型,不影响其他报表;



数据分析师


 


普通业务人员



1、在报表层面新增计算字段时只对当前报表有效,不方便在其他报表上复用



三、各类方案操作详解


方式一:SQL处理


(1)列合并


实现方式:在sql语句中使用 CONCAT函数或|| 、 + 运算符。


示例:


连接函数


CONCAT():通用函数,支持多个参数拼接(至少2个),自动将非文本类型转为文本。


MySQL/SQL Server/PostgreSQL/Oracle:


sql示例:


SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;

注意:



  • MySQL中CONCAT()遇NULL返回NULL(可用CONCAT_WS()规避);

  • SQL Server 2012+支持CONCAT(),自动处理类型转换;

  • Oracle需用||或CONCAT()(仅支持2参数,如CONCAT(CONCAT(first, ' '), last))。


CONCAT_WS()(MySQL/PostgreSQL):带分隔符的拼接,自动跳过NULL值。


sql示例:


-- MySQL
SELECT CONCAT_WS(' - ', region, city) AS location FROM addresses;

-- PostgreSQL
SELECT CONCAT_WS(' | ', col1, col2, col3) FROM table;

字符串连接运算符


||(Oracle/PostgreSQL/SQLite):


sql示例:


SELECT first_name || ' ' || last_name AS full_name FROM users;

+(SQL Server):


sql示例:


SELECT first_name + ' ' + last_name AS full_name FROM users;

注意:SQL Server中+连接数字时可能触发隐式转换(如123 + '456'→579),建议用CONCAT()避免。


适用场景:



  • 适用于在数据查询阶段

  • 注意:需确保字段类型为字符串,非字符串需用 CAST 转换,另外不同数据库语法支持情况不同,需按实际情况选择。


(2)行合并


实现方式:使用 UNION 将多个字段纵向合并。


示例:
将“销售额”和“运费”合并为“金额”字段。


          


适用场景:



  • 整合结构相同的数据(如多个月份表合并)。

  • 注意:需确保字段类型和顺序一致。并且UNION会去重,如保留所有行则需使用UNION ALL


                   


       


方式二:使用计算列


(1)数据模型层面


实现方式:在数据模型或报表中创建“计算列”。


示例:


1、数据模型中“维度区”新增计算列


        


2、在新建计算列界面,选择文本函数CONCAT到公式区,并添加需要合并的数据字段


                         



(2)报表层面


1、除了在数据模型层面增加计算列,产品还支持在即席查询、透视分析等报表中添加计算列,具体操作如下:


         




适用场景:



  • 在报表层动态合并字段,无需修改底层数据。

  • 需要重复使用合并结果的场景。


方式三:使用ETL数据预处理


实现方式:在数据加工处理阶段使用ETL 工具合并字段。


示例:


在ETL中,添加“派生列”节点,选择CONCAT函数,添加需要合并的字段后点击确定即可。


        


        


适用场景:



  • 合并逻辑复杂或需跨表关联。

  • 提升报表性能(减少实时计算负担)。


 


最后,还是来个任务巩固下吧——>点击领取任务

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

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

社区

指南

AI

搜索

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