产品文档 / Excel催化剂
Sqlserver中的窗口函数的精彩应用-问题篇
最近看到PowerBI圈子在讨论最大连续区间段的问题,即某人最大的全勤时间,某人的最长的连续打卡时间等问题的计算,佐罗老师给出了10万倍性能的答案。这个问题也引发了笔者一些兴趣,隐约记得以前看过Sqlserver的窗口函数的应用场景中有这方面的知识,这周末也花了一天时间重新温故了一翻,非常有味道,在
最近看到PowerBI圈子在讨论最大连续区间段的问题,即某人最大的全勤时间,某人的最长的连续打卡时间等问题的计算,佐罗老师给出了10万倍性能的答案。这个问题也引发了笔者一些兴趣,隐约记得以前看过Sqlserver的窗口函数的应用场景中有这方面的知识,这周末也花了一天时间重新温故了一翻,非常有味道,在此打算和大家一同分享一下。时间有限,首篇只能抛出问题,下一篇再贴出答案。


在此强烈推荐一下此书,老外Sqlserver的MVP写的,非常精彩。正因为看过这相关的书籍,才不断地向身边人推荐,做数据分析的,最好的选择是Sqlserver做数据库,无论是存储和查询都比ACCESS/Sqlite/MySQL等数据库要优秀得多。
Sqlserver同样有免费版Sqlserver Express,支持全系列的T-SQL查询,足以替代MySQL这些所谓的免费数据库。


正因为Sqlserver数据库不止于只是存储功能,其窗口函数的扩展,天生是为数据分析服务的。
在数据库环境里,轻松处理百万级别的数据,所以以上佐罗老师测试的6万条数据3秒完成,很凶残,换作Sqlserver的窗口函数来处理,600万条数据,也就一瞬间时间完成(下篇测试时再看具体时间),只能用上极度凶残来形容。
最关键的是无需天书式的公式完成,这样的天书,没有推广价值,也不符合微软爸爸的赋能普通人可掌握的思想。
所以在此也引申出一个话题,要实现某种特定场景的需求,是否真要钻牛角尖使用一种方式,例如经常听到在Excel群体里的只能用函数,不能用VBA去做。换作考试时代,这样的练习还是有必要的,但在职场时间,能够快速、简单完成手头上的工作任务,那才是王道,至于如何实现,条条大道通罗马,何必仅限于某某方法呢。
善于使用手中的各种工具,而不是对某一工具过度地使用。
凄迷于钻研深渊无底洞,这些除了炫技和培训机构去做唬人外,在实际工作场合中真心不建议。
案例题目
题目1:数据差距
数据源是一系列的连续数字,中途有断开,最终需要加工出断开的数据区域。


题目2:数据岛
同样是上述的数据源,但这次是统计出各连续的数据区域片段,期望数据结构如下:

题目1和题目2即是佐罗老师他所引出的问题,统计各个连续时间段的区间,若需要最大次数这类的答案,只需将结构区减去开始区即可,更多实际的应用场景需要将开始区和结束区一同罗列出来。当然数据源还没有做分组处理,如上述的情况只是针对一次的数据统计,而不是实际上的多个用户各自的统计结果,在答案篇我尝试去测试,今天时间来不及,大家去思考时,不妨也增加难度加上多个用户的分析情况。如数据源如下:

结语
在笔者眼中,Sqlserver是难得的数据分析利器,性能强大,功能丰富,大家不妨先预习一下了解下Sqlserver窗口函数的知识,有兴趣的不妨也购买下本文提及的优秀图书。答案将在下期尽可能详尽地讲述。