00:00
啊,好了各位,那接下来我们看一下用户留存率这个需求怎么去做,呃,其实刚才呢,在呃布置这个需求的时候呢,我其实给了大家一点提示,我说就是咱在做这个需求之前,一定要先明确,就是我们这一天的计算任务是什么,对吧?OK,好,那咱现在呢,就先把这个事儿给他明确一下,然后呢,假定啊,咱们现在拿到的这个数据最新的日期是2020年的六月14,我说的是数据最新日期啊,拿到14号数据证明我们现在时间应该是已经15号了,对吧?啊OK,好,那接下来咱继续往下进行啊,继续往下进行,好,那你拿到这一天的数据之后,你到底能算哪些留存呢?按照咱们之前的分期,是不是应该是能够算2020年的6月13日的,诶来一个,诶这个不切过来呢,日,然后得什么呀,是不是一日这个留存啊,对吧?哎留存啊存啊留存啊,OK好,那这个搞定搞定之后我们继续往下走走走走走走,那完之后我们还能算什么呢?还能算六。
01:00
5月12号的是不是两日啊,对吧,6月11号的三日,6月10号的是不是这个四日啊,对吧?好呃,四日,然后呢,然后呢,我们再再往下进行,下边的应该是九号的对吧?应该是九号的五日留存,然后再往下呢,是八号的六日留存,对吧?八号的来一个六,OK,那我们再继续往下走,下边应该是七号的这个七日留存,对吧?这是不是应该是我们这一天里边应该算的这七个留存呀,对吧?诶20这个规律确实很明显,但是大家有没有想过啊,你说为什么这么巧,这几个留存就非得在这同一天去算呢?他们之间有什么联系啊?这几个留存之间有什么联系?有什么联系?啊,上下都相差一对吧,这个这不叫联系,这个咱们看到的规律对吧?啊,他们他们有啥联系,这个联系很明显啊,来咱们分析分析,大家想一想,你说我要是想去算6月13号的一日留存,对吧?你需要什么数据,需要13号的新增对不对?还需要什么,还需要拿到是不是13号一天之后的,也就是14号的活跃呀,对吧,对不对,咱们得知道这13号的100人新增的人当中有多少人在14号活跃了,对吧?是不是得拿到13号的新增和14号的活跃没问题吧?好,那你再往下看,你想算12号的两日留存,你需要拿到什么数据,是不是需要12的新增,以及12号两天之后,也就是14号的活跃吧,对不对?OK,你会发现剩下的这些留存,他们其实都是在等什么呢?都是在等14号的活跃,所以说我们把14号的数据拿到之后,是不是这几个留存就可以一块算了,对不对,这是这几个留存之间的一个联系啊,好了,那这个咱们先搞清楚,那接下来我们就继续往下进行,下边咱们就来分析分析这个东西到底么做呀。
02:47
怎么去算这个流水呀?OK,这里边最直接的一种办法就是怎么做,我能不能先分开求,我先分开求呗,对吧?分开求完了之后呢,我再给它合并起来,是不是应该是一种思路对吧?好,那咱们现在就按这种最简单的思路去做,咱们先分开求好看一看这个分开求怎么求啊?呃,分开求的话,我们先看第一个电流,当前我们要计算的任务就是6月13号的一日留存,对吧?要想算6月13号的一日留存,当然这个留存说的准确一点应该是留存率对吧?OK,你要算这个留存率,我们需要求两个值对吧?哪俩值?一个是6月13号的新增用户数对吧?还有一个呢,是6月13号的一日留存用户数,对不对?需要算这俩数,算完之后是不是一笔就是那个留存率啊,对吧,那现在咱们分开求,我们现在一个来先求6月13号的新增用户数,好,6月13号的新增用数怎么求怎么求。
03:44
增经很简单呀,那咱们是不是首先什么叫新增,你今天注册了,你是不是有今天的一个新增用户啊,对吧?好,那我们这儿对应的业务过程肯定是注册那个对吧?好,那所以说我们这儿呢,是不是能想到的就是DW层的注册时表啊对吧?DWS层我们没有相应的汇总表,所以直接去DWD找就行了,所以谁来的from一下DWD层的应该是,诶应该是那个DW,然后呢,下划线,呃之后呢,我们找到那个user应该是register INC,是不是找这这张表就行了,对吧?好,我们要先想找到13号的注册用户,我们只需要怎么办,是不是拿它13号的分区就行了,零六杠幺三拿13号分区行不行?没问题吧,那能不能行,咱们是不是得知道这张表它是怎么去做的,这个分区规划,对吧,一天一个分区,每天的分区是不是存放当天的注册成功的记录啊,对吧?好,那么了,我们只需要拿十三二的分区就能拿到13号的注册记录好之后呢,我们要求的是什么?是新增的用户数对不对?所以说我们最终得。
04:45
怎么样得count一下对吧?我这能不能直接count星,能不能注意咱们要找的是用户数对不对,那理论上用户数我们应该怎么办?应该得驱重吧,是不是得count第尼ID啊,对吧?那这个咱们需要吗?这个不需要,为啥?因为咱们前面讲过,这张表我们存的是注册成功的记录,而正常情况下一个用户是不是只有一个注册成功的记录啊,对不对?所以说这块我们一行它就是一个用户就不用去重了,直接看到清就搞定了,好了,那也就是说我们想算这个留存率的话,那我们是不是已经完成了一半的任务了,对不对,OK啊,当然是比较简单的一半啊。好,那接下来我们继续往下看看另一个数怎么求。
05:21
另一个说什么来着,是6月13日的一日留存用户数,OK,什么叫做6月13号的一日留存用户来着,就是这个人首先他是在6月13号新增的,然后呢,他又在一天之后,也就是6月14号他活跃了,那这是不是就是咱们所谓的六月13的一日留存用户啊,对吧?好,那这样的用户怎么找呢?怎么找,怎样能找到OK,既在6月13号新增,又在6月14号活跃,是不是就找这样的人就行了呀,对吧,怎么找怎怎么去找,这个其实很简单呀,对吧?你可以写两个子查询对不对?我先写一个子查询,把什么把13号的新增的用户都找出来,我再写一个子查询,把十四二的活跃用户都给他找出来,然后他俩做一个什么就行了,做一个inner,是不是就是取两者的交集,那不就是满足这俩条件的用户对不对?所以这个思路其实很简单啊,来接下来咱们就写一下来,我们来一个say back完from先拿新增,新增拿是不是跟他的拿粉是一样的呀,对吧?来,OK,那当然了,在这我们不能再count了,我们必须得拿到啥,必须得拿具体的U端ID,因为一会还得关联的,对吧,来来好,这个拿过来之后,我们继续往下走,是不是是不是已经拿到13号新增了,对吧?来我们再拿14号的活跃,14号的活跃怎么拿来着,是不是也从那个DWS层的,呃,那个用户域,用户力度log in TD表里拿就行了,对吧,好完了之后呢,我们还是拿到它的最新一天的分区。
06:46
零六杠幺四对不对,完之后14号的活跃,那应该怎么拿,是不是应该是log in data last等于2020杠零六杠幺四啊对吧,这个没啥问题吧,好,那完之后呢,我们这来一个啥,来一个UID诶这个是不是就OK吧,这里OK之后,那他俩我就可以怎么做了,是不是做那个所谓的一证照了呀,对吧,好,那就照一下呗,来放一个括号里边CTRLV,那现在呢,我们给它往前推一下。
07:11
CTRLX,那这边呢,咱们也给它诶往前推一下,呃,在这呢,给他俩各自起一个别名,它我就叫T1吧,那下边这个呢,咱们就把它叫做T2,好,那他俩刚才分析过,我们应该用inner取它俩的交集对吧?好,那现在呢,我们写一下这个啊,然后呢,From下边写一下这个连接条件,他俩的连接条件很简单,应该用u.ID对吧,应该是on t一点u.u下线ID等于T2点,是不是U点下限ID啊对吧?好,那现在就关联上了,关联上之后,那上边我们就可以怎么做了。直接怎么做就行。是不是直接抗的星就行了,直接抗的星是不是就是13号的一日留存用户数,是不是,是不是咱分析分析啊,OK,那咱们得知道这个装完之后的结果是什么啊,这个是13号的新增用户没问题吧,下面那个是13活跃用户没问题吧?OK,好,那他俩进行这个关联之后,我们用的是因而的返回的结果,是不是应该是这一部分用户啊,对吧,这部分用户是不是既满足13号新增,也满足14号活跃,这就是我们要找的,所以说我们这儿直接看得清,那得到的就是13号的一日留存用户数,好,那也就是截止到现在你看啊,13号的新增,我们拿到了,13号的一日留存,咱也拿到了,他俩一比,不就是这个13号的一日留存率吗?
08:29
这就算完了呗,对吧,OK,好,那怎么去给他俩比呢?呃,按照我们这个,呃,就是这个表的最后的一个结构,我们需要怎么做呢?需要把它俩应该得放在同一行里边吧,对不对?所以说我们一会儿是不是需要对他俩进行一个join操作呀,对吧?OK啊好,那完之后其实咱们可以琢磨琢磨啊,我这能不能稍微的优化一下。那么说你看啊,就是咱们再去算上边的这个所谓的新增用户数的时候,我是不是拿到了这个表这个分区没没问题吧,OK,好,那我现在下边我再去算谁再去算这个留存用户数的时候,我是不是也拿到了这个表的这个分区没问题吧,那你想一想,诶,你说我能不能稍微的调整一下这个circle呢?诶我在下边求留存用户数的时候,顺带着也把这个新增用户数给他求出来,因为你这儿是不是也有这个新增的用户数信息啊,对吧?哎,我能不能也给他求一下呢?
09:24
可不可以,如果下边要是能求出来,我是不是就省一个子茶学,还省一次照一下对吧,能不能呢?其实可以,这边咱们只需要稍微调整一下,这个就能搞定,怎么调整啊,注意观察,各位同学,你看我这我把这个过滤条件我给它去了,我把它删了,OK,好,删了之后咱们来分析分析,你说这个炕的芯现在是什么含义。删了之后这个看看现在变成啥了。分析分析啊,首先这个审查群没变,它仍然是13号的新增用户,对吧?好,那这儿拿到的是什么。是TD表14号分区,也就是截至14号的全部用户吧,对不对,OK,好,那么之后他俩的包含关系应该是什么样的?
10:09
是不该是这种对吧?这是13号的新增,这是截至14号的全部,那所以说是不是包含关系肯定是下边这个包含左边那个呀,对吧,然后呢,咱们这用的是哪种照,是inner照,Inner照返回的数据是不是应该是这部分对吧?所以现在这个count芯实际上是对什么的,Count芯是对所有的新增用户的抗芯吧,这个是不是就是咱们13号的新增用户数没问题吧?好,那完之后呢,我现在要是再想把留存用户数求出来,这个怎么求?诶,其实做一个有条件的count就行了,为什么大家想想啊,OK,那你说对于这部分人而言啊,OK,好,那他的末次活跃日期是不是有些人他可能是14,有些人可能不是14啊,大家说是不是这个道理没问题吧,啥意思呢?也就是说你13号的新增,有的人可能在14号活跃了,有的人可能没在14号活跃,对不对?那完之后呢,我是不是只需要有条件的统计一下那些在14号活跃的,那就是我们这个13号的一日留存呀,对吧?那所以说在这儿我们可以怎么做啊,呃,当然在这儿我需要先把那个,呃,这个log in data last拿出来,因为咱们一是一会儿得根据它去进行这个有条件的判断呀,对吧,OK好,那这完完事之后怎么写呢?诶,在上边我进行一个所谓的有条件的count,当然这边呢,我就用some if了,不用count,用some if跟count都行,那来个if if啥呢?如果log in date last等于二。
11:39
020杠零六杠幺四对不对,那就意味着是不是这个人他在14号活跃了呀,对吧?好,那完之后呢,我就给他记个一,否则我就记个零,诶那这样一来的话呢,咱是不是就同时拿到了13号的新增用户数和13号的一日留存用户数了,对吧?诶是这样的啊OK,那这样一来我上边这个就不用再写了,诶完了之后呢,呃,这个也不用再去做这个join操作,诶这样一来是不是要比刚才咱们那个写法要好一些对吧?好,那现在咱们把这个查一下,看一下这个最终的结果。
12:15
OK,那个结果咱们就出来了啊,是这样的啊呃,OK,那这个完成之后呢,我们就继续往下进行啊,呃,那我们最终要想得到这个表所需要的数据,我们还得给他补上几个字段啊,咱们给他补一下,首先我们先补第一个,第一个是什么呢?第一个是统计日期DT对吧?这个咱们随便写一就行啊,比如说写一个2020杠零六杠幺四,这个不重要,然后往下看第二一个字段是啥?是那个所谓的create date对吧?Create,咱们这是哪一天。咱们算的是13号的一日留存,对吧?所以create是不是应该是2020年的六月十几,13号没问题吧?好,我们继续往下进行,那再往下呢?呃,该谁了?该这个所谓的retention day了,对吧?这个reten咱们算的是几日是一日留存,所以在这写个一就行,对吧?来继续往下走,那这个是什么?是retention count留存用户数量,谁是留存用户数量,我们是不是已经求出来了,下面这个some if就是对吧?好,那这个呢,我们给它往上走一下,摁out加shift可以上下移动啊,Out shift然后按上下就行,好,这是留存的,然后我们继续往下走,这儿是不是有一个呃,Count呀,对吧?这个count在这指的是咱那个新增对吧?OK,这个没问,那再往下走,再往下走,是不是该算这个所谓的留存率了呀,对吧,留存率是不是就用留存的用户数比上这个新增的用户数啊,对吧?Some if比上这个康芯诶,那这样一来,咱这个所谓的13号的一日留存率就完整的给它求出来了。
13:39
诶,咱们等一下好了,这个结果就出来了啊OK,那当然呢,我们现在只是完成了我们每天的计算任务当中的是不是1/7啊,对吧?啊,我们要算七个,而我们只完成了一个,但其实你只要把这一个写出来了,剩下的那那六个是不是就照葫芦画瓢就行了,对吧?好,那现在咱们画一下啊来给它CTRLC拿过来,然后呢,咱们看一下这个怎么改一下啊来比如说我现在呢,想算一下6月12号的两日六寸,哎,把这个拿过来,你说咱们要改的地方应该是哪儿,咱们从第一个字开始改起呗,但首先那这个地方咱得,诶这个用不用改这吧,这个其实不用改对吧?其实对于我们这个留存而言,最关键的字段是谁呢?是这个credit加上day对吧,这个D题其实无所谓啊,好,那第一个存咱就留着就行了,那接下来改它这个是不是得改成零六杠幺几幺二对吧,然后现在是几日留存,是两日留存对不对?好,那完之后呢,我们改下边的子查询啊子查询看看这个怎么改。
14:33
这个用不用改,这个得改吧,因为咱要算的是什么,是12号的这个零二,所以我们要的新增是不是应该是12号新增,对吧?所以说这个注册日期我们也可以改成12才对,对吧?好,那下边这儿用不用改呢?这个其实不用改了,明白对吧?这个咱们不用改啊,好,那你注意观察,那咱们现在要是不改的话,我们当前这俩召案之后的结果应该是什么啊,这边是不是应该是12号的新增,这边是截至14号的是不是全部用户,那他俩进行inner账之后,我们返回的结果是什么,是不是就是12号的新增了呀,对吧?好,那返回新号新增之后,那你注意观察,我们上边的东西要不要调整啊,这个要不要改,首先先看第一个,第一个是不是sum if啊对吧,那他判断的是什么?判断的是如果这个人他的末次活跃日期等于14号,OK,我就记一,否则月记零,诶那你说这个得到的结果是不是咱们这想要的12号的两日留存用户数是不是。
15:33
是没问题对吧,那所以这块呢,其实是不用动的,OK,那这个用改吗。这个也不用改,你直接看看是不是就正好是12号的新增用法对不对,这个没问题,然后这样呢,是不是也不用改啊,对不对,OK,那所以说这些聚合逻辑我们是不用改的,OK啊好了,那也就是截止到现在咱该改的就改完了呀,对吧?OK,那这个要会改了,那下边咱们再改起来,那就快了,对不对,再改一个啊来拿过来,那这里边我们直接从子查询开始改写啊,这是不是直接改成11,那就完事了对不对,这块是不是不用动,然后上边的聚合函数也不运动,咱们把这个改成一,把这个改成三,诶,那是不是就完事了,对吧?那剩下的其实都是这么去做,OK啊啊好,假定咱们现在把剩下的几个都写完了,咱这些是不是肯定要合并在一块啊,对吧,那合并我们应该用哪种方式呢。
16:18
应该用union吧,对不对,为啥?因为咱们这应该已经明确这个表结构了,在这张表当中,我们每行是不是一个留存呀,对吧,我现在是不是求出来了七个留存,我就给它优捏在不同的行,那就完事了,对吧?诶也就是咱这个需求你这么去做就能做出来啊,当然哎这个结果肯定是没问题的,哎我们最终肯定不是这么写的,因为这么写是不是这个S太臃肿了呀,对吧?所以说我们还是得考虑一下这个东西能不能优化一下啊,能不能优化,我把这个视频停一下,然后咱们再讨论啊。啊好了各位,那现在我们呃看一下这个能不能把刚才我们所写的这个大词给的优化一下啊,啊能不能优化,其实能不能优化还是看什么啊,还是看一下这几个子查询之间的区别和联系,对吧?来咱先看联系,联系是不是就是看它们有哪些共同点呀,对吧?哎,有什么共同点呀,这些词和翻一起。
17:08
共源是什么?共能源你会发现还是什么呢?还是聚合逻辑完全相同,对吧?这些是不是咱们这儿写的那个聚合函数啊,对吧,你会你会发现每一个子查询当中,我们的这个聚合逻辑,聚合函数都是完全一样的,刚才咱们是不是亲自改过呀,对吧?改的时候你就发现这块是不是根本就不用动,对吧?也就是说咱们的聚合逻辑是完全一样的,好,那这是他们的联系,那区别是什么呢?也就是不同点对吧?不同点是什么?不同点其实还是在对什么呢?在对不同的数据进行聚合,对吧,聚合的数据不一样对不对,你比如说我们第一个查询咱这儿聚合的是哪部分数据啊。当然聚合的是这个数据跟这个数据的一个照样的结果,对吧?啊,但是呢,实际上咱们都知道他们俩照样的结果,其实以谁为准呢?实际上是以这个为准的吧,对不对,因为右边那个是不是包含左边这个呀,对吧?啊,所以说其实是以左边是以他为准的,OK,那这儿返回的是谁,是13号的新增用户吧,我们相当于是在对13号的新增用户是不是进行这个这个聚合呀,对吧,然后往下走看第二个自然群,这个是在对谁,是不是在对12号的新增用户进行这个聚合,对吧,那这个呢,是在对11号的用户新增用户啊OK,是在对11号的新增用户是不是进行这个聚合呀,对吧?诶,也就你会发现咱们这几个子查询仍然满足咱们之前的那个特点,就是在对不同的数据进行相同的聚合,对不对,OK,那他在对几份不同的数据进行聚合呢?是在对七份对吧?下边的虽然咱没写,但是我们应该能猜出来对吧,这个是在对十号的新增用户进行聚合这个。
18:47
是对九号的进行聚合等等等,也就是他实际上现在呢,是在对从七号到13号的,这应该是1234567,应该是对这七天的新增用户进行一个相同的聚合操作,对吧?诶是这样的啊OK,好,那既然是这样的一个特点,那我们是不是又可以借助那个分组聚合的思想了,对不对,我们可以先设法怎么办呢?设法我们先拿到这七天的新增的用户对不对,当然了,拿到之后我们需要先对他进行一个什么呢?是不是得进行一个标识啊,对吧,每一份儿数据是不是都得有一个自己的标识,对不对?OK,那问一下大家,你说这七天的新增用户我们用什么标识比较合适呢?
19:29
啊,所谓标识,只要你能够准确的OK,把这一天的数据跟另外几天的数据区分开是不是就行了,对吧?好,咱们这七天的新增用户,你说我们用什么去标识比较合适。我用用一个新增的日期去标识行不行,大家说。新增日期对吧,七号的新增用户,我给后边我给你加个字段,诶比如说2020杠零杠零七,诶你说这个能不能行,能行吗?你只要能把这七天的数据给它区分开,那是不是就是OK的呀,对吧?OK,好,那加上这个标识了,加上标识之后,咱们接下来干啥呢?是不是就可以按照这个标识进行分组了呀,对吧?好,那按照分组完之后呢,是不是在进行这个相同的一个聚合,那就完事了,对吧?哎,其实咱们这还是可以借助这样的一个思想,好各位同学,那接下来呢,咱们就来分析分析看看我要诶合并起来应该是怎么写的啊来,那首先呢,我们还是呃基于前面的去改一改吧,咱们去拿一个啊,我们拿一下第一天的那个来CTRLC拿过来,拿之后呢,我放在这儿啊,看看咱这要改的话怎么改,首先我们是不是得先从子查询开始改啊,对吧?好,子查询从哪开始,从那个开始。
20:33
啊,那注意观察,那这个呢,我们是不是之前是每个子查询拿了一天呀,对吧,那这回我得直接拿几天,我直接拿七天对吧?诶那这个能不能直接拿到七天,能咱这是不是只要改一下这个分区就完事了,对吧?我拿七个分区是不是相当于拿到了七天的新增用户了,对不对,这个相对比较简单,这个不用炸。这个不用炸啊,这个为什么不用炸了,大家说。这个为什么,为什么咱们之前比如说拿三份数据我都要炸一下,对吧?这个咱们为啥不用炸,他们是有区别的,你看啊,之前咱们那拿那三份数据的时候,我们那三份据有一个什么特点呢?他们对他们是有交集的,对不对?你需要拿一个最近一天的,你需要拿一个最近七天的,你需要拿一个最近30的,那你最近30里边是不是包含最近七天,最近七天里边是不是包含,这他们是有包含关系的,对吧?所以说你必须得把原来一份相同的占成三份再过滤。
21:25
对不对,诶是这样的,他们是有这个交集的,而我们这儿的这七份数据它有交集嘛,没有对吧,一个是十号的新增,一个是11号新增,十号他是没有交集的,所以在这儿呢,我们直接拿就行,不用炸了,在这呢,DT大于等于多少呢?所以拿七天,那就是data塔下划线这个这个ADD呃下划线呃,然后萨吧,咱不用ad啊完的话呢,当天日期给他发去2020杠零六杠幺四,后边呢我们捡起就行。减六吧,对吧,这个我们要拿七个分区嘛,呃,诶到底减几应该是减几,咱们得看咱们拿谁呀,咱们这要拿的是拿几天是七号到13号吧,对不对,七号到13号,因为我14号的这个新增还用不着呢,对不对,十号现在什么时候用,你得算14号的,比如说一日留存的时候才能用,对吧?那我们今天拿到的14号数据,我能算14号的一日留存嘛,你算不了,你得再等一点,对吧?所以在这儿我们拿的应该是七到13号的,呃,所以在这儿呢,我们应该怎么办呢?我们应该是,呃,找到这个位置啊,应该是减,减七嘛,对吧,哎,对吧,应该是减七啊,应该是14减七,不是七嘛,对吧,然后呢,是大于等于七号完之后呢,是不是还得再来一个小于啊,这回对吧,咱们还得按了一下,按了一下DT,你得小于当天日期对吧?呃,应该是DT小于完了之后呢,2020杠零六杠幺几杠幺四对不对,那这样一来咱是不是就拿到了,诶七号到13号的新增用户了,对吧?好拿到之后我们继续往下走。
22:52
来看一下这个位置,大家说这儿我们需不需要去给他进行这个修改,这儿用不用改。这个不敢。
23:01
这个用改吗?这个其实不用,为啥,你想想啊,首先那这个是什么?这是我们1234567,这是那七天的新增用户对吧?那下边这个是什么?是不是我们截至14号的全部用户对不对?那你想一想,你说我这一个子查询是不是就能够把这七天的数据全部涵盖啊,对吧?所以这个其实咱们是不用改的,OK,这个是不用改的啊好,那完了之后我们继续往下走,自查询,咱们先改到这儿,完后呢,我们接下来要干啥呢?是不是正常就可以分组统计了,对吧?但是你分组统计你得有什么。得有标识才行,对吧,那我们这儿有没有那个标识呢?还没有对吧,那按照我们刚才的分析,我们这个标识其实用谁就行了,用我这个注册日期作为标识是不是就行,对吧?所以在这我们选一个啥。其实选一个DT就行了,对吧,这张表里有没有data台ID啊,也有data台ID啊,那当然也用data台ID行,或者说我用谁也行,我用分区字段DT也行,对吧,为啥?因为咱们前面讲过,对于这种INC,也就是事物型事实表而言,Data塔ID和DT的值它永远都是什么样的来着,是一样的,对吧?所以说你这个用data ID也行,DT也可以啊行,那标识咱就拿出来了,那接下来咱就可以干啥了,就可以直接进行分组聚合了,对吧?我葛肉外谁就葛外这个标识嘛,就按照DT进行分组好,那完事之后你是不是就会把13号的这个新增用户是不是分到一组,12号的新增用分到一组,11号的新增用分到一组啊对吧?分到一组之后,他们是不是都会进行一个这样相同的聚合,没问题吧,OK,好,也就是这儿我们还需要动吗?就不需要动了,OK,好,那完了之后我们唯一需要改一点的是哪的是上面这东西调一调对吧?好,那分析分析这会儿咱们怎么调,先说这个子弹,这个子弹咱用调吗?这个不用调,这个简单完。
24:44
扣第二一个第二段是什么意思来着,在这儿,在这儿指的是那个新增日期对不对?好,新增日期我这儿直接用谁就行。我直接用DT是不行,DT不就是咱们那个新增日期吗?对不对,那咱这能不能选这个DT呢?能选为啥恰好我是不是就按它分组的对吧,你按它分组,我这是不是就能选的对吧?诶这个正好啊好,那接下来就往下走看这个这个怎么办呢。
25:08
这个咱们也得找规律啊,往上翻个总结,你看啊,就是在这个求我们的,比如说13号的一日留存的时候,我这是不是一啊对吧?OK,好,那它有什么规律对,你看啊,14号减13号是不是等于一对不对,然后你看这个,哎,14减12是不是等于二对不对,那这个呢,正好14减11等于三,诶这是不是有规律对吧?所以在这呢,我们直接怎么做就行了,我们是不是直接来一个data塔dif就可以对吧?那在这呢,我们来一个data塔dif完了之后呢,把谁放进去,把2020杠零六杠幺四给它放进去之后呢,减一个DT,那是不是就完事了对吧?OK,好,那我这儿能不能选这个东西呢?好,注意观察啊,咱们这是不是有个格入Y对吧?有分组,理论上我们前面提到过,你只能选什么来着,只能选你分组的字段和聚合函数对不对?好,那我这个是分组字段吗。
26:04
不是,那我是聚合函数吗?是均函数吗?这个其实也不是,对不对,那我这能不能选呢。啊,其实能选啊,为什么要选,这给大家解释一下啊,实际上咱们之前那个说法呢,就有点儿太严格了啊,就是我们分组之后能选的字段有什么呢?有聚合函数这个不减啊,有,有这个分组字段,这个也不减,其实你还能选啥啊,呃,常量也是能选的,这个没问题,然后你还能选什么呢?还能选就是基于分组字段的udf函数。啊,什么意思呢?就是一进一出的,一进一出的这样的咱们也能选啊,是这样的啊,那data Di是不是一个一进一出的函数,对吧?那完事里边我们放的是谁?是不是就是这个DT的这个字段啊,对吧?那所以在这儿我是不是也能选啊,这个是不是也没问题啊,是这样的啊OK,好,那所以在这儿呢,这个是没有任何问题的,好那在这儿我给大家总结一下啊,就是我这个葛入拜之后,我到底什么样的字段能选,什么样的字段不能选呢?其实这里边就记住一个原则就行了,什么原则呢?来咱们思考一下各位同学啊,你想啊,就是你这儿是不是有分组,对吧?理论上分组之后他会怎么做,是不是会把一部分数据,就是这个分组段相同的数据分到一组啊,对吧,完了之后一组我只返回什么,只返回一行数据对吧?那所以说你只要保证你上边选的那些字段,它都只有一个值就OK了,在这一个组里边都只有一个值就行了,它只它能放在这一行里边是不是就完事了,对吧?你只需要满足这个原则就可以了,来咱们分析分析啊,你看我上边我选它是不是在一组里边只有。
27:38
一个值没有任何问题,对吧?那我选DT在一组里边是不是也只有一个值对吧?那我对DT进行一个udf函数的计算,我是不是也有一个值,为什么一进一出嘛,对吧,我是不是进来一个DT,我就出来一个DT啊,对吧?那所以说这个也是一个值,没有任何问题,那下面呢,我聚合函数在一组里边是不是也只有一个值对不对,所以说也能选,其实就就是因为这个原则,你把这个原则满足,那你这样随便选啊,完了之后咱们再来把这个给他执行一下啊,看一看这个最终的结果。
28:07
好,那这个结果就已经出来了啊,完了之后大家注意观察,我们这儿呃,没有出现我们期望的那个七条数据啊,这个是为什么呢?因为咱们数据量比较少,我们只生成了五天的历史数据,对吧?那完了之后呢,我们这儿所以说只能算什么,只能算一个十号的四日留存,然后呢,算一个11号的三日,12号的两日,还有一个13号的一日,但是我们随着时间推移,咱们有了呃过呃足够的历史数据之后呢,我们是不是就能算七个留存量,对吧?这个大家理解一下就行了,好了,那这样一来我们这一个circle考就把这个所有的流水就都算出来了,哎,好,完成之后视频我给他停一下啊。
我来说两句