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 {
|
class Crunchbutton_Chart extends Cana_Model {
|
||||||
|
|
||||||
public $activeUsersInterval = 45; // Days
|
public $activeUsersInterval = 45; // Days
|
||||||
public $queryOnlyCommunties = 'AND c.id_community IN (1, 4)';
|
public $queryOnlyCommunties = ''; // 'AND c.id_community IN (1, 4)';
|
||||||
public $queryExcludeCommunties = "AND c.name != 'Testing' AND c.name IS NOT NULL";
|
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 $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 $minDate = '2012-09-02'; #Issue 1523 - Fist week of September/12
|
||||||
|
|
||||||
public $from_month;
|
public $from_month;
|
||||||
@ -238,6 +238,22 @@ class Crunchbutton_Chart extends Cana_Model {
|
|||||||
return $communities;
|
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(){
|
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";
|
$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 );
|
$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' ) ) ),
|
// '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() {
|
public function __construct() {
|
||||||
parent::__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 ){
|
public function activeByDay( $render = false ){
|
||||||
/* OLD FORMULA
|
/* OLD FORMULA
|
||||||
$user = new Crunchbutton_Chart_User();
|
$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' ) ) ),
|
'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(
|
'group-new-users-community' => array(
|
||||||
'title' => 'New Users',
|
'title' => 'New Users',
|
||||||
'tags' => array( 'reps' ),
|
'tags' => array( 'reps' ),
|
||||||
@ -136,6 +145,7 @@ class Crunchbutton_Chart_User extends Crunchbutton_Chart {
|
|||||||
{$this->queryExcludeUsers}
|
{$this->queryExcludeUsers}
|
||||||
{$this->queryOnlyCommunties}
|
{$this->queryOnlyCommunties}
|
||||||
GROUP BY u.phone ) ActiveUsers";
|
GROUP BY u.phone ) ActiveUsers";
|
||||||
|
|
||||||
$union = ' UNION ';
|
$union = ' UNION ';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1359,6 +1369,58 @@ class Crunchbutton_Chart_User extends Crunchbutton_Chart {
|
|||||||
return $parsedData;
|
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 ){
|
public function newByDay( $render = false ){
|
||||||
|
|
||||||
$query = "SELECT SUM(1) AS Total,
|
$query = "SELECT SUM(1) AS Total,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user