在PowerBI中计算每个月的有效新用户

在用户增长分析中,"有效新用户"是一个关键指标,它通常指在一定时间内首次使用产品或服务,并满足特定活跃条件的用户。本篇文章将介绍如何在PowerBI中计算每个月的有效新用户。

问题描述

自行建模计算每个月的有效新用户,其中有效新用户的定义为:在本月连续登录不少于3天的新用户,要求如下:

1、基本要求:正确计算明细行的结果

2、进阶要求:确保总计正确

本案例初始数据只有单个表,其完整数据如下:

登录信息表:

user_idlog_time
11012025/2/9 0:00:00
11012025/2/10 0:00:00
11012025/2/11 0:00:00
11022025/2/9 0:00:00
11032025/2/18 0:00:00
11032025/2/19 0:00:00
11032025/2/20 0:00:00
11042025/2/1 0:00:00
11042025/2/10 0:00:00
11042025/3/3 0:00:00
11042025/3/4 0:00:00
11042025/3/5 0:00:00
11052025/3/8 0:00:00
11062025/3/9 0:00:00
11072025/3/20 0:00:00
11072025/3/21 0:00:00
11072025/3/22 0:00:00
11082025/3/11 0:00:00
11082025/3/18 0:00:00
11082025/3/19 0:00:00
11082025/3/20 0:00:00
11092025/3/29 0:00:00
11092025/3/30 0:00:00
11092025/3/31 0:00:00

若需其它辅助表等,可自行创建并建模。

解题要点

1、首先需要找出新用户,然后再从中找到满足活跃条件的有效新用户。

2、新用户的计算方法很多,本文采用的算法为:若某个用户是本月的新用户,那么该用户的首次登陆日期必定在本月中。

3、关于连续日期的计算要点,可以参考下表的分组字段:

日期序号分组(日期-序号)
2025/2/10145697
2025/2/11245697
2025/2/12345697
2025/2/14445698
2025/2/15545698
2025/2/16645698
2025/2/17745698
2025/2/20845700
2025/2/21945700

解决方案

首先创建一个日期表,然后与登录信息表建立一对多关系,如下图所示:

所用到的度量值如下:

有效新用户 = 
CALCULATE(
    VAR AvailableCustomerEachMonth = 
        GENERATE(
            VALUES('Calendar'[YearMonth]),
            VAR N = 3
            VAR NewCustomer = FILTER(ALL('登录信息表'[user_id]),FIRSTDATE('登录信息表'[log_time]) IN DATEADD('Calendar'[Date],0,DAY))
            RETURN
            FILTER(
                NewCustomer,
                VAR LogRecord = CALCULATETABLE(DISTINCT('登录信息表'),CROSSFILTER('登录信息表'[log_time],'Calendar'[Date],OneWay))
                VAR Grp = ADDCOLUMNS(LogRecord,"Grp",'登录信息表'[log_time]-ROWNUMBER(LogRecord,ORDERBY('登录信息表'[log_time])))
                RETURN
                MAXX(SUMMARIZE(Grp,[Grp],"a",COUNT('登录信息表'[log_time])),[a])>=N
            )
        )
    RETURN
    IF(ISFILTERED('Calendar'[YearMonth]),
        CONCATENATEX(AvailableCustomerEachMonth,'登录信息表'[user_id]," , "),
        COUNTROWS(AvailableCustomerEachMonth)
    ),
    CROSSFILTER('Calendar'[Date],'登录信息表'[log_time],None)
)

最后创建一个矩阵,并将日期表中的月份字段作为行标签,再将上面的度量值放入值字段即可,如下图所示:

总结

该案例的解决方案有很多,以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值