使用新的DAX窗口函数计算客户终身价值
本文翻译自NikolaIlic的文章《LookingthroughtheWindowCalculatingcustomerlifetimevaluewithnewDAXfunctions》来源:Medium新的窗口函数是DAX语言有史以来最重要的改进之一!学习如何利用它们来计算客户终身价值。
之前我作为SQL专家的时期,一直在频繁使用TSQL窗口函数来完成各种分析任务。这篇文章介绍了其中一个可能遇到的分析情境,但实际上有十几种情境可以通过使用窗口函数快速而直观地解决。
因此,当我过渡到PowerBI时,我非常惊讶(不能说是失望),因为没有相当于SQL窗口函数的DAX。好吧,我们也可以通过编写更复杂的DAX来解决对某一组行进行不同计算的挑战但是,说实话,这往往是一个非常痛苦的经历。
因此,当PowerBIDesktop2022年12月的更新宣布了一组全新的DAX函数统称为窗口函数应该能达到与SQL窗口函数相同的目标时,我感到无比兴奋。目前,有三个DAX窗口函数。OFFSET,INDEX,和WINDOW。
如果你想更多地了解这些函数以及它们在幕后是如何工作的,我强烈推荐你阅读JeffreyWang的这篇文章(文章地址:https:pbidax。wordpress。com20221215introducingdaxwindowfunctionspart1)这是深入了解DAX窗口函数的最佳启蒙。
如果你对OFFSET功能特别感兴趣,我鼓励你阅读我的朋友TomMartens写的这篇好文章(文章地址:https:www。minceddata。info20221214unlockanamplenewworldbyseeingthroughawindow)。
或者tpnRel写的这篇(文章地址:https:www。linkedin。compulseoffsetitsusagecalculationgroupsC5A1tC49BpC3A1nreC5A1l)。
在这篇文章中,我不会花太多时间解释窗口函数的来龙去脉,因为我想重点解释你如何利用这些函数来满足一个非常普遍的业务要求计算客户的终身价值。
客户终身价值
让我们首先了解什么是客户终身价值。嗯,这是一个宽泛的术语,可以有许多可能的解释。在我们的案例中,我们想深入了解单个客户的行为例如,他们下了多少订单,他们在我们的产品上花费的总金额是多少,他们的订单之间有多少天的间隔,以及这与所有客户的平均值相比如何。最后,我们想知道我们的客户有多忠诚也就是说,他们的第一个和最后一个订单之间有多少天的间隔。
因此,让我们从一个非常基本的场景开始。我正在分析AdventureWorks数据集中的两个客户。AdamYoung和AlexandraJenkins。下面是他们的订单和总销售金额的摘要。
这里要理解的第一个概念是,我们要把每个客户作为一个单独的实体来对待这意味着,我们要为每个客户创建一个窗口,并分析这一组特定行的数字。在我们的案例中,我们将有两个窗口。
DAX中的窗口函数可以以两种不同的方式工作1。通过基于当前行的相对(REL)值进行操作(阅读Jeffrey的文章可以了解如何确定当前行),2。通过绝对(ABS)值进行操作。在我的案例中,我总是希望我的窗口从分区的第一行开始(每个客户代表一个单独的分区),并在分区的最后一行结束。
因此,让我们创建一个度量值,计算每个分区的订单数量和销售额的运行总量。WindowQuantityCALCULATE(〔TotalQuantity〕,WINDOW(1,ABS,1,ABS,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))WindowSalesAmountCALCULATE(〔TotalSales〕,WINDOW(1,ABS,1,ABS,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))
让我们停一下,解释一下这个度量的定义。作为一个CALCULATE筛选器的修改器,我们将使用一个新的窗口DAX函数WINDOW。第一个参数(1)决定了窗口的起始位置。因为第二个参数是ABS(绝对值),这意味着窗口从分区的起点开始。接下来,我们定义窗口的结束位置。
由于我们使用的是一个负值(1)和ABS,这意味着窗口在分区的最后一行结束。之后,我们要定义一个表的表达式,输出行将从中返回。最后,数据将在窗口内按日期排序(从最早的日期开始),并在一个客户上进行分区(每个客户是一个单独的窗口)。
现在,我们有了每个客户的累积总计!因此,我们现在可以计算出每个人在整个购买中的百分比。ofWindowQuantityDIVIDE(〔TotalQuantity〕,〔WindowQuantity〕,0)ofWindowSalesDIVIDE(〔TotalSales〕,〔WindowSalesAmount〕,0)
到目前为止,一切都很好!让我们做一些更酷的事情。首先,我将计算两个连续订单之间相隔多少天。对于这个任务,另一个DAX窗口函数来了。OFFSET。我想抓取前一行的日期,并计算当前行日期与前一行日期之间的天数差。OffsetDateCALCULATE(MIN(Date〔Date〕),OFFSET(1,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))
这里是计算订单之间的天数的度量。DaysBetweenOrdersDATEDIFF(〔OffsetDate〕,MIN(Date〔Date〕),DAY)
好了,现在,让我们计算一下每个客户的平均订单间隔天数。AVGDaysBetweenOrdersCALCULATE(AVERAGEX(SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),〔DaysBetweenOrders〕),WINDOW(1,ABS,1,ABS,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))
那么,在这一点上我们能得出什么结论呢?Alexandra平均每22天下一次订单,而Adam平均需要89天才能下一次新订单。这与一个整体相比如何?89天的订单间隔是不是太长了?
因此,让我们把这些数字放在整个数据集的背景中。
尽管与AlexandraJenkins的22天相比,89天可能看起来很糟糕,但我们可以得出结论,与所有客户的平均水平(287天)相比之下,这89天一点也不糟糕!这也是我们的目标。这的确是一个有价值的洞察。
让我们通过计算总的客户寿命来结束这个分析。即每个客户的第一个和最后一个订单之间的天数。因此,让我们在我们的窗口内计算出第一个和最后一个订单的日期。WindowMinDateCALCULATE(MIN(Date〔Date〕),WINDOW(1,ABS,1,ABS,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))WindowMaxDateCALCULATE(MAX(Date〔Date〕),WINDOW(1,ABS,1,ABS,SUMMARIZE(ALLSELECTED(Sales),Customer〔Customer〕,Date〔Date〕),ORDERBY(Date〔Date〕),KEEP,PARTITIONBY(Customer〔Customer〕)))
下面是客户寿命天数的计算。CustomerLifetimeDaysDATEDIFF(〔WindowMinDate〕,〔WindowMaxDate〕,DAY)
而且,一旦我把它拖入表格,我可以看到它在每个窗口内被计算(分别为每个客户)。
总结
这只是一个基本的例子,说明使用DAX窗口函数可以实现什么。老实说,可以想到的用例不计其数例如,我还可以对窗口内的各个行进行排序(并快速确定每个客户的最高销售金额)。
我还可以通过多个属性进行分区例如,通过客户和月份。然后,我们会有一个窗口,包含一个客户在一个月内的所有行。例如AdamYoung七月,AdamYoung八月,AlexandraJenkins七月,AlexandraJenkins八月,等等。根据你的具体业务要求,你的窗口可以有不同的定义。
窗口函数是DAX语言最重要的增强功能之一,这一点是毫无疑问的。一些以前需要编写复杂和冗长的DAX的业务用例,现在可以用一种更优雅和最佳的方式来完成。就像在SQL语言中,窗口函数是最强大的分析工具之一一样,DAX窗口函数肯定会使PowerBI的许多开发任务更容易实现。
如果您想深入学习微软PowerBI,欢迎登录网易云课堂试听学习我们的从Excel到PowerBI数据分析可视化系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳在线学习。
长按下方二维码关注PowerPivot工坊获取更多微软PowerBI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享
雷军笑了!Q2拉丁美洲智能手机市场小米超过苹果9月2日,Canalys发布的数据报告显示,第二季度拉丁美洲智能手机出货量同比下跌2。5,达3220万部。这是自2020年第一季度和第二季度疫情爆发以来,拉丁美洲地区首次连续两……
哪些家用净水器常识是不正确的?这4个误区一定要知道现在大家都在了解净水器的小常识,因为水质的健康关系到我们自身的健康,所以有些小常识也是有必要要知道的,而网络上有许多的虚假常识,这让用户难以辨别,今天我们就来说一下哪些家用净水……
TCL发布Tab10二合一平板电脑,搭载我国联发科芯片,支持就在本年度的8月末,TCL发布了TCLTab10平板电脑,这是一款二合一类型的平板电脑,除了是平板电脑外,还可以连接到键盘用来当作笔记本电脑来使用,这款平板电脑会给我们带来很多……
LPL2022夏季赛败者组决赛TESvsEDG第二局,双方阵容如下滔搏2:0EDG(滔搏红色方)本场MVP给到打野选手TTTianII5分钟,贾克斯越塔击杀敌方上单,打出一换一。8分……
夏天吃西瓜的禁忌夏日炎炎,有你最甜!吹着空调,吃着西瓜,那是一种怎样的感受呢?西瓜吃着虽甜虽爽,但是也不能盲目地乱吃。为了身体的健康,我特地收集了几条有关夏天吃西瓜的禁忌,供友友们参考一……
腾讯这功能,开始收费了!很多人在用腾讯会议部分功能开始收费,受到广泛关注。记者了解到,9月15日,腾讯会议联席主持人、自动会议纪要和字幕功能结束限免,并推出了面向个人用户的付费会员套餐。近日,腾讯会议客服……
氛围感拉满的文案一起吹过晚风的人,大概会记得久一些hi,这里是微醺文案馆1。我们沸腾,枯萎,烂漫,台下高朋满座,影子代替我吻你。2。草在结它的种子,风在摇它的叶子,我们站着不说话,就十分美好。3。和我私奔吧,……
脉冲星日报八十五期苹果大砍订单科技之巅寻找先行者No。1,有消息爆料称苹果大砍台积电A16A15芯片订单,高端iPhone14ProMax面临下修。No。2,华为上架40W冰糖全能充电器,售价1……
彻底看清一个人,看这三个细节就够了秋日生活打卡季古语云:画龙画虎难画骨,知人知面不知心。人是善于伪装的,如果我们只是用眼睛去看,那么,很可能就会被眼前的假象所蒙蔽。只有善于用心去看,在关键时刻……
回忆西藏都说西藏是个梦,一生要去两次,一次把魂儿丢在那儿,一次是去找回。这句话去过一次的我是认同的。2020年11月,裸辞了工作,中间有一个多月的休闲期,常年在外面跑工地的人,突然很是……
自以为很红,其实耍大牌都没人理,这10位明星简直尴尬又可笑文娱情故纵编辑娱情故纵前言娱乐圈中有这样一群明星,明明人气不高咖位也不是很大,但做事情却是排场极大做派比巨星都要高。殊不知这种行为在真正的大咖看来,不过就是一……
700球后C罗再冲两大里程碑,将迎联赛500球,纽卡又搅局?在对埃弗顿一战打入俱乐部生涯第700球之后,C罗将在对纽卡斯尔联赛一战冲击另一个纪录,打入联赛第500球。尽管本赛季状态有所下滑,但C罗仍然在不断打破纪录。对埃弗顿一战,……