时间:2023-01-19 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{数仓避坑-整明白懂粒度}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的数仓避坑-整明白懂粒度内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
上篇文章数仓避坑-搞懂维度模型介绍了维度建模经典的四部曲:选定业务过程、声明粒度、确定维度、确定事实。 第二步中,粒度的概念着实有点抽象,很难理解。但是,如果粒度整不明白,近乎等于数仓没入门,你将会面临一系列问题~ 今天就给大家分享一下,我踩坑粒度的过程。 一、先说说粒度的概念选定了分析的过程,紧接着就要声明粒度。看到书里这么说,我当时的反应是:为什么?粒度是什么?普通场景里,粒度可以理解为一个东西的大小。 比如,钻石要区分颗粒度,大小不同的钻石,价格不一。而在数据分析的语境里,粒度则意味着分析的范围,分析的细致程度。举两个例子。 系统的注册总人数,可以按照国家、省份来统计,这是地域层面上的不同统计粒度。系统的活跃用户数,可以按天、按周统计登录人数,这是时间层面上不同的统计粒度。 从数据表的角度来看,粒度则解释着什么情况下增加一条记录。按国家统计用户数,中国只会有一条记录,按省统计,中国则会有34条记录。 按周统计活跃用户,一年只会有 52 行记录,按天统计,一年则有 365 或 366 条记录。 二、通过实战理解粒度好,看书搞懂了概念,实战就来了。公司出了新 APP,老板很关心新 APP 的用户活跃程度,于是,用户端产品经理希望做个面板,看每天有多少人登录。 同时,他提了另一个需求,他希望能支持统计两个日期区间内的登录人数(两个日期是变化的)。 通过例子理解:某个活动发布后,要查看不同时间区间内的累积活跃用户数,比如1-2号,3-5号,以便及时调整促活的策略。 初生牛犊不怕虎,说搞咱就搞,就按照维度建模经典套路搞。 首先,选定业务过程。这个一目了然,自然就是用户登录过程。 其次,声明粒度。这里用户方希望按照不同的日期统计累积人数,那粒度是天。 然后,是确定维度。这个例子里,因为要按照日期分析,最主要的维度是日期(为了简单,例子里就就先不考虑其他维度了),日期维度表设计如下: 最后,设计事实表。这个也不难,用户登录事实表(fact_loign)设计如下: 三下五除二,维度模型搞定!就等写好 ETL 脚本,按周期调度啦。 三、维度模型搞不定,是粒度理解不到位构建模型,最终都是为了查出对应的指标和结果,所以维度模型通常都会跟标准的指标系统配套来使用。对指标体系不太了解的朋友可以看这篇: 一文帮你更好地理解指标,或者看华为阿里的产品。当我们按照标准套路,进入指标设计阶段,问题就会慢慢浮出水面了。基于事实表模型,我们很容易设计原子指标【登录人数】,其计算逻辑为
进而,我们也能设计出衍生指标【日期_登录人数】,其口径为: select distinct count(fact_login.user_id) from fact_login left join dim_date on date.date_key 浙江重型卡车企业策划报价= fact_login.login_date group by dim_date.date_key 从衍生指标这里,就能发现问题了。你会发现,group by 后的结果,太原小红书笔记关键词排名是按照每天进行去重的。 最终的结果,只能是统计每天范围内的累积登录人数。用户的期望是,统计某个时间区间内的累积登录人数,这个需求维度模型产生的指标没法满足。如果事实表的真实数据如下: 基于维度模型,系统可以生成这样的汇总表: 但系统无法生成如下汇总表: 需求只能搞定一般,这可怎么交差? 四、粒度是搞清问题的关键刚开始,我很疑惑,想了各种办法也没办法解决。后来才意识到,问题根源其实是粒度。 让我们回归到真实场景里:登录成功,这个事件发生在一瞬间。常见的时间计量单位有年、月、天、小时、分钟、秒、毫秒、微秒等等。而系统记录某个操作,常见的记录粒度是秒。 比如, 2021 年 6 月 27 号 14 : 00 : 00,小明登录了系统。如果按照秒去统计登录人数,则完全不用考虑去重,因为小明在这个粒度的计量单位里,只能登录一次。但秒级别的统计粒度,太细了。 业务方希望从更加宏观的角度去统计和分析,例子里面,是以天为单位去统计。 那这个时候,统计就要升粒度了,并且,要去重。此时,系统也是可以按照天的粒度进行去重统计的。那问题又是啥呢?再看看实际需求时,统计的时间区间是不固定的。 即,业务方可能今天想统计 1 号到 2 号的登录人数,明天想统计 3 号到 5 号的登录人数。这个时候,就没法玩了,为什么呢? 粒度不固定:1-2号,间隔时间是1天,3-5号,间隔时间则是2天。维度建模中,声明粒度就是要把粒度的大小定下来。 不管是什么维度,都要提前把粒度定下来,这样才能实现累计去重。 从技术实现的角度来看,如果查询的粒度,是一个变量,而不是一个固定值,没法提前计算,只能临时用明细表算,这就叫做即系查询。 所以,这个需求中,维度建模只能解决前面部分的需求:按照天去重统计每天登录人数。而变化区间的去重统计,只能即席查询了。 五、最后,说点学习经验维度建模工具箱这本书,一再强调粒度的重要性,大概率就是因为粒度这玩意,太抽象,不好理解。 当初,我就在这上面理解出了差错,陷在维度建模的漩涡里。 本人愚笨,看书好久,都没明白粒度的真正含义,被真实业务需求痛扁一顿后,我才体会到粒度的真正含义。 作为一个新人,接触到新的方法或者工具,我们是兴奋的。 与此同时,我们也要谨防 “捡到锤子,看什么都像钉子”,没有能解决所有问题的方法和工具,特定场景,选用特定的工具。死磕核心概念,结合实际场景去理解,搞懂了,很多问题就通了~
作者:lee;公众号:乐说乐言 本文由 @lee 于,, ,基于 CC0 协议 |
上一篇:从0到1,轻松构建数据预测模型
下一篇:在线教育大数据营销平台实战(一):大数据平
小提示:您应该对本页介绍的“数仓避坑-整明白懂粒度”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通数仓避坑-整明白懂粒度的相关事宜。
关键词:1年, 初级, 数据分析,