partial #2252 - Historical Churn and Historical Churn Rate
This commit is contained in:
parent
8fe688c511
commit
a5992bd960
@ -3,9 +3,9 @@
|
||||
class Crunchbutton_Chart extends Cana_Model {
|
||||
|
||||
public $activeUsersInterval = 45; // Days
|
||||
public $queryOnlyCommunties = 'AND c.id_community IN (1, 4)';
|
||||
public $queryExcludeCommunties = "AND c.name != 'Testing' AND c.name IS NOT NULL";
|
||||
public $queryExcludeUsers = "AND o.name NOT LIKE '%test%' and o.name != 'Judd' and o.name != 'dave' and o.name != 'Nick' and o.name != 'Devin' AND ( o.id_community != 6 OR o.id_community IS NULL ) ";
|
||||
public $queryOnlyCommunties = ''; // 'AND c.id_community IN (1, 4)';
|
||||
public $queryExcludeCommunties = ''; //"AND c.name != 'Testing' AND c.name IS NOT NULL";
|
||||
public $queryExcludeUsers = "AND o.name NOT LIKE '%test%' and o.name != 'Judd' and o.name != 'dave' and o.name != 'Nick' and o.name != 'Devin'";
|
||||
public $minDate = '2012-09-02'; #Issue 1523 - Fist week of September/12
|
||||
|
||||
public $from_month;
|
||||
@ -238,6 +238,22 @@ class Crunchbutton_Chart extends Cana_Model {
|
||||
return $communities;
|
||||
}
|
||||
|
||||
public function activeFromLastDays( $lastDays = 60 ){
|
||||
$query = "SELECT COUNT(*) as Total
|
||||
FROM
|
||||
(SELECT u.phone,
|
||||
o.date,
|
||||
u.id_user
|
||||
FROM `order` o
|
||||
INNER JOIN user u ON u.id_user = o.id_user
|
||||
WHERE o.date >= NOW() - INTERVAL {$lastDays} DAY
|
||||
{$this->queryExcludeUsers}
|
||||
GROUP BY u.phone) active";
|
||||
|
||||
$results = c::db()->get( $query );
|
||||
return $results->get(0)->Total;
|
||||
}
|
||||
|
||||
public function allDays(){
|
||||
$query = "SELECT DISTINCT( DATE_FORMAT( o.date ,'%Y-%m-%d') ) day FROM `order` o WHERE o.date IS NOT NULL AND o.date > '$this->minDate' ORDER BY day ASC";
|
||||
$results = c::db()->get( $query );
|
||||
|
||||
@ -25,12 +25,45 @@ class Crunchbutton_Chart_Churn extends Crunchbutton_Chart {
|
||||
// 'churn-rate-per-active-user-per-month' => array( 'title' => 'Month', 'interval' => 'month', 'type' => 'column', 'method' => 'activeByMonth', 'filters' => array( array( 'title' => 'Community', 'type' => 'community', 'method' => 'activeByMonthByCommunity' ) ) ),
|
||||
)
|
||||
),
|
||||
'group-historical-churn-rate-per-active-user' => array(
|
||||
'title' => 'Historical Churn Rate per Active User',
|
||||
'activeDays' => 60,
|
||||
'tags' => array( 'detailed-analytics' ),
|
||||
'charts' => array(
|
||||
'historial-churn-rate-per-active-user-per-day' => array( 'title' => 'Day', 'interval' => 'day', 'type' => 'column', 'method' => 'historicalActiveByDay'),
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function historicalActiveByDay( $render = false ){
|
||||
$user = new Crunchbutton_Chart_User();
|
||||
$daysForward = $this->activeUsersInterval;
|
||||
$activeUsers = $user->activeByDay();
|
||||
$newUsers = $user->newByDay();
|
||||
$activeToday = $this->activeFromLastDays();
|
||||
|
||||
$data = [];
|
||||
for( $i = 0; $i < sizeof( $activeUsers ); $i++ ){
|
||||
$activeForwardDays = $activeUsers[ ( $i + $daysForward ) ]->Total;
|
||||
$activeForwardDaysPlusOne = $activeUsers[ ( $i + $daysForward + 1 ) ]->Total;
|
||||
$newForwardDays = $newUsers[ ( $i + $daysForward ) ]->Total;
|
||||
$newForwardDaysPlusOne = $newUsers[ ( $i + $daysForward + 1 ) ]->Total;
|
||||
$churn = ( ( $activeForwardDaysPlusOne + $newForwardDaysPlusOne ) - $activeForwardDaysPlusOne ) / $activeToday;
|
||||
// Do not show the negatives
|
||||
// $churn = ( $churn < 0 ) ? 0 : $churn;
|
||||
$data[] = ( object ) array( 'Label' => $activeUsers[ $i ]->Label, 'Total' => $churn, 'Type' => 'Users' );
|
||||
}
|
||||
if( $render ){
|
||||
return array( 'data' => $data, 'unit' => '%', 'interval' => 'day' );
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function activeByDay( $render = false ){
|
||||
/* OLD FORMULA
|
||||
$user = new Crunchbutton_Chart_User();
|
||||
|
||||
@ -15,6 +15,15 @@ class Crunchbutton_Chart_User extends Crunchbutton_Chart {
|
||||
'users-new-per-month' => array( 'title' => 'Month', 'interval' => 'month', 'type' => 'column', 'method' => 'newByMonth', 'filters' => array( array( 'title' => 'Community', 'type' => 'community', 'method' => 'newByMonthByCommunityGrouped' ), array( 'title' => 'Cohort', 'type' => 'cohort', 'method' => 'newByMonthCohort' ) ) ),
|
||||
)
|
||||
),
|
||||
'group-historical-new-users' => array(
|
||||
'title' => 'Historical New Users',
|
||||
'tags' => array( 'detailed-analytics' ),
|
||||
'charts' => array(
|
||||
'users-new-per-day-historical' => array( 'title' => 'Day', 'interval' => 'day', 'type' => 'column', 'method' => 'newByDayHistorical' ),
|
||||
'users-new-per-week-historical' => array( 'title' => 'Week', 'interval' => 'week', 'type' => 'column', 'method' => 'newByWeekHistorical' ),
|
||||
'users-new-per-month-historical' => array( 'title' => 'Month', 'interval' => 'month', 'type' => 'column', 'method' => 'newByMonthHistorical' ),
|
||||
)
|
||||
),
|
||||
'group-new-users-community' => array(
|
||||
'title' => 'New Users',
|
||||
'tags' => array( 'reps' ),
|
||||
@ -136,6 +145,7 @@ class Crunchbutton_Chart_User extends Crunchbutton_Chart {
|
||||
{$this->queryExcludeUsers}
|
||||
{$this->queryOnlyCommunties}
|
||||
GROUP BY u.phone ) ActiveUsers";
|
||||
|
||||
$union = ' UNION ';
|
||||
}
|
||||
|
||||
@ -1359,6 +1369,58 @@ class Crunchbutton_Chart_User extends Crunchbutton_Chart {
|
||||
return $parsedData;
|
||||
}
|
||||
|
||||
public function newByDayHistorical( $render = false ){
|
||||
$newUsers = $this->newByDay();
|
||||
$usersReclaimed = $this->reclaimedByDay();
|
||||
$data = [];
|
||||
for( $i = 0; $i < count( $newUsers ); $i++ ){
|
||||
$data[] = ( object ) array(
|
||||
'Label' => $newUsers[ $i ]->Label,
|
||||
'Total' => ( $newUsers[ $i ]->Total + $usersReclaimed[ $i ]->Total ),
|
||||
'Type' => $newUsers[ $i ]->Type,
|
||||
);
|
||||
}
|
||||
// echo '<pre>'; var_dump( $data ); exit;
|
||||
if( $render ){
|
||||
return array( 'data' => $data, 'unit' => 'Users', 'interval' => 'day' );
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function newByWeekHistorical( $render = false ){
|
||||
$newUsers = $this->newByWeek();
|
||||
$usersReclaimed = $this->reclaimedByWeek();
|
||||
$data = [];
|
||||
for( $i = 0; $i < count( $newUsers ); $i++ ){
|
||||
$data[] = ( object ) array(
|
||||
'Label' => $newUsers[ $i ]->Label,
|
||||
'Total' => ( $newUsers[ $i ]->Total + $usersReclaimed[ $i ]->Total ),
|
||||
'Type' => $newUsers[ $i ]->Type,
|
||||
);
|
||||
}
|
||||
// echo '<pre>'; var_dump( $data ); exit;
|
||||
if( $render ){
|
||||
return array( 'data' => $data, 'unit' => 'Users', 'interval' => 'week' );
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function newByMonthHistorical( $render = false ){
|
||||
$newUsers = $this->newByMonth();
|
||||
$usersReclaimed = $this->reclaimedByMonth();
|
||||
$data = [];
|
||||
for( $i = 0; $i < count( $newUsers ); $i++ ){
|
||||
$data[] = ( object ) array(
|
||||
'Label' => $newUsers[ $i ]->Label,
|
||||
'Total' => ( $newUsers[ $i ]->Total + $usersReclaimed[ $i ]->Total ),
|
||||
'Type' => $newUsers[ $i ]->Type,
|
||||
);
|
||||
}
|
||||
if( $render ){
|
||||
return array( 'data' => $data, 'unit' => 'Users', 'interval' => 'month' );
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
public function newByDay( $render = false ){
|
||||
|
||||
$query = "SELECT SUM(1) AS Total,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user