diff --git a/admin/app/admin/cohorts.rb b/admin/app/admin/cohorts.rb index fac1fa5a3..7e9d4a90c 100644 --- a/admin/app/admin/cohorts.rb +++ b/admin/app/admin/cohorts.rb @@ -1,6 +1,6 @@ ActiveAdmin.register Cohort, :as => 'Cohorts' do - menu :label => 'Cohorts', :parent => 'Analytics' + menu :label => 'Cohorts All-time', :parent => 'Analytics' config.sort_order = 'group_start_desc' config.batch_actions = false @@ -13,51 +13,59 @@ ActiveAdmin.register Cohort, :as => 'Cohorts' do def scoped_collection objs = super Cohort.alltime_cohorts! if 0 == Cohort.where(all_time: true).count - objs = objs.where(all_time: true).order('group_start DESC') - logger.debug("*** scoped_collection: #{objs.to_sql}") - objs + objs.where(all_time: true).order('group_start DESC') end end index :title => "All-Time Cohorts" do - column 'Cohort' do |cc| cc.group_start_str end - column Cohort::TOTAL_LABELS[:registered_users] do |cc| cc.data_val(:registered_users) end + column 'Cohort' do |cc| + div(class: :cohort_col) { cc.group_start_str } + end + + column Cohort::TOTAL_LABELS[:registered_users] do |cc| + div(class: :cohort_col) { cc.data_val(:registered_users) } + end column Cohort::TOTAL_LABELS[:first_downloaded_client_at] do |cc| - cc.data_val(:first_downloaded_client_at) + div(class: :cohort_col) { cc.data_val(:first_downloaded_client_at) } end - column '%' do |cc| cc.data_val(:first_downloaded_client_at, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:first_downloaded_client_at, true) } end column Cohort::TOTAL_LABELS[:first_certified_gear_at] do |cc| - cc.data_val(:first_certified_gear_at) + div(class: :cohort_col) { cc.data_val(:first_certified_gear_at) } end - column '%' do |cc| cc.data_val(:first_certified_gear_at, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:first_certified_gear_at, true) } end column Cohort::TOTAL_LABELS[:music_sessions_user_history] do |cc| - cc.data_val(:music_sessions_user_history) + div(class: :cohort_col) { cc.data_val(:music_sessions_user_history) } end - column '%' do |cc| cc.data_val(:music_sessions_user_history, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:music_sessions_user_history, true) } end + + column Cohort::TOTAL_LABELS[:jam_track_played] do |cc| + div(class: :cohort_col) { cc.data_val(:jam_track_played) } + end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:jam_track_played, true) } end column Cohort::TOTAL_LABELS[:jam_track_rights] do |cc| - cc.data_val(:jam_track_rights) + div(class: :cohort_col) { cc.data_val(:jam_track_rights) } end - column '%' do |cc| cc.data_val(:jam_track_rights, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:jam_track_rights, true) } end column Cohort::TOTAL_LABELS[:recorded_tracks] do |cc| - cc.data_val(:recorded_tracks) + div(class: :cohort_col) { cc.data_val(:recorded_tracks) } end - column '%' do |cc| cc.data_val(:recorded_tracks, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:recorded_tracks, true) } end column Cohort::TOTAL_LABELS[:friendships] do |cc| - cc.data_val(:friendships) + div(class: :cohort_col) { cc.data_val(:friendships) } end - column '%' do |cc| cc.data_val(:friendships, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:friendships, true) } end column Cohort::TOTAL_LABELS[:invited_users] do |cc| - cc.data_val(:invited_users) + div(class: :cohort_col) { cc.data_val(:invited_users) } end - column '%' do |cc| cc.data_val(:invited_users, true) end + column '%' do |cc| div(class: :cohort_col) { cc.data_val(:invited_users, true) } end end end diff --git a/admin/app/admin/cohorts_monthly.rb b/admin/app/admin/cohorts_monthly.rb index 4ef74f4d8..942da3191 100644 --- a/admin/app/admin/cohorts_monthly.rb +++ b/admin/app/admin/cohorts_monthly.rb @@ -54,6 +54,26 @@ ActiveAdmin.register Cohort, :as => 'Cohorts Monthly' do end column '%' do |cc| cc.data_val(:music_sessions_user_history_6_, true) end + column Cohort::MONTHLY_LABELS[:jam_track_played_1] do |cc| + cc.data_val(:jam_track_played_1) + end + column '%' do |cc| cc.data_val(:jam_track_played_1, true) end + + column Cohort::MONTHLY_LABELS[:jam_track_played_2_5] do |cc| + cc.data_val(:jam_track_played_2_5) + end + column '%' do |cc| cc.data_val(:jam_track_played_2_5, true) end + + column Cohort::MONTHLY_LABELS[:jam_track_played_6_] do |cc| + cc.data_val(:jam_track_played_6_) + end + column '%' do |cc| cc.data_val(:jam_track_played_6_, true) end + + column Cohort::MONTHLY_LABELS[:jam_track_rights_redeemed] do |cc| + cc.data_val(:jam_track_rights_redeemed) + end + column '%' do |cc| cc.data_val(:jam_track_rights_redeemed, true) end + column Cohort::MONTHLY_LABELS[:jam_track_rights] do |cc| cc.data_val(:jam_track_rights) end diff --git a/admin/app/assets/stylesheets/active_admin.css.scss b/admin/app/assets/stylesheets/active_admin.css.scss index 48aa7bb98..b71df4545 100644 --- a/admin/app/assets/stylesheets/active_admin.css.scss +++ b/admin/app/assets/stylesheets/active_admin.css.scss @@ -31,3 +31,7 @@ // .active_admin applies to any Active Admin namespace // .admin_namespace applies to the admin namespace (eg: /admin) // .other_namespace applies to a custom namespace named other (eg: /other) + +.cohort_col { + text-align: center; +} diff --git a/admin/app/models/cohort.rb b/admin/app/models/cohort.rb index 9cdef5e7a..93173a619 100644 --- a/admin/app/models/cohort.rb +++ b/admin/app/models/cohort.rb @@ -4,23 +4,18 @@ class Cohort < ActiveRecord::Base EARLIEST_DATE = Time.parse('2014-03-01') - KEY_SET_TOTAL = [:registered_users, :first_downloaded_client_at, :first_certified_gear_at, :music_sessions_user_history, 'play_jamtr', :jam_track_rights, :recorded_tracks, :friendships, :invited_users] - TOTAL_LABELS = { registered_users: 'Registered Users', first_downloaded_client_at: 'Downloaded app', first_certified_gear_at: 'Certified Gear', music_sessions_user_history: 'Played Online', - play_jamtr: 'Played JamTrack', + jam_track_played: 'Played JamTrack', jam_track_rights: 'Purchased JamTrack', recorded_tracks: 'Made Recording', - friendships: 'Connected w/Friend', + friendships: 'Connected w/ Friend', invited_users: 'Invite Others', } - # KEY_SET_TOTAL = [:registered_users, :first_downloaded_client_at, :first_certified_gear_at, :music_session_histories, 'play_jamtr', :jam_track_rights, :recordings, :friendships, :invited_users] - KEY_SET_MONTH = [:registered_users, :first_downloaded_client_at, :first_certified_gear_at, :visit_1, :visit_2_5, :visit_6_, :play_online_1, :play_online_2_5, :play_online_6_, :play_jamtr_1, :play_jamtr_2_5, :play_jamtr_6_, :jam_track_rights_redeemed, :jam_track_rights, :recorded_tracks, :friendships, :invited_users] - MONTHLY_LABELS = { registered_users: 'Registered Users', first_downloaded_client_at: 'Downloaded app', @@ -28,10 +23,13 @@ class Cohort < ActiveRecord::Base music_sessions_user_history_1: 'Played Online 1', music_sessions_user_history_2_5: 'Played Online 2-5', music_sessions_user_history_6_: 'Played Online 6+', - play_jamtr: 'Played JamTrack', + jam_track_played_1: 'Played Online 1', + jam_track_played_2_5: 'Played Online 2-5', + jam_track_played_6_: 'Played Online 6+', + jam_track_rights_redeemed: 'Redeemed JamTrack', jam_track_rights: 'Purchased JamTrack', recorded_tracks: 'Made Recording', - friendships: 'Connected w/Friend', + friendships: 'Connected w/ Friend', invited_users: 'Invite Others', } @@ -171,13 +169,15 @@ SQL count = _subquery(assoc_key = :recorded_tracks, num_user) _put_data_set(assoc_key, count, num_user) - count = _subquery(assoc_key = :jam_track_rights, num_user) + count = _subquery(assoc_key = :jam_track_rights, num_user) do |subsql| + subsql += " AND tt.redeemed = 'f' " + end _put_data_set(assoc_key, count, num_user) count = _subquery(assoc_key = :jam_track_rights, num_user) do |subsql| subsql += " AND tt.redeemed = 't' " end - _put_data_set(assoc_key, count, num_user) + _put_data_set(:jam_track_rights_redeemed, count, num_user) count = _subquery(assoc_key = :friendships, num_user) _put_data_set(assoc_key, count, num_user) @@ -194,6 +194,18 @@ SQL count = self.class.cohort_users(self).where("users.id IN (#{sql})").count _put_data_set(:music_sessions_user_history_6_, count, num_user) + # sql = _played_jamtrack_subquery(' = 1 ') + # count = self.class.cohort_users(self).where("users.id IN (#{sql})").count + # _put_data_set(:jam_track_played_1, count, num_user) + + # sql = _played_jamtrack_subquery(2..5) + # count = self.class.cohort_users(self).where("users.id IN (#{sql})").count + # _put_data_set(:jam_track_played_2_5, count, num_user) + + # sql = _played_jamtrack_subquery(' >= 6') + # count = self.class.cohort_users(self).where("users.id IN (#{sql})").count + # _put_data_set(:jam_track_played_6_, count, num_user) + self.save! end @@ -235,6 +247,9 @@ SQL count = _subquery(assoc_key = :jam_track_rights, num_user) _put_data_set(assoc_key, count, num_user) + # count = _subquery(assoc_key = :jam_track_played, num_user) + # _put_data_set(assoc_key, count, num_user) + sql = _played_online_subquery(' >= 1') count = self.class.cohort_users(self).where("users.id IN (#{sql})").count _put_data_set(:music_sessions_user_history, count, num_user) @@ -259,7 +274,7 @@ SQL end def group_start_str - self.group_start.strftime('%Y-%m-%d') + self.group_start.strftime('%Y-%m') end def group_end_str @@ -269,7 +284,7 @@ SQL def data_val(col, percent=false) if percent val = self.data_set["#{col}%"] - val ? '%0.f' % val : '' + val ? "#{'%0.f' % val}%" : '' else self.data_set[col.to_s] end