Example #1
0
    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
Example #3
0
    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