diff --git a/erpnext/buying/page/purchase_analytics/README.md b/erpnext/buying/page/purchase_analytics/README.md
deleted file mode 100644
index 332e4c2..0000000
--- a/erpnext/buying/page/purchase_analytics/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Trends of purchases across Items, Item Groups, Suppliers.
\ No newline at end of file
diff --git a/erpnext/buying/page/purchase_analytics/__init__.py b/erpnext/buying/page/purchase_analytics/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/buying/page/purchase_analytics/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/buying/page/purchase_analytics/purchase_analytics.js b/erpnext/buying/page/purchase_analytics/purchase_analytics.js
deleted file mode 100644
index 06764a3..0000000
--- a/erpnext/buying/page/purchase_analytics/purchase_analytics.js
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages['purchase-analytics'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Purchase Analytics'),
-		single_column: true
-	});
-
-	new erpnext.PurchaseAnalytics(wrapper);
-
-	frappe.breadcrumbs.add("Buying");
-}
-
-erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({
-	init: function(wrapper) {
-		this._super({
-			title: __("Purchase Analytics"),
-			parent: $(wrapper).find('.layout-main'),
-			page: wrapper.page,
-			doctypes: ["Item", "Item Group", "Supplier", "Supplier Group", "Company", "Fiscal Year",
-				"Purchase Invoice", "Purchase Invoice Item",
-				"Purchase Order", "Purchase Order Item[Purchase Analytics]",
-				"Purchase Receipt", "Purchase Receipt Item[Purchase Analytics]"],
-			tree_grid: { show: true }
-		});
-
-		this.tree_grids = {
-			"Supplier Group": {
-				label: __("Supplier Group / Supplier"),
-				show: true,
-				item_key: "supplier",
-				parent_field: "parent_supplier_group",
-				formatter: function(item) {
-					return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name;
-				}
-			},
-			"Supplier": {
-				label: __("Supplier"),
-				show: false,
-				item_key: "supplier",
-				formatter: function(item) {
-					return item.supplier_name ? item.supplier_name + " (" + item.name + ")" : item.name;
-				}
-			},
-			"Item Group": {
-				label: "Item",
-				show: true,
-				parent_field: "parent_item_group",
-				item_key: "item_code",
-				formatter: function(item) {
-					return item.name;
-				}
-			},
-			"Item": {
-				label: "Item",
-				show: false,
-				item_key: "item_code",
-				formatter: function(item) {
-					return item.name;
-				}
-			},
-		}
-	},
-	setup_columns: function() {
-		this.tree_grid = this.tree_grids[this.tree_type];
-
-		var std_columns = [
-			{id: "name", name: this.tree_grid.label, field: "name", width: 300},
-			{id: "total", name: "Total", field: "total", plot: false,
-				formatter: this.currency_formatter}
-		];
-
-		this.make_date_range_columns();
-		this.columns = std_columns.concat(this.columns);
-	},
-	filters: [
-		{fieldtype:"Select", label: __("Tree Type"), fieldname: "tree_type",
-			options:["Supplier Group", "Supplier", "Item Group", "Item"],
-			filter: function(val, item, opts, me) {
-				return me.apply_zero_filter(val, item, opts, me);
-			}},
-		{fieldtype:"Select", label: __("Based On"), fieldname: "based_on",
-			options:["Purchase Invoice", "Purchase Order", "Purchase Receipt"]},
-		{fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty",
-			options:["Value", "Quantity"]},
-		{fieldtype:"Select", label: __("Company"), link:"Company", fieldname: "company",
-			default_value: __("Select Company...")},
-		{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
-		{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
-		{fieldtype:"Select", label: __("Range"), fieldname: "range",
-			options:[{label: __("Daily"), value: "Daily"}, {label: __("Weekly"), value: "Weekly"},
-				{label: __("Monthly"), value: "Monthly"}, {label: __("Quarterly"), value: "Quarterly"},
-				{label: __("Yearly"), value: "Yearly"}]}
-	],
-	setup_filters: function() {
-		var me = this;
-		this._super();
-
-		this.trigger_refresh_on_change(["value_or_qty", "tree_type", "based_on", "company"]);
-
-		this.show_zero_check();
-	},
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.range.val('Monthly');
-	},
-	prepare_data: function() {
-		var me = this;
-		if (!this.tl) {
-			// add 'Not Set' Supplier & Item
-			// (Supplier / Item are not mandatory!!)
-			frappe.report_dump.data["Supplier"].push({
-				name: __("Not Set"),
-				parent_supplier_group: __("All Supplier Groups"),
-				id: "Not Set",
-			});
-
-			frappe.report_dump.data["Item"].push({
-				name: __("Not Set"),
-				parent_item_group: "All Item Groups",
-				id: "Not Set",
-			});
-		}
-
-		if (!this.tl || !this.tl[this.based_on]) {
-			this.make_transaction_list(this.based_on, this.based_on + " Item");
-		}
-
-
-		if(!this.data || me.item_type != me.tree_type) {
-			var items;
-			if(me.tree_type=='Supplier') {
-				items = frappe.report_dump.data["Supplier"];
-			} else if(me.tree_type=='Supplier Group') {
-				items = this.prepare_tree("Supplier", "Supplier Group");
-			} else if(me.tree_type=="Item Group") {
-				items = this.prepare_tree("Item", "Item Group");
-			} else if(me.tree_type=="Item") {
-				items = frappe.report_dump.data["Item"];
-			}
-
-			me.item_type = me.tree_type
-			me.parent_map = {};
-			me.item_by_name = {};
-			me.data = [];
-
-			$.each(items, function(i, v) {
-				var d = copy_dict(v);
-
-				me.data.push(d);
-				me.item_by_name[d.name] = d;
-				if(d[me.tree_grid.parent_field]) {
-					me.parent_map[d.name] = d[me.tree_grid.parent_field];
-				}
-				me.reset_item_values(d);
-			});
-
-			this.set_indent();
-
-		} else {
-			// otherwise, only reset values
-			$.each(this.data, function(i, d) {
-				me.reset_item_values(d);
-			});
-		}
-
-		this.prepare_balances();
-		if(me.tree_grid.show) {
-			this.set_totals(false);
-			this.update_groups();
-		} else {
-			this.set_totals(true);
-		}
-	},
-	prepare_balances: function() {
-		var me = this;
-		var from_date = frappe.datetime.str_to_obj(this.from_date);
-		var to_date = frappe.datetime.str_to_obj(this.to_date);
-		var is_val = this.value_or_qty == 'Value';
-
-		$.each(this.tl[this.based_on], function(i, tl) {
-			if (me.is_default('company') ? true : tl.company === me.company) {
-				var posting_date = frappe.datetime.str_to_obj(tl.posting_date);
-				if (posting_date >= from_date && posting_date <= to_date) {
-					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
-						me.item_by_name['Not Set'];
-					item[me.column_map[tl.posting_date].field] += (is_val ? tl.base_net_amount : tl.qty);
-				}
-			}
-		});
-	},
-	update_groups: function() {
-		var me = this;
-
-		$.each(this.data, function(i, item) {
-			var parent = me.parent_map[item.name];
-			while(parent) {
-				var parent_group = me.item_by_name[parent];
-
-				$.each(me.columns, function(c, col) {
-					if (col.formatter == me.currency_formatter) {
-						parent_group[col.field] =
-							flt(parent_group[col.field])
-							+ flt(item[col.field]);
-					}
-				});
-				parent = me.parent_map[parent];
-			}
-		});
-	},
-	set_totals: function(sort) {
-		var me = this;
-		var checked = false;
-		$.each(this.data, function(i, d) {
-			d.total = 0.0;
-			$.each(me.columns, function(i, col) {
-				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total")
-					d.total += d[col.field];
-				if(d.checked) checked = true;
-			})
-		});
-
-		if(sort)this.data = this.data.sort(function(a, b) { return b.total - a.total; });
-
-		if(!this.checked) {
-			this.data[0].checked = true;
-		}
-	}
-});
diff --git a/erpnext/buying/page/purchase_analytics/purchase_analytics.json b/erpnext/buying/page/purchase_analytics/purchase_analytics.json
deleted file mode 100644
index ad13c7d..0000000
--- a/erpnext/buying/page/purchase_analytics/purchase_analytics.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "creation": "2012-09-21 20:15:16.000000", 
- "docstatus": 0, 
- "doctype": "Page", 
- "icon": "fa fa-bar-chart", 
- "idx": 1, 
- "modified": "2013-07-11 14:43:52.000000", 
- "modified_by": "Administrator", 
- "module": "Buying", 
- "name": "purchase-analytics", 
- "owner": "Administrator", 
- "page_name": "purchase-analytics", 
- "roles": [
-  {
-   "role": "Analytics"
-  }, 
-  {
-   "role": "Purchase Manager"
-  }
- ], 
- "standard": "Yes", 
- "title": "Purchase Analytics"
-}
\ No newline at end of file
diff --git a/erpnext/buying/report/purchase_analytics/purchase_analytics.js b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
index 297ec51..b55046e 100644
--- a/erpnext/buying/report/purchase_analytics/purchase_analytics.js
+++ b/erpnext/buying/report/purchase_analytics/purchase_analytics.js
@@ -68,11 +68,8 @@
 		}
 
 	],
-	"formatter": function(value, row, column, data) {
-		if(!value){
-			value = 0
-		}
-		return value;
+	after_datatable_render: function(datatable_obj) {
+		$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
 	},
 	get_datatable_options(options) {
 		return Object.assign(options, {
@@ -110,19 +107,19 @@
 						labels: raw_data.labels,
 						datasets: new_datasets
 					}
-					
+
 					setTimeout(() => {
 						frappe.query_report.chart.update(new_data)
-					},200)
-					
-					
+					},500)
+
+
 					setTimeout(() => {
 						frappe.query_report.chart.draw(true);
-					}, 800)
+					}, 1000)
 
 					frappe.query_report.raw_chart_data = new_data;
 				},
 			}
-		})
-	},
+		});
+	}
 }
diff --git a/erpnext/manufacturing/page/production_analytics/__init__.py b/erpnext/manufacturing/page/production_analytics/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/manufacturing/page/production_analytics/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/manufacturing/page/production_analytics/production_analytics.js b/erpnext/manufacturing/page/production_analytics/production_analytics.js
deleted file mode 100644
index 1647313..0000000
--- a/erpnext/manufacturing/page/production_analytics/production_analytics.js
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages['production-analytics'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Production Analytics'),
-		single_column: true
-	});
-
-	new erpnext.ProductionAnalytics(wrapper);
-
-	frappe.breadcrumbs.add("Manufacturing");
-}
-
-erpnext.ProductionAnalytics = frappe.views.GridReportWithPlot.extend({
-	init: function(wrapper) {
-		this._super({
-			title: __("Production Analytics"),
-			parent: $(wrapper).find('.layout-main'),
-			page: wrapper.page,
-			doctypes: ["Item", "Company", "Fiscal Year", "Work Order"]
-		});
-
-	},
-	setup_columns: function() {
-
-		var std_columns = [
-			{id: "name", name: __("Status"), field: "name", width: 100}
-		];
-
-		this.make_date_range_columns();
-		this.columns = std_columns.concat(this.columns);
-	},
-	filters: [
-		{fieldtype:"Select", label: __("Company"), link:"Company", fieldname: "company",
-			default_value: __("Select Company...")},
-		{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
-		{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
-		{fieldtype:"Select", label: __("Range"), fieldname: "range",
-			options:[{label: __("Daily"), value: "Daily"}, {label: __("Weekly"), value: "Weekly"},
-				{label: __("Monthly"), value: "Monthly"}, {label: __("Quarterly"), value: "Quarterly"},
-				{label: __("Yearly"), value: "Yearly"}]}
-	],
-	setup_filters: function() {
-		var me = this;
-		this._super();
-
-		this.trigger_refresh_on_change(["company"]);
-		this.trigger_refresh_on_change(["range"]);
-
-		this.show_zero_check();
-
-	},
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.range.val('Monthly');
-	},
-	setup_chart: function() {
-		var me = this;
-
-		var chart_data = this.get_chart_data ? this.get_chart_data() : null;
-
-		const parent = this.wrapper.find('.chart')[0];
-		this.chart = new Chart(parent, {
-			height: 200,
-			data: chart_data,
-			type: 'line'
-		});
-	},
-	set_default_values: function() {
-		var values = {
-			from_date: frappe.datetime.str_to_user(frappe.datetime.add_months(frappe.datetime.now_datetime(),-12) ),
-			to_date: frappe.datetime.str_to_user(frappe.datetime.add_months(frappe.datetime.now_datetime(),1))
-		}
-
-		var me = this;
-		$.each(values, function(i, v) {
-			if(me.filter_inputs[i] && !me.filter_inputs[i].val())
-				me.filter_inputs[i].val(v);
-		})
-	},
-
-	prepare_data: function() {
-		// add Opening, Closing, Totals rows
-		// if filtered by account and / or voucher
-		var me = this;
-		var all_open_orders = {name:"All Work Orders", "id": "all-open-pos",
-			checked:true};
-		var not_started = {name:"Not Started", "id":"not-started-pos",
-			checked:true};
-		var overdue = {name:"Overdue (Not Started)", "id":"overdue-pos",
-			checked:true};
-		var  pending = {name:"Pending", "id":"pending-pos",
-			checked:true};
-		var completed = {name:"Completed", "id":"completed-pos",
-			checked:true};
-
-		$.each(frappe.report_dump.data["Work Order"], function(i, d) {
-			var dateobj = frappe.datetime.str_to_obj(d.creation);
-			var date = frappe.datetime.str_to_user(d.creation.split(" ")[0]);
-
-			$.each(me.columns, function(i,col) {
-				if (i > 1){
-					var start_period = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(col.id));
-					var end_period = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(col.name));
-					var astart_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_start_date));
-					var planned_start_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.planned_start_date));
-					var aend_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_end_date));
-					var modified = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.modified));
-
-					if (dateobj <= start_period || dateobj <= end_period) {
-						all_open_orders[col.field] = flt(all_open_orders[col.field]) + 1;
-
-						if(d.status=="Completed") {
-							if(aend_date < start_period || modified < start_period) {
-								completed[col.field] = flt(completed[col.field]) + 1;
-							}
-							else if (astart_date < start_period) {
-								pending[col.field] = flt(pending[col.field]) + 1;
-							}
-							else if (planned_start_date < start_period) {
-								overdue[col.field] = flt(overdue[col.field]) + 1;
-							} else {
-								not_started[col.field] = flt(not_started[col.field]) + 1;
-							}
-						}else if(d.status == "In Process")
-						{
-							if (astart_date < start_period || modified < start_period){
-								pending[col.field] = flt(pending[col.field]) + 1;
-							}else if (planned_start_date < start_period)	{
-								overdue[col.field] = flt(overdue[col.field]) + 1;
-							}else{
-								not_started[col.field] = flt(not_started[col.field]) + 1;
-							}
-						}else if(d.status == "Not Started") {
-							if (planned_start_date < start_period){
-								overdue[col.field] = flt(overdue[col.field]) + 1;
-							}else{
-								not_started[col.field] = flt(not_started[col.field]) + 1;
-							}
-						}
-					}
-				}
-			});
-		});
-		if(me.columns.length < 30){
-			this.chart_area.toggle(true);
-		}else {
-			this.chart_area.toggle(false);
-		}
-		this.data = [all_open_orders, not_started, overdue, pending, completed];
-
-	}
-});
diff --git a/erpnext/manufacturing/page/production_analytics/production_analytics.json b/erpnext/manufacturing/page/production_analytics/production_analytics.json
deleted file mode 100644
index cd73bc8..0000000
--- a/erpnext/manufacturing/page/production_analytics/production_analytics.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "content": null, 
- "creation": "2012-09-21 20:15:16", 
- "docstatus": 0, 
- "doctype": "Page", 
- "icon": "fa fa-bar-chart", 
- "idx": 1, 
- "modified": "2017-02-20 17:33:05.913097", 
- "modified_by": "Administrator", 
- "module": "Manufacturing", 
- "name": "production-analytics", 
- "owner": "Administrator", 
- "page_name": "production-analytics", 
- "roles": [
-  {
-   "role": "Analytics"
-  }, 
-  {
-   "role": "Manufacturing Manager"
-  }
- ], 
- "script": null, 
- "standard": "Yes", 
- "style": null, 
- "title": "Production Analytics"
-}
\ No newline at end of file
diff --git a/erpnext/manufacturing/report/production_analytics/production_analytics.js b/erpnext/manufacturing/report/production_analytics/production_analytics.js
index b7b8f05..99f9b12 100644
--- a/erpnext/manufacturing/report/production_analytics/production_analytics.js
+++ b/erpnext/manufacturing/report/production_analytics/production_analytics.js
@@ -39,8 +39,5 @@
 			default: "Monthly",
 			reqd: 1
 		}
-	],
-	"formatter": function(value, row, column, data) {
-		return value;
-	}
+	]
 }
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index dc4c94c..4a67eb4 100755
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -568,10 +568,10 @@
 erpnext.patches.v11_0.add_default_dispatch_notification_template
 erpnext.patches.v11_0.add_market_segments
 erpnext.patches.v11_0.add_sales_stages
-execute:frappe.delete_doc("Page", "sales-analytics")
-execute:frappe.delete_doc("Page", "purchase-analytics")
-execute:frappe.delete_doc("Page", "stock-analytics")
-execute:frappe.delete_doc("Page", "production-analytics")
+execute:frappe.delete_doc_if_exists("Page", "sales-analytics")
+execute:frappe.delete_doc_if_exists("Page", "purchase-analytics")
+execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
+execute:frappe.delete_doc_if_exists("Page", "production-analytics")
 erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13
 erpnext.patches.v11_0.drop_column_max_days_allowed
 erpnext.patches.v11_0.change_healthcare_desktop_icons
diff --git a/erpnext/selling/page/sales_analytics/README.md b/erpnext/selling/page/sales_analytics/README.md
deleted file mode 100644
index 11994c2..0000000
--- a/erpnext/selling/page/sales_analytics/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Trends of sales by Item, Item Group, Customer etc.
\ No newline at end of file
diff --git a/erpnext/selling/page/sales_analytics/__init__.py b/erpnext/selling/page/sales_analytics/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/selling/page/sales_analytics/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.js b/erpnext/selling/page/sales_analytics/sales_analytics.js
deleted file mode 100644
index f5caf1d..0000000
--- a/erpnext/selling/page/sales_analytics/sales_analytics.js
+++ /dev/null
@@ -1,246 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages['sales-analytics'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Sales Analytics'),
-		single_column: true
-	});
-	new erpnext.SalesAnalytics(wrapper);
-
-
-	frappe.breadcrumbs.add("Selling")
-
-};
-
-erpnext.SalesAnalytics = frappe.views.TreeGridReport.extend({
-	init: function(wrapper) {
-		this._super({
-			title: __("Sales Analytics"),
-			parent: $(wrapper).find('.layout-main'),
-			page: wrapper.page,
-			doctypes: ["Item", "Item Group", "Customer", "Customer Group", "Company", "Territory",
-				"Fiscal Year", "Sales Invoice", "Sales Invoice Item",
-				"Sales Order", "Sales Order Item[Sales Analytics]",
-				"Delivery Note", "Delivery Note Item[Sales Analytics]"],
-			tree_grid: { show: true }
-		});
-
-		this.tree_grids = {
-			"Customer Group": {
-				label: __("Customer Group / Customer"),
-				show: true,
-				item_key: "customer",
-				parent_field: "parent_customer_group",
-				formatter: function(item) {
-					return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name;
-				}
-			},
-			"Customer": {
-				label: __("Customer"),
-				show: false,
-				item_key: "customer",
-				formatter: function(item) {
-					return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name;
-				}
-			},
-			"Item Group": {
-				label: __("Item"),
-				show: true,
-				parent_field: "parent_item_group",
-				item_key: "item_code",
-				formatter: function(item) {
-					return item.name;
-				}
-			},
-			"Item": {
-				label: __("Item"),
-				show: false,
-				item_key: "item_code",
-				formatter: function(item) {
-					return item.name;
-				}
-			},
-			"Territory": {
-				label: __("Territory / Customer"),
-				show: true,
-				item_key: "customer",
-				parent_field: "parent_territory",
-				formatter: function(item) {
-					return item.customer_name? item.customer_name + " (" + item.name + ")" : item.name;
-				}
-			}
-		}
-	},
-	setup_columns: function() {
-		this.tree_grid = this.tree_grids[this.tree_type];
-
-		var std_columns = [
-			{id: "name", name: this.tree_grid.label, field: "name", width: 300},
-			{id: "total", name: "Total", field: "total", plot: false,
-				formatter: this.currency_formatter}
-		];
-
-		this.make_date_range_columns();
-		this.columns = std_columns.concat(this.columns);
-	},
-	filters: [
-		{fieldtype:"Select", fieldname: "tree_type", label: __("Tree Type"), options:["Customer Group", "Customer",
-			"Item Group", "Item", "Territory"],
-			filter: function(val, item, opts, me) {
-				return me.apply_zero_filter(val, item, opts, me);
-			}},
-		{fieldtype:"Select", fieldname: "based_on", label: __("Based On"), options:["Sales Invoice",
-			"Sales Order", "Delivery Note"]},
-		{fieldtype:"Select", fieldname: "value_or_qty", label:  __("Value or Qty"),
-			options:[{label: __("Value"), value: "Value"}, {label: __("Quantity"), value: "Quantity"}]},
-		{fieldtype:"Date", fieldname: "from_date", label: __("From Date")},
-		{fieldtype:"Label", fieldname: "to", label: __("To")},
-		{fieldtype:"Date", fieldname: "to_date", label: __("To Date")},
-		{fieldtype:"Select", fieldname: "company", label: __("Company"), link:"Company",
-			default_value: __("Select Company...")},
-		{fieldtype:"Select", label: __("Range"), fieldname: "range",
-			options:[{label: __("Daily"), value: "Daily"}, {label: __("Weekly"), value: "Weekly"},
-				{label: __("Monthly"), value: "Monthly"}, {label: __("Quarterly"), value: "Quarterly"},
-				{label: __("Yearly"), value: "Yearly"}]}
-	],
-	setup_filters: function() {
-		var me = this;
-		this._super();
-
-		this.trigger_refresh_on_change(["value_or_qty", "tree_type", "based_on", "company"]);
-
-		this.show_zero_check();
-	},
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.range.val('Monthly');
-	},
-	prepare_data: function() {
-		var me = this;
-		if (!this.tl) {
-			// add 'Not Set' Customer & Item
-			// (Customer / Item are not mandatory!!)
-			frappe.report_dump.data["Customer"].push({
-				name: "Not Set",
-				parent_customer_group: "All Customer Groups",
-				parent_territory: "All Territories",
-				id: "Not Set",
-			});
-
-			frappe.report_dump.data["Item"].push({
-				name: "Not Set",
-				parent_item_group: "All Item Groups",
-				id: "Not Set",
-			});
-		}
-
-		if (!this.tl || !this.tl[this.based_on]) {
-			this.make_transaction_list(this.based_on, this.based_on + " Item");
-		}
-
-		if(!this.data || me.item_type != me.tree_type) {
-			if(me.tree_type=='Customer') {
-				var items = frappe.report_dump.data["Customer"];
-			} if(me.tree_type=='Customer Group') {
-				var items = this.prepare_tree("Customer", "Customer Group");
-			} else if(me.tree_type=="Item Group") {
-				var items = this.prepare_tree("Item", "Item Group");
-			} else if(me.tree_type=="Item") {
-				var items = frappe.report_dump.data["Item"];
-			} else if(me.tree_type=="Territory") {
-				var items = this.prepare_tree("Customer", "Territory");
-			}
-
-			me.item_type = me.tree_type
-			me.parent_map = {};
-			me.item_by_name = {};
-			me.data = [];
-
-			$.each(items, function(i, v) {
-				var d = copy_dict(v);
-
-				me.data.push(d);
-				me.item_by_name[d.name] = d;
-				if(d[me.tree_grid.parent_field]) {
-					me.parent_map[d.name] = d[me.tree_grid.parent_field];
-				}
-				me.reset_item_values(d);
-			});
-
-			this.set_indent();
-
-		} else {
-			// otherwise, only reset values
-			$.each(this.data, function(i, d) {
-				me.reset_item_values(d);
-			});
-		}
-
-		this.prepare_balances();
-		if(me.tree_grid.show) {
-			this.set_totals(false);
-			this.update_groups();
-		} else {
-			this.set_totals(true);
-		}
-
-	},
-	prepare_balances: function() {
-		var me = this;
-		var from_date = frappe.datetime.str_to_obj(this.from_date);
-		var to_date = frappe.datetime.str_to_obj(this.to_date);
-		var is_val = this.value_or_qty == 'Value';
-
-		$.each(this.tl[this.based_on], function(i, tl) {
-			if (me.is_default('company') ? true : tl.company === me.company) {
-				var posting_date = frappe.datetime.str_to_obj(tl.posting_date);
-				if (posting_date >= from_date && posting_date <= to_date) {
-					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
-						me.item_by_name['Not Set'];
-					if(item){
-						item[me.column_map[tl.posting_date].field] += (is_val ? tl.base_net_amount : tl.qty);
-					}
-				}
-			}
-		});
-	},
-	update_groups: function() {
-		var me = this;
-
-		$.each(this.data, function(i, item) {
-			var parent = me.parent_map[item.name];
-			while(parent) {
-				var parent_group = me.item_by_name[parent];
-
-				$.each(me.columns, function(c, col) {
-					if (col.formatter == me.currency_formatter) {
-						parent_group[col.field] =
-							flt(parent_group[col.field])
-							+ flt(item[col.field]);
-					}
-				});
-				parent = me.parent_map[parent];
-			}
-		});
-	},
-	set_totals: function(sort) {
-		var me = this;
-		var checked = false;
-		$.each(this.data, function(i, d) {
-			d.total = 0.0;
-			$.each(me.columns, function(i, col) {
-				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total")
-					d.total += d[col.field];
-				if(d.checked) checked = true;
-			})
-		});
-
-		if(sort)this.data = this.data.sort(function(a, b) { return a.total < b.total; });
-
-		if(!this.checked) {
-			this.data[0].checked = true;
-		}
-	}
-});
diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.json b/erpnext/selling/page/sales_analytics/sales_analytics.json
deleted file mode 100644
index 4a7761e..0000000
--- a/erpnext/selling/page/sales_analytics/sales_analytics.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "creation": "2012-09-21 20:15:12.000000", 
- "docstatus": 0, 
- "doctype": "Page", 
- "icon": "fa fa-bar-chart", 
- "idx": 1, 
- "modified": "2013-07-11 14:43:59.000000", 
- "modified_by": "Administrator", 
- "module": "Selling", 
- "name": "sales-analytics", 
- "owner": "Administrator", 
- "page_name": "sales-analytics", 
- "roles": [
-  {
-   "role": "Analytics"
-  }, 
-  {
-   "role": "Sales Manager"
-  }, 
-  {
-   "role": "Maintenance Manager"
-  }
- ], 
- "standard": "Yes", 
- "title": "Sales Analytics"
-}
\ No newline at end of file
diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.js b/erpnext/selling/report/sales_analytics/sales_analytics.js
index 7dc7c75..0df425d 100644
--- a/erpnext/selling/report/sales_analytics/sales_analytics.js
+++ b/erpnext/selling/report/sales_analytics/sales_analytics.js
@@ -67,6 +67,9 @@
 			reqd: 1
 		}
 	],
+	after_datatable_render: function(datatable_obj) {
+		$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
+	},
 	get_datatable_options(options) {
 		return Object.assign(options, {
 			checkboxColumn: true,
@@ -106,12 +109,12 @@
 
 					setTimeout(() => {
 						frappe.query_report.chart.update(new_data)
-					},200)
+					}, 500)
 
 
 					setTimeout(() => {
 						frappe.query_report.chart.draw(true);
-					}, 800)
+					}, 1000)
 
 					frappe.query_report.raw_chart_data = new_data;
 				},
diff --git a/erpnext/selling/report/sales_analytics/sales_analytics.py b/erpnext/selling/report/sales_analytics/sales_analytics.py
index 8d99a9b..9cc6c40 100644
--- a/erpnext/selling/report/sales_analytics/sales_analytics.py
+++ b/erpnext/selling/report/sales_analytics/sales_analytics.py
@@ -212,11 +212,11 @@
 
 	def get_period(self, posting_date):
 		if self.filters.range == 'Weekly':
-			period = "Week " + str(posting_date.isocalendar()[1])
+			period = "Week " + str(posting_date.isocalendar()[1]) + " " + str(posting_date.year)
 		elif self.filters.range == 'Monthly':
-			period = self.months[posting_date.month - 1]
+			period = str(self.months[posting_date.month - 1]) + " " + str(posting_date.year)
 		elif self.filters.range == 'Quarterly':
-			period = "Quarter " + str(((posting_date.month-1)//3)+1)
+			period = "Quarter " + str(((posting_date.month-1)//3)+1) +" " + str(posting_date.year)
 		else:
 			year = get_fiscal_year(posting_date, company=self.filters.company)
 			period = str(year[2])
@@ -280,8 +280,7 @@
 		self.chart = {
 			"data": {
 				'labels': labels,
-				'datasets':[
-				]
+				'datasets':[]
 			},
 			"type": "line"
 		}
\ No newline at end of file
diff --git a/erpnext/selling/report/sales_analytics/test_analytics.py b/erpnext/selling/report/sales_analytics/test_analytics.py
index f59fff4..5d68b06 100644
--- a/erpnext/selling/report/sales_analytics/test_analytics.py
+++ b/erpnext/selling/report/sales_analytics/test_analytics.py
@@ -35,52 +35,52 @@
 			{
 				"entity": "_Test Customer 1",
 				"entity_name": "_Test Customer 1",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 0.0,
-				"jul": 0.0,
-				"aug": 0.0,
-				"sep": 0.0,
-				"oct": 0.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 2000.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 0.0,
+				"jul_2017": 0.0,
+				"aug_2017": 0.0,
+				"oct_2017": 0.0,
+				"sep_2017": 0.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 2000.0,
+				"mar_2018": 0.0,
 				"total":2000.0
 			},
 			{
 				"entity": "_Test Customer 2",
 				"entity_name": "_Test Customer 2",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 0.0,
-				"jul": 0.0,
-				"aug": 0.0,
-				"sep": 1500.0,
-				"oct": 1000.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 0.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 0.0,
+				"jul_2017": 0.0,
+				"aug_2017": 0.0,
+				"sep_2017": 1500.0,
+				"oct_2017": 1000.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 0.0,
+				"mar_2018": 0.0,
 				"total":2500.0
 			},
 			{
 				"entity": "_Test Customer 3",
 				"entity_name": "_Test Customer 3",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 2000.0,
-				"jul": 1000.0,
-				"aug": 0.0,
-				"sep": 0.0,
-				"oct": 0.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 0.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 2000.0,
+				"jul_2017": 1000.0,
+				"aug_2017": 0.0,
+				"sep_2017": 0.0,
+				"oct_2017": 0.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 0.0,
+				"mar_2018": 0.0,
 				"total": 3000.0
 			}
 		]
@@ -103,18 +103,18 @@
 		expected_first_row = {
 			"entity": "All Customer Groups",
 			"indent": 0,
-			"apr": 0.0,
-			"may": 0.0,
-			"jun": 2000.0,
-			"jul": 1000.0,
-			"aug": 0.0,
-			"sep": 1500.0,
-			"oct": 1000.0,
-			"nov": 0.0,
-			"dec": 0.0,
-			"jan": 0.0,
-			"feb": 2000.0,
-			"mar": 0.0,
+			"apr_2017": 0.0,
+			"may_2017": 0.0,
+			"jun_2017": 2000.0,
+			"jul_2017": 1000.0,
+			"aug_2017": 0.0,
+			"sep_2017": 1500.0,
+			"oct_2017": 1000.0,
+			"nov_2017": 0.0,
+			"dec_2017": 0.0,
+			"jan_2018": 0.0,
+			"feb_2018": 2000.0,
+			"mar_2018": 0.0,
 			"total":7500.0
 		}
 		self.assertEqual(expected_first_row, report[1][0])
@@ -136,52 +136,52 @@
 			{
 				"entity": "_Test Customer 1",
 				"entity_name": "_Test Customer 1",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 0.0,
-				"jul": 0.0,
-				"aug": 0.0,
-				"sep": 0.0,
-				"oct": 0.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 20.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 0.0,
+				"jul_2017": 0.0,
+				"aug_2017": 0.0,
+				"sep_2017": 0.0,
+				"oct_2017": 0.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 20.0,
+				"mar_2018": 0.0,
 				"total":20.0
 			},
 			{
 				"entity": "_Test Customer 2",
 				"entity_name": "_Test Customer 2",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 0.0,
-				"jul": 0.0,
-				"aug": 0.0,
-				"sep": 15.0,
-				"oct": 10.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 0.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 0.0,
+				"jul_2017": 0.0,
+				"aug_2017": 0.0,
+				"sep_2017": 15.0,
+				"oct_2017": 10.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 0.0,
+				"mar_2018": 0.0,
 				"total":25.0
 			},
 			{
 				"entity": "_Test Customer 3",
 				"entity_name": "_Test Customer 3",
-				"apr": 0.0,
-				"may": 0.0,
-				"jun": 20.0,
-				"jul": 10.0,
-				"aug": 0.0,
-				"sep": 0.0,
-				"oct": 0.0,
-				"nov": 0.0,
-				"dec": 0.0,
-				"jan": 0.0,
-				"feb": 0.0,
-				"mar": 0.0,
+				"apr_2017": 0.0,
+				"may_2017": 0.0,
+				"jun_2017": 20.0,
+				"jul_2017": 10.0,
+				"aug_2017": 0.0,
+				"sep_2017": 0.0,
+				"oct_2017": 0.0,
+				"nov_2017": 0.0,
+				"dec_2017": 0.0,
+				"jan_2018": 0.0,
+				"feb_2018": 0.0,
+				"mar_2018": 0.0,
 				"total": 30.0
 			}
 		]
diff --git a/erpnext/stock/page/stock_analytics/README.md b/erpnext/stock/page/stock_analytics/README.md
deleted file mode 100644
index 86c3644..0000000
--- a/erpnext/stock/page/stock_analytics/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Trends of Items quantities and values.
\ No newline at end of file
diff --git a/erpnext/stock/page/stock_analytics/__init__.py b/erpnext/stock/page/stock_analytics/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/stock/page/stock_analytics/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/stock/page/stock_analytics/stock_analytics.js b/erpnext/stock/page/stock_analytics/stock_analytics.js
deleted file mode 100644
index 6deeb7a..0000000
--- a/erpnext/stock/page/stock_analytics/stock_analytics.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages['stock-analytics'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Stock Analytics'),
-		single_column: true
-	});
-	
-	frappe.require(["assets/erpnext/js/stock_grid_report.js",
-		"assets/erpnext/js/stock_analytics.js"], function() {
-		new erpnext.StockAnalytics(wrapper);
-		frappe.breadcrumbs.add("Stock")
-	});
-};
diff --git a/erpnext/stock/page/stock_analytics/stock_analytics.json b/erpnext/stock/page/stock_analytics/stock_analytics.json
deleted file mode 100644
index 90e9f2e..0000000
--- a/erpnext/stock/page/stock_analytics/stock_analytics.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "creation": "2012-09-21 20:15:14.000000", 
- "docstatus": 0, 
- "doctype": "Page", 
- "icon": "fa fa-bar-chart", 
- "idx": 1, 
- "modified": "2013-07-11 14:44:10.000000", 
- "modified_by": "Administrator", 
- "module": "Stock", 
- "name": "stock-analytics", 
- "owner": "Administrator", 
- "page_name": "stock-analytics", 
- "roles": [
-  {
-   "role": "Analytics"
-  }, 
-  {
-   "role": "Material Manager"
-  }
- ], 
- "standard": "Yes", 
- "title": "Stock Analytics"
-}
\ No newline at end of file
diff --git a/erpnext/stock/report/stock_analytics/stock_analytics.js b/erpnext/stock/report/stock_analytics/stock_analytics.js
index bebc84e..6b384e2 100644
--- a/erpnext/stock/report/stock_analytics/stock_analytics.js
+++ b/erpnext/stock/report/stock_analytics/stock_analytics.js
@@ -71,16 +71,8 @@
 			reqd: 1
 		}
 	],
-	"formatter": function(value, row, column, data) {
-		if(!value && (column.fieldname == 'brand' || column.fieldname == 'uom')){
-			value = ""
-		}
-
-		if(Number(value)){
-			value = value.toFixed(2)
-		}
-
-		return value;
+	after_datatable_render: function(datatable_obj) {
+		$(datatable_obj.wrapper).find(".dt-row-0").find('input[type=checkbox]').click();
 	},
 	get_datatable_options(options) {
 		return Object.assign(options, {
@@ -120,16 +112,16 @@
 
 					setTimeout(() => {
 						frappe.query_report.chart.update(new_data)
-					},200)
+					},500)
 
 
 					setTimeout(() => {
 						frappe.query_report.chart.draw(true);
-					}, 800)
+					}, 1000)
 
 					frappe.query_report.raw_chart_data = new_data;
 				},
 			}
-		})
-	},
+		});
+	}
 }
diff --git a/erpnext/stock/report/stock_analytics/stock_analytics.py b/erpnext/stock/report/stock_analytics/stock_analytics.py
index dad8be1..54eefdf 100644
--- a/erpnext/stock/report/stock_analytics/stock_analytics.py
+++ b/erpnext/stock/report/stock_analytics/stock_analytics.py
@@ -99,11 +99,11 @@
 	months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
 
 	if filters.range == 'Weekly':
-		period = "Week " + str(posting_date.isocalendar()[1])
+		period = "Week " + str(posting_date.isocalendar()[1]) + " " + str(posting_date.year)
 	elif filters.range == 'Monthly':
-		period = months[posting_date.month - 1]
+		period = str(months[posting_date.month - 1]) + " " + str(posting_date.year)
 	elif filters.range == 'Quarterly':
-		period = "Quarter " + str(((posting_date.month-1)//3)+1)
+		period = "Quarter " + str(((posting_date.month-1)//3)+1) +" " + str(posting_date.year)
 	else:
 		year = get_fiscal_year(posting_date, company=filters.company)
 		period = str(year[2])
