一张包含会话开始事件的表:
Registered - unixtime - 用户注册时(第一次打开应用)
DateTime - unixtime - 发送事件的时间(玩家安装应用并首次打开时:Registered = DateTime)
PlayerId
- 玩家的唯一 ID(相同的 ID - 总是相同的注册,但相同的注册 - 可能不止一个PlayerId
)
我需要得到这样的表:
到目前为止进行了这个查询(MongoDB for redash):
{
"collection": "dance",
"aggregate": [
{
"$match": {
"$and": [
{
//---filter for the range of Day0 dates
//---need to build Ret_Day1 - Ret_Day7 for each
"Registered": {
"$lt": "ISODate(\"{{Finish date}}\")"
}
},
{
"Registered": {
"$gt": "ISODate(\"{{Start date}}\")"
}
},
{
"EventType": "Session Start"
}
]
}
},
{
"$group": {
"_id": {
"DayZero": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$Registered"
}
},
"DayActive": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$DateTime"
}
},
"PlayerId": "$PlayerId"
}
}
},
{
"$group": {
"_id": {
"DayZero": "$_id.DayZero",
"DayActive": "$_id.DayActive"
},
"Ret": {
"$sum": 1
}
}
},
{
"$project": {
"_id": "1",
"DayZero": {
"$dateFromString": {
"dateString": "$_id.DayZero"
}
},
"DayActive": {
"$dateFromString": {
"dateString": "$_id.DayActive"
}
},
"Ret": 1
}
},
{
"$project": {
"Days": {
"$divide": [
{
"$subtract": [
"$DayActive",
"$DayZero"
]
},
86400000
]
},
"DayZero": {
"$dateToParts": {
"date": "$DayZero",
"timezone": "+02:00"
}
},
"Ret": 1
}
},
{
"$project": {
"Ret": 1,
"Days": 1,
"DayZero": {
"$concat": [
{
"$toString": "$DayZero.day"
},
".",
{
"$toString": "$DayZero.month"
},
".",
{
"$toString": "$DayZero.year"
}
]
}
}
}
]
}
结果:
在redash中,我可以构建这样的可视化:
但这还不够好 - 所以我想用用户数量和用户百分比填充新字段 (R_Day1 - R_Day7)。哪种方法最容易计算每天的百分比?