文章 / 公众号历史文章
「Sqlserver」数据分析师有理由爱Sqlserver之六-让Sqlserver拥有字符串聚合函数
在数据处理过程中,有一需求也是经常性遇到:对字符串的聚合操作,一般来说,聚合类函数只会在数值类型上进行计算,但有时为了人的阅读需求,将字符串进行聚合操作,得到一个用于备注性的信息查阅,还是有必要的。 在Excel环境中,可以用PowerQuery轻松实现,但在数据库层面,实现这样的需求也还是颇曲折的
在数据处理过程中,有一需求也是经常性遇到:对字符串的聚合操作,一般来说,聚合类函数只会在数值类型上进行计算,但有时为了人的阅读需求,将字符串进行聚合操作,得到一个用于备注性的信息查阅,还是有必要的。
在Excel环境中,可以用PowerQuery轻松实现,但在数据库层面,实现这样的需求也还是颇曲折的。
本篇正要行文时,百度了一下,竟然最新版Sqlserver2017已经支持本篇的实现效果,技术的进步,过往的方案将被丢入封尘角落,不过还好,官方实现的效果还是有一点点不是太完美,还可以拿出来再讲解并使用的。
使用场景
聚合后的字符串,很难再有分析的价值,正如引文所述,更多地用来作一些备注性浏览使用。
在一个常见的场景中,不同用户分别购买过哪些的订单,将其所有订单号合并起来展示,这样的需求,就类似于将不同客户的购买数量汇总一样,只是后者是可真实地相加的汇总,前者是字符串的拼接,中间一般用分隔符隔开方便阅读。
虽然说在Excel环境或PowerBI环境可以同样实现这些功能,但有时方案的可行性需要考虑客观情况,用户电脑是否有高版本的Excel支持PowerQuery或有PowerBI可使用,若没有时,使用Sqlserver上将数据加工好,直接让用户端调用此查询的结果,这样就非常有应用价值了。
所以很多时候不是自己会做,更多时候还要让其他不会做的人更轻松更低成本地获得所要效果,这就衍生了许多IT级的解决方案来了。
Sqlserver官方实现函数
以下两个函数,可用于字符串的聚合和重新拆分,都是高版本Sqlserver所提供的,STRING_AGG是Sqlserver2017提供,STRING_SPLIT是Sqlserver2016提供。
STRING_AGG (Transact-SQL) - SQL Server | Microsoft Docs https://docs.microsoft.com/zh-cn/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
STRING_SPLIT (Transact-SQL) - SQL Server | Microsoft Docs https://docs.microsoft.com/zh-cn/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017
自定义函数安装
和上一篇一样,只需打开sql文件,点击运行即可(因程序集已经在上一篇中安装过,程序集内部已经有此篇的函数,此篇的sql只是对程序集内的函数作外部引用说明,故真正需要使用时,需安装上一篇正则表达式的程序集,再运行本篇的sql)。

字符串函数安装
当安装成功后,在【可编程性】=》【函数】=》【聚合函数】的位置会出现本篇所提供的4个自定义函数。

自定义函数所在位置及参数调用
4个函数其实都是实现字符串聚合的效果,区别在于,若需要对聚合的字符串进行排序,可以传入排序的依赖列,而依赖列的数据类型不同,所需要使用的函数也不同(水平有限,只能实现到这个地步,官方的原生函数效果更佳)。

字符串聚合函数实现效果,和官方函数一致
比官方函数实现更多的一个选项是可以去重,在实际需求中,去重的效果还是蛮常见的需求。

自定义函数有去重效果
最后也演示下官方的单行拆多行的效果

官方拆解函数
结语
本篇带领大家领略Sqlserver的CLR开放接口,让.NET的能力可以在Sqlserver得到延伸,区别于正则函数属于标量函数,本篇的自定义函数属于聚合函数。
虽然说Sqlserver在新的版本里不断地加入新的功能,但作为企业级环境,一般更换升级数据库版本,不像更换OFFICE软件那么容易,涉及到生产业务系统的切换大工程,同时也是产生沉重的成本负担的。
一般来说都是将产品用到尽头,即微软宣布不再维护如2019年宣Sqlserver2008R2已到生命周期,停止维护了企业才有动力去更换。
当然对于业务分析类需求,自行安装一个用于分析类需求的数据库,切换成本就很低,可以尽可能地升级到最新版本享受高版本强大功能的红利。
没有这样的条件,使用自行CLR扩展也是一条非常可行的路线,另外可以尝试下类似OFFICE365那样永远保持最新版本的Azure SQL,也是非常棒的体验,永远最新版,不用担心切换升级的成本和风险。
笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。
相关阅读
「Sqlserver」数据分析师有理由爱Sqlserver之一-好用的插件工具推荐
「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver
「Sqlserver」数据分析师有理由爱Sqlserver之三-最值得使有低投入高产出的Sqlsever
「Sqlserver」数据分析师有理由爱Sqlserver之四-七大数据库产品测评Sqlserver
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2\_NZJ8v7C9eqhNjdnP3Q

联系作者

公众号
取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。
最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!
关于Excel催化剂作者
姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)
技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。
擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。
2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。
和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。