数仓分层能减少重复计算,为啥能减少?如何减少?这篇文章包懂!

0 评论 1598 浏览 3 收藏 9 分钟

数仓分层是否可以帮忙减少重复计算?关于这个问题,这篇文章的作者尝试用生活化案例,结合粒度的概念,来进行问题解答。一起来看看吧,或许会对想了解数仓分层的你有所启发。

很多时候,看一些数据领域的文章,说到为什么做数据仓库、数据仓库要分层,我们经常会看到一些结论:因为有ABCD……等等理由,比如降低开发成本、减少重复计算等等好处。

然后,多数人就记住了ABCD。但是,每每被问起来,为什么,有什么案例,你是怎么理解的,就被问住,傻眼了。

概念套概念,没意思,不如返璞归真,从生活案例重新理解起~

一、从统计班级人数开始

本文将用生活化案例,结合粒度的概念,帮你理解常说的减少重复计算。

假如,你带一个班级,你是班主任,你上第一节课。但你不知道班上到了多少人,于是,让同学们报数,班上有 30 人,从 1 报到 30,每个人报一次数,一共30 次。

第二节课,来了科任老师 A, 他也想知道班级人数,于是也让同学们报数,从1 报到 30,又是 30 次。

第三节课,来了科任老师 B,他也想知道人数,于是…

第四节课,来了科任老师 C,他也想… 好,一次又一次地报数,同学们烦了。于是有个聪明人记录下来,写到黑板上。

第五节课,等到科任老师 E 面带微笑地走进教室,问班里一共多少人,笑着说,同学们,要不我们来报数吧?

孩子们异口同声地对老师说:老师,请看黑板!

你看,把结果记录和存储下来,就不用再从 1 报到 30才能知道结果了

这就是减少重复计算了!

二、思考思考粒度

我们再看看粒度。

关于粒度,我曾在数据仓库的文章里讲过,可以回看下:数仓避坑-整明白懂粒度

按照报数规则,一个人只能往另一个人的报数上加一,班级人数这个数字每加一,背后对应的就是一个新的人。

人不可再分,最小就是1,不存在0.5个人,班级人数这个数字的最小粒度,就是人。

粗一点的粒度是什么?以班级为粒度单位报人数,可以只用报一次。

粒度还可以是组,班级里面,我们可以按照不同的方式给同学们分成不同的组。常见的,按照列分组。

其实,这种分组,是按照同学们所坐位置的物理空间来划分的。

我们还可以划分其他的组,比如,按照出生月份,住的小区,兴趣爱好,等等进行分组。

当我们想知道,某个组有多少人,并不需要每次都从最小粒度去统计人数,都去报数,我们都可以把组,这个相对人来说,更粗的粒度的数字统计出来,记录下来, 下次再有类似的提问/请求,直接拿粗粒度的统计结果,也就是直接回答,这个组有多少人。

这就是,减少重复计算的生活化案例,是不是比构建指标体系、搭建中台、减少重复开发、重复计算,要具象多啦~

三、当问题开始复杂,分层的好处出现

刚刚,我们解决了班级粒度的事情,现在,你是校长了。

你的管理范围变大了,至少,统计人数,你先核心是关注更大层面的统计数据,比如全校人数,各年级人数,然后当有一些班级人数分配不均匀的时候,再细致看某个班的人数。

有了班级、年级人数,那么全校人数就好办啦~层层往上汇总累加就好了,总不至于全校开大会,从头报到尾吧。

管理的场景,问题是多如牛毛的,不同场景,所需要的统计数据、分组,都不尽相同。

在招生期间,你要知道每个学区给定的学生名额数,还有一些特长生的名额;

在日常管理期间,你要知道不同年级学生出勤、上课的情况。

更重要的是,你得了解学生的成绩情况。不同年级、不同学科、不同类型的学生,绝对分数,分数的变化趋势。

虽然咱们搞素质教育,不对外暴露这些信息,避免攀比和比较,但是最终落到学校的升学人数、升学率的时候,这些过程性的数据又是我们不得不关注的。

所谓的分层,是分而治之,分而算之。

光讲好处,问题就没有了吗?肯定是有的,比如,我们要额外地记录一些数据,要保证这些分而算的数据的准确性,相当于是信任这个分层数据的提供者。

整个过程中,还要从分析的角度出发,去设计很多分层里面的相关维度、共性维度。关于维度,可以看这篇:数仓避坑-想清楚维度

四、企业里的重复计算

回到企业的环境里,我们会对用户的观看图片、看视频、看直播的行为事件进行统计、计数,看了几次,看了多长时间。

我们也非常关心用户看完这些,到底花了多少钱,送了多少个礼物,买了多少直播间里的商品。

我们会从各种角度对这些过程行为、消费结果进行拆解和统计。

于是乎,企业里会有非常多需要统计、计数的数据。

比如,埋点会上报某个用户在某市某刻观看了A视频,用的手机是苹果,操作系统的版本是IOS7.x,用户所在的IP解析出来是在一线城市。

观看完之后,进入到了讲某个商品的直播间B,系统也会记录,在直播间B下单购买了商品C,金额是99,购买的个数是4个。

当我们要去统计,一线城市的用户观看A图片的次数,购买商品C的数量和金额的时候。

我们会跟之前统计班级人数、分组人数一样,要统计这些结果。

我们可以提前把一些结果提前记录下来,然后每次其他人要查询相同信息的时候,就不用每次都要「报数」了~

比如,今年小米发的双十一战报。

可能很多人都想要这个结果,用于宣传或者分析,那我们直接把这个数据存下来,当别人要的时候,直接拿出来就好了(图片里面,还备注了数据的统计口径)。

具体的一些后台报表,我就不去举例了,大家体会到重复计算到底是怎么回事,就可以了。

关于这些数据是怎么存储的,可以了解数据仓库维度模型:数仓避坑-搞懂维度模型

专栏作家

Lee,公众号:数据产品小lee,人人都是产品经理专栏作家。关注直播、短视频和文娱领域、擅长数据架构、CDP及数据治理相关工作。

本文原创发布于人人都是产品经理,未经许可,禁止转载

题图来自 Unsplash,基于 CC0 协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!