DAX学习-新用户计算

该文档介绍如何在PowerBI中通过DAX公式计算新用户。创建了日期表和用户行为表,并展示了四种不同的新用户计算方法:1-时间点算法,2-集合算法,3-区间算法,4-表达式嵌套算法。最后提到了新用户标签的设定,以确定用户是新用户还是老用户。
摘要由CSDN通过智能技术生成

此文档为学习笔记,原课程为佐罗老师的Power BI 自动化用户运营分析

根据行为用户数据,来判断新用户

创建一张日期表(维度表):

_日期表 = ADDCOLUMNS (
CALENDAR ( date(2022,12,01),date(2023,01,31) )
,"年", YEAR ( [Date] )
,"月", MONTH ( [Date] )
)

_日期表:

Date
2022/12/1202212
2022/12/2202212
2022/12/3202212
2022/12/31202212
2023/1/120231
2023/1/220231
2023/1/320231
2023/1/3120231

创建一张用户行为表(事实表):

_用户行为 = 
var tb={
(1,"u001","2022/12/01"),
(2,"u001","2022/12/15"),
(3,"u001","2023/01/02"),
(1,"u002","2023/01/06"),
(3,"u002","2023/01/07"),
(2,"u003","2023/01/01"),
(3,"u004","2023/01/15"),
(1,"u004","2023/01/16"),
(3,"u005","2023/01/11")
}
return selectcolumns(tb,"用户行为key",[Value1],"用户key",[Value2],"日期key",[Value3])

_用户行为:

用户行为key用户key日期key
1u0012022/12/01
2u0012022/12/15
3u0012023/01/02
1u0022023/01/06
3u0022023/01/07
2u0032023/01/01
3u0042023/01/15
1u0042023/01/16
3u0052023/01/11

_日期表和_用户行为表的关系是 :一对多关系

求:新用户计算

计算1-时间点算法
用户行为时间在某时间范围内的,则算新用户

_new_1 = //...][t1,t2][...
var t1=min('_日期表'[Date]) //最早的时间
var t2=max('_日期表'[Date]) //最近的时间
var users_current=values('_用户行为'[用户key]) //用户集
var user_new=filter(
    users_current,
    var first_point=calculate(min('_用户行为'[日期key]),all('_日期表')) //取首次行为时间
    return first_point >=t1 && first_point<=t2 //首次行为时间在区间内,则返回对应用户
)
return COUNTROWS(user_new)

计算2-集合的算法
指定新用户的时间,用户行为早于指定时间的就算做老用户,用户集-老用户集=新用户

_new_2 = 
var users_current=values('_用户行为'[用户KEY]) //用户集
var t1=min('_日期表'[Date]) //指定新用户的时间
var users_before_t1=calculatetable(values('_用户行为'[用户KEY]),'_日期表'[Date]<t1) //早于新用户时间的老用户集
var user_new=except(users_current,users_before_t1)//用户集-老用户
return  countrows(user_new)

计算2,以区间来计算

_new_3 = 
var t1=min('_日期表'[Date]) //取最早时间
var t2=max('_日期表'[Date]) //取最近时间
var t1t2=DATESBETWEEN('_日期表'[Date],t1,t2)//返回区间
var t0t1=DATESBETWEEN('_日期表'[Date],0, t1 -1)//从最开始-指定最早时间的前一天=返回老用户时间的区间
var user_t1t2=CALCULATETABLE(values('_用户行为'[用户key]),t1t2)//返回用户集
var user_t0t1=CALCULATETABLE(values('_用户行为'[用户key]),t0t1)//返回老用户集
var user_new=EXCEPT(user_t1t2,user_t0t1) //用户集-老用户
return countrows(user_new)

计算3-表达式嵌套的算法
当前用户在最早日期前有无用户行为,如果无,则说明是新用户

_new_4 = 
COUNTROWS(
filter(
    //如果行为次数=0,说明是新用户
    ADDCOLUMNS(
        //取:当前用于在指定时间的最早日期前的行为次数
        values('_用户行为'[用户key]),//当前用户
        "times",//表达式命名
        calculate(
            countrows('_用户行为'),
            filter(all('_日期表'[Date]),'_日期表'[Date]<min('_日期表'[Date]))
        )
    ),
    [times]=0)
)

在这里插入图片描述

最后,可以使用DAX studio 来评估性能
此案例数据量较小,故在此不评判3种算法的性能问题
在这里插入图片描述


求:新用户标签

在用户行为表上,给满足条件的用户打上新用户标签

_new_tag = 
var current_user=selectedvalue('_用户行为'[用户key])
var current_date=selectedvalue('_用户行为'[日期key])
return if(sumx(filter(all('_用户行为'),'_用户行为'[用户key]=current_user && '_用户行为'[日期key]<current_date),'_用户行为'[日期key])>0,"老","新")

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jackie_Mina

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

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

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

打赏作者

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

抵扣说明:

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

余额充值