人生没有彩排
每一天都是现场直播

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

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

问题描述

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

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

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

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

登录信息表:

user_id log_time
1101 2025/2/9 0:00:00
1101 2025/2/10 0:00:00
1101 2025/2/11 0:00:00
1102 2025/2/9 0:00:00
1103 2025/2/18 0:00:00
1103 2025/2/19 0:00:00
1103 2025/2/20 0:00:00
1104 2025/2/1 0:00:00
1104 2025/2/10 0:00:00
1104 2025/3/3 0:00:00
1104 2025/3/4 0:00:00
1104 2025/3/5 0:00:00
1105 2025/3/8 0:00:00
1106 2025/3/9 0:00:00
1107 2025/3/20 0:00:00
1107 2025/3/21 0:00:00
1107 2025/3/22 0:00:00
1108 2025/3/11 0:00:00
1108 2025/3/18 0:00:00
1108 2025/3/19 0:00:00
1108 2025/3/20 0:00:00
1109 2025/3/29 0:00:00
1109 2025/3/30 0:00:00
1109 2025/3/31 0:00:00

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

解题要点

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

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

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

日期 序号 分组(日期-序号)
2025/2/10 1 45697
2025/2/11 2 45697
2025/2/12 3 45697
2025/2/14 4 45698
2025/2/15 5 45698
2025/2/16 6 45698
2025/2/17 7 45698
2025/2/20 8 45700
2025/2/21 9 45700

解决方案

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

所用到的度量值如下:

有效新用户 = 
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)
)

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

总结

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

未经允许不得转载:夕枫 » 在PowerBI中计算每个月的有效新用户
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论