diff --git a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
index 6e3f397..38fbd60 100644
--- a/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
+++ b/erpnext/selling/report/customer_acquisition_and_loyalty/customer_acquisition_and_loyalty.py
@@ -14,42 +14,42 @@
             'fieldname': 'new_customers',
             'fieldtype': 'Int',
             'default': 0,
-            'width': 150
+            'width': 125
         },
         {
             'label': _('Repeat Customers'),
             'fieldname': 'repeat_customers',
             'fieldtype': 'Int',
             'default': 0,
-            'width': 150
+            'width': 125
         },
         {
             'label': _('Total'),
             'fieldname': 'total',
             'fieldtype': 'Int',
             'default': 0,
-            'width': 150
+            'width': 100
         },
         {
             'label': _('New Customer Revenue'),
             'fieldname': 'new_customer_revenue',
             'fieldtype': 'Currency',
             'default': 0.0,
-            'width': 150
+            'width': 175
         },
         {
             'label': _('Repeat Customer Revenue'),
             'fieldname': 'repeat_customer_revenue',
             'fieldtype': 'Currency',
             'default': 0.0,
-            'width': 150
+            'width': 175
         },
         {
             'label': _('Total Revenue'),
             'fieldname': 'total_revenue',
             'fieldtype': 'Currency',
             'default': 0.0,
-            'width': 150
+            'width': 175
         }
     ]
     if filters.get('view_type') == 'Monthly':
@@ -148,13 +148,13 @@
         data.append(temp)
     node_list = [x for x in territory_dict.keys() if territory_dict[x]['is_group'] == 0]
     root_node = [x for x in territory_dict.keys() if territory_dict[x]['parent'] is None][0]
+    root_data = [x for x in data if x['territory'] == root_node][0]
 
     for node in node_list:
         data = update_groups(node, data, root_node, territory_dict)
 
     for group in [x for x in territory_dict.keys() if territory_dict[x]['parent'] == root_node]:
         group_data = [x for x in data if x['territory'] == group][0]
-        root_data = [x for x in data if x['territory'] == root_node][0]
         for key in group_data.keys():
             if key not in ['indent', 'territory', 'bold']:
                 root_data[key] += group_data[key]
@@ -162,7 +162,7 @@
     return columns, data, None, None, None, 1
 
 def update_groups(node, data, root_node, territory_dict):
-    ''' Adds values of child territories to parent node except root. '''
+    """ Adds values of child territories to parent node except root. """
     parent_node = territory_dict[node]['parent']
     if parent_node != root_node and parent_node:
         node_data = [x for x in data if x['territory'] == node][0]
@@ -175,37 +175,28 @@
         return data
 
 def get_customer_stats(filters, tree_view=False):
-    ''' Calculates number of new and repeated customers. '''
+    """ Calculates number of new and repeated customers. """
     company_condition = ''
     if filters.get('company'):
         company_condition = ' and company=%(company)s'
 
     customers = []
     customers_in = {}
-    new_customers_in = {}
-    repeat_customers_in = {}
 
     for si in frappe.db.sql('''select territory, posting_date, customer, base_grand_total from `tabSales Invoice`
         where docstatus=1 and posting_date <= %(to_date)s and posting_date >= %(from_date)s
         {company_condition} order by posting_date'''.format(company_condition=company_condition),
         filters, as_dict=1):
-        if tree_view:
-            key = si.territory
-        else:
-            key = si.posting_date.strftime('%Y-%m')
+
+        key = si.territory if tree_view else si.posting_date.strftime('%Y-%m')
+        customers_in.setdefault(key, {'new': [0, 0.0], 'repeat': [0, 0.0]})
+
         if not si.customer in customers:
-            new_customers_in.setdefault(key, [0, 0.0])
-            new_customers_in[key][0] += 1
-            new_customers_in[key][1] += si.base_grand_total
+            customers_in[key]['new'][0] += 1
+            customers_in[key]['new'][1] += si.base_grand_total
             customers.append(si.customer)
         else:
-            repeat_customers_in.setdefault(key, [0, 0.0])
-            repeat_customers_in[key][0] += 1
-            repeat_customers_in[key][1] += si.base_grand_total
-        customers_in.update({
-            key: {
-                'new': new_customers_in[key] if new_customers_in.get(key) else [0, 0.0],
-                'repeat': repeat_customers_in[key]  if repeat_customers_in.get(key) else [0, 0.0],
-            }
-        })
+            customers_in[key]['repeat'][0] += 1
+            customers_in[key]['repeat'][1] += si.base_grand_total
+
     return customers_in
