|
@@ -125,8 +125,9 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
$unionBaseTotalDaySql = implode(" UNION ALL ", $baseTotalDaySqlParts);
|
|
$unionBaseTotalDaySql = implode(" UNION ALL ", $baseTotalDaySqlParts);
|
|
|
|
|
|
|
|
|
|
+
|
|
|
// 按照每日,获取=>注册数据
|
|
// 按照每日,获取=>注册数据
|
|
|
- $regData = Db::connect('db_data_report')->query("SELECT tdate, SUM('reg_total') reg_total FROM ( {$unionBaseTotalDaySql} ) AS all_base_total_day GROUP BY tdate order by tdate ");
|
|
|
|
|
|
|
+ $regData = Db::connect('db_data_report')->query("SELECT tdate, SUM(reg_total) reg_total FROM ( {$unionBaseTotalDaySql} ) AS all_base_total_day GROUP BY tdate order by tdate ");
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 活跃数据:$actData = 按照日期,获取每日的 活跃数 SUM(【active_total】) 活跃天数 【days】, 分组 【reg_date,days】,game_active_day_2025
|
|
// 2. 活跃数据:$actData = 按照日期,获取每日的 活跃数 SUM(【active_total】) 活跃天数 【days】, 分组 【reg_date,days】,game_active_day_2025
|
|
@@ -147,11 +148,14 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
$actDataSql = "select reg_date as tdate, days, sum(active_total) as active from ({$unionGameActiveDaySql}) as all_game_active_day group by reg_date,days";
|
|
$actDataSql = "select reg_date as tdate, days, sum(active_total) as active from ({$unionGameActiveDaySql}) as all_game_active_day group by reg_date,days";
|
|
|
// 替换日期字段, 因为game_active_day_表的日期字段是[reg_date]
|
|
// 替换日期字段, 因为game_active_day_表的日期字段是[reg_date]
|
|
|
$actDataSql = str_replace("AND tdate", "AND reg_date", $actDataSql);
|
|
$actDataSql = str_replace("AND tdate", "AND reg_date", $actDataSql);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
// 日期、活跃天数、活跃数,按日期和活跃天数分组
|
|
// 日期、活跃天数、活跃数,按日期和活跃天数分组
|
|
|
$actData = Db::connect('db_data_report')->query($actDataSql);
|
|
$actData = Db::connect('db_data_report')->query($actDataSql);
|
|
|
|
|
|
|
|
$tdate = date('Y-m-d');
|
|
$tdate = date('Y-m-d');
|
|
|
$list = $totalData = [];
|
|
$list = $totalData = [];
|
|
|
|
|
+
|
|
|
// 遍历每日的注册数
|
|
// 遍历每日的注册数
|
|
|
foreach ($regData as $r) {
|
|
foreach ($regData as $r) {
|
|
|
// 如果当日没有注册的话,则跳过
|
|
// 如果当日没有注册的话,则跳过
|
|
@@ -160,6 +164,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
}
|
|
}
|
|
|
// 注册日期
|
|
// 注册日期
|
|
|
$reg_date = $r['tdate'];
|
|
$reg_date = $r['tdate'];
|
|
|
|
|
+
|
|
|
$list[$reg_date]['tdate'] = $reg_date;
|
|
$list[$reg_date]['tdate'] = $reg_date;
|
|
|
// 注册数
|
|
// 注册数
|
|
|
$list[$reg_date]['reg'] = $r['reg_total'];
|
|
$list[$reg_date]['reg'] = $r['reg_total'];
|
|
@@ -169,15 +174,20 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
for ($i = 1; $i <= $days; $i++) {
|
|
|
$dayKey = 'd' . $i;
|
|
$dayKey = 'd' . $i;
|
|
|
// d1...dn的reg = 记录按日的注册数
|
|
// d1...dn的reg = 记录按日的注册数
|
|
|
- $totalData[$dayKey]['reg'] += $r['reg_total'];
|
|
|
|
|
|
|
+ $totalData[$dayKey]['reg'] = !empty($totalData[$dayKey]['reg']) ? $totalData[$dayKey]['reg'] + $r['reg_total'] : $r['reg_total'];
|
|
|
}
|
|
}
|
|
|
- $totalData['reg'] += $r['reg_total'];
|
|
|
|
|
|
|
+ $totalData['reg'] = !empty($totalData['reg']) ? $totalData['reg'] + $r['reg_total'] : $r['reg_total'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
// 遍历每日的活跃数
|
|
// 遍历每日的活跃数
|
|
|
foreach ($actData as $r) {
|
|
foreach ($actData as $r) {
|
|
|
// 注册日期
|
|
// 注册日期
|
|
|
$reg_date = $r['tdate'];
|
|
$reg_date = $r['tdate'];
|
|
|
|
|
+ // 如果当前日期没有数据,则跳过
|
|
|
|
|
+ if(empty($list[$reg_date])){
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
// 如果日期,没有注册数/活跃数, 则跳过
|
|
// 如果日期,没有注册数/活跃数, 则跳过
|
|
|
if (!$list[$reg_date]['reg'] || !$r['active']) {
|
|
if (!$list[$reg_date]['reg'] || !$r['active']) {
|
|
|
continue;
|
|
continue;
|
|
@@ -191,7 +201,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
// N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
|
|
// N日留存率 = 第N天活跃数 ÷ 注册日注册数 × 100%。
|
|
|
$list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
|
|
$list[$reg_date][$dayKey] = ToolLogic::getPercent($r['active'], $list[$reg_date]['reg']);
|
|
|
// d1...dn的reg = 记录按日的活跃数
|
|
// d1...dn的reg = 记录按日的活跃数
|
|
|
- $totalData[$dayKey]['active'] += $r['active'];
|
|
|
|
|
|
|
+ $totalData[$dayKey]['active'] = !empty($totalData[$dayKey]['active']) ? $totalData[$dayKey]['active'] + $r['active'] : $r['active'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$total = [];
|
|
$total = [];
|
|
@@ -199,7 +209,7 @@ class ChannelAnalysisLogic extends BaseLogic
|
|
|
if ($key == 'reg') {
|
|
if ($key == 'reg') {
|
|
|
$total['reg'] = $val;
|
|
$total['reg'] = $val;
|
|
|
} else {
|
|
} else {
|
|
|
- $total[$key] = ToolLogic::getPercent($val['active'], $val['reg']);
|
|
|
|
|
|
|
+ $total[$key] = ToolLogic::getPercent($val['active']??0, $val['reg']??0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|