def _build_report_data(self): tmp_data = OrderedDict() totals = ['Totals'] + [0] * len(self.DEVICE_TYPES) visit_counts = self.visit_queryset().values( 'visit_date', 'device__device_type__code', ).filter(device__device_type__code__in=self.DEVICE_TYPES).annotate( Count('device__device_type')).order_by('visit_date') if not visit_counts: return [] for visit in visit_counts: device_type = visit['device__device_type__code'] date_obj = visit['visit_date'] if date_obj not in tmp_data: date_str = format_date(date_obj) tmp_data[date_obj] = [date_str ] + ([0] * len(self.DEVICE_TYPES)) index = self.DEVICE_TYPES.index(device_type) + 1 tmp_data[date_obj][index] += visit['device__device_type__count'] totals[index] += visit['device__device_type__count'] return tmp_data.values() + [totals]
def _build_report_data(self): data = [] tmp_data = SortedDict() totals = defaultdict(int) visits = self.visit_queryset().order_by('visit_date') for visit in visits: # ideally this would be done in the database # but grouping really isn't a thing Django does well date = visit.visit_date if date not in tmp_data: tmp_data[date] = defaultdict(int) tmp_data[date]['visits'] += 1 page_visits = visit.pagevisit_set.count() tmp_data[date]['pageviews'] += page_visits tmp_data[date]['duration'] += visit.duration or 0 if page_visits == 1: tmp_data[date]['bounces'] += 1 if visit.visitor.visit_set.count() > 1: tmp_data[date]['returning_visits'] += 1 else: tmp_data[date]['new_visits'] += 1 for visit_date, visit_data in tmp_data.iteritems(): for key, value in visit_data.items(): totals[key] += value date_label = utils.format_date(visit_date) data.append(self._build_row(visit_data, date_label)) if data: data.append(self._build_row(totals, "Totals")) return data
def _build_report_data(self): individual_days = self.visit_queryset().values( 'visit_date' ).annotate( conversion_rate=Avg('conversion_count'), conversions=Sum('conversion_count') ).values( 'visit_date', 'conversion_rate', 'conversions' ).order_by('visit_date') if not individual_days: return [] total_data = self.visit_queryset().aggregate( conversion_rate=Avg('conversion_count'), conversions=Sum('conversion_count') ) totals = [ 'Totals', total_data['conversions'], "%.2f%%" % (total_data['conversion_rate'] * 100) ] data = [ [ format_date(day['visit_date']), day['conversions'], "%.2f%%" % (day['conversion_rate'] * 100) ] for day in individual_days ] return data + [totals]
def _build_report_data(self): tmp_data = OrderedDict() totals = ['Totals'] + [0] * len(self.DEVICE_TYPES) visit_counts = self.visit_queryset().values( 'visit_date', 'device__device_type__code', ).filter( device__device_type__code__in=self.DEVICE_TYPES ).annotate(Count('device__device_type')).order_by('visit_date') if not visit_counts: return [] for visit in visit_counts: device_type = visit['device__device_type__code'] date_obj = visit['visit_date'] if date_obj not in tmp_data: date_str = format_date(date_obj) tmp_data[date_obj] = [date_str] + ([0] * len(self.DEVICE_TYPES)) index = self.DEVICE_TYPES.index(device_type) + 1 tmp_data[date_obj][index] += visit['device__device_type__count'] totals[index] += visit['device__device_type__count'] return tmp_data.values() + [totals]
def _build_report_data(self): data = [] tmp_data = OrderedDict() totals = defaultdict(int) visits = self.visit_queryset().order_by('visit_date') for visit in visits: # ideally this would be done in the database # but grouping really isn't a thing Django does well date = visit.visit_date if date not in tmp_data: tmp_data[date] = defaultdict(int) tmp_data[date]['visits'] += 1 page_visits = visit.pagevisit_set.count() tmp_data[date]['pageviews'] += page_visits tmp_data[date]['duration'] += visit.duration or 0 if page_visits == 1: tmp_data[date]['bounces'] += 1 if visit.visitor.visit_set.count() > 1: tmp_data[date]['returning_visits'] += 1 else: tmp_data[date]['new_visits'] += 1 for visit_date, visit_data in tmp_data.iteritems(): for key, value in visit_data.items(): totals[key] += value date_label = utils.format_date(visit_date) data.append(self._build_row(visit_data, date_label)) if data: data.append(self._build_row(totals, "Totals")) return data