diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py
index 93dadc6..8e733cc 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.py
+++ b/erpnext/accounts/report/purchase_register/purchase_register.py
@@ -12,6 +12,7 @@
 	get_accounting_dimensions,
 )
 from erpnext.accounts.report.utils import (
+	filter_invoices_based_on_dimensions,
 	get_advance_taxes_and_charges,
 	get_conditions,
 	get_journal_entries,
@@ -38,6 +39,10 @@
 			frappe.throw(_("Please select a supplier for fetching payments."))
 		invoice_list += get_payments(filters, additional_table_columns)
 
+	accounting_dimensions = get_accounting_dimensions(as_list=False)
+	if len(invoice_list) > 0 and accounting_dimensions:
+		invoice_list = filter_invoices_based_on_dimensions(filters, accounting_dimensions, invoice_list)
+
 	columns, expense_accounts, tax_accounts, unrealized_profit_loss_accounts = get_columns(
 		invoice_list, additional_table_columns, include_payments
 	)
@@ -207,7 +212,6 @@
 
 
 def get_invoices(filters, additional_query_columns):
-	accounting_dimensions = get_accounting_dimensions(as_list=False)
 	pi = frappe.qb.DocType("Purchase Invoice")
 	invoice_item = frappe.qb.DocType("Purchase Invoice Item")
 	query = (
@@ -235,7 +239,7 @@
 	)
 	if filters.get("supplier"):
 		query = query.where(pi.supplier == filters.supplier)
-	query = get_conditions(filters, query, [pi, invoice_item], accounting_dimensions)
+	query = get_conditions(filters, query, [pi, invoice_item])
 	invoices = query.run(as_dict=True)
 	return invoices
 
@@ -250,9 +254,8 @@
 		party_name="supplier_name",
 		additional_query_columns="" if not additional_query_columns else additional_query_columns,
 	)
-	accounting_dimensions = get_accounting_dimensions(as_list=False)
-	payment_entries = get_payment_entries(filters, accounting_dimensions, args)
-	journal_entries = get_journal_entries(filters, accounting_dimensions, args)
+	payment_entries = get_payment_entries(filters, args)
+	journal_entries = get_journal_entries(filters, args)
 	return payment_entries + journal_entries
 
 
diff --git a/erpnext/accounts/report/sales_register/sales_register.py b/erpnext/accounts/report/sales_register/sales_register.py
index 1daf524..42fc5b3 100644
--- a/erpnext/accounts/report/sales_register/sales_register.py
+++ b/erpnext/accounts/report/sales_register/sales_register.py
@@ -13,6 +13,7 @@
 	get_accounting_dimensions,
 )
 from erpnext.accounts.report.utils import (
+	filter_invoices_based_on_dimensions,
 	get_advance_taxes_and_charges,
 	get_conditions,
 	get_journal_entries,
@@ -39,6 +40,10 @@
 			frappe.throw(_("Please select a customer for fetching payments."))
 		invoice_list += get_payments(filters, additional_table_columns)
 
+	accounting_dimensions = get_accounting_dimensions(as_list=False)
+	if len(invoice_list) > 0 and accounting_dimensions:
+		invoice_list = filter_invoices_based_on_dimensions(filters, accounting_dimensions, invoice_list)
+
 	columns, income_accounts, tax_accounts, unrealized_profit_loss_accounts = get_columns(
 		invoice_list, additional_table_columns, include_payments
 	)
@@ -365,7 +370,6 @@
 
 
 def get_invoices(filters, additional_query_columns):
-	accounting_dimensions = get_accounting_dimensions(as_list=False)
 	si = frappe.qb.DocType("Sales Invoice")
 	invoice_item = frappe.qb.DocType("Sales Invoice Item")
 	invoice_payment = frappe.qb.DocType("Sales Invoice Payment")
@@ -401,7 +405,7 @@
 	)
 	if filters.get("customer"):
 		query = query.where(si.customer == filters.customer)
-	query = get_conditions(filters, query, [si, invoice_item, invoice_payment], accounting_dimensions)
+	query = get_conditions(filters, query, [si, invoice_item, invoice_payment])
 	invoices = query.run(as_dict=True)
 	return invoices
 
@@ -416,9 +420,8 @@
 		party_name="customer_name",
 		additional_query_columns="" if not additional_query_columns else additional_query_columns,
 	)
-	accounting_dimensions = get_accounting_dimensions(as_list=False)
-	payment_entries = get_payment_entries(filters, accounting_dimensions, args)
-	journal_entries = get_journal_entries(filters, accounting_dimensions, args)
+	payment_entries = get_payment_entries(filters, args)
+	journal_entries = get_journal_entries(filters, args)
 	return payment_entries + journal_entries
 
 
diff --git a/erpnext/accounts/report/utils.py b/erpnext/accounts/report/utils.py
index 8b58a46..32ca9fa 100644
--- a/erpnext/accounts/report/utils.py
+++ b/erpnext/accounts/report/utils.py
@@ -225,7 +225,7 @@
 	return query.where(taxes.charge_type.isin(["On Paid Amount", "Actual"]))
 
 
-def get_journal_entries(filters, accounting_dimensions, args):
+def get_journal_entries(filters, args):
 	je = frappe.qb.DocType("Journal Entry")
 	journal_account = frappe.qb.DocType("Journal Entry Account")
 	query = (
@@ -250,12 +250,12 @@
 		.where((je.voucher_type == "Journal Entry") & (journal_account.party == filters.get(args.party)))
 		.orderby(je.posting_date, je.name, order=Order.desc)
 	)
-	query = get_conditions(filters, query, [je], accounting_dimensions, payments=True)
+	query = get_conditions(filters, query, [je], payments=True)
 	journal_entries = query.run(as_dict=True)
 	return journal_entries
 
 
-def get_payment_entries(filters, accounting_dimensions, args):
+def get_payment_entries(filters, args):
 	pe = frappe.qb.DocType("Payment Entry")
 	query = (
 		frappe.qb.from_(pe)
@@ -276,12 +276,12 @@
 		.where((pe.party == filters.get(args.party)))
 		.orderby(pe.posting_date, pe.name, order=Order.desc)
 	)
-	query = get_conditions(filters, query, [pe], accounting_dimensions, payments=True)
+	query = get_conditions(filters, query, [pe], payments=True)
 	payment_entries = query.run(as_dict=True)
 	return payment_entries
 
 
-def get_conditions(filters, query, docs, accounting_dimensions, payments=False):
+def get_conditions(filters, query, docs, payments=False):
 	parent_doc = docs[0]
 	if not payments:
 		child_doc = docs[1]
@@ -316,16 +316,6 @@
 			query = query.where(child_doc.warehouse == filters.warehouse)
 		if filters.get("item_group"):
 			query = query.where(child_doc.item_group == filters.item_group)
-
-	if accounting_dimensions:
-		for dimension in accounting_dimensions:
-			if filters.get(dimension.fieldname):
-				if frappe.get_cached_value("DocType", dimension.document_type, "is_tree"):
-					filters[dimension.fieldname] = get_dimension_with_children(
-						dimension.document_type, filters.get(dimension.fieldname)
-					)
-				fieldname = dimension.fieldname
-				query = query.where(parent_doc.fieldname.isin(filters.fieldname))
 	return query
 
 
@@ -348,4 +338,21 @@
 			& (adv_taxes.base_tax_amount != 0)
 		)
 		.groupby(adv_taxes.parent, adv_taxes.account_head, adv_taxes.add_deduct_tax)
-	).run(as_dict=True, debug=True)
+	).run(as_dict=True)
+
+
+def filter_invoices_based_on_dimensions(filters, accounting_dimensions, invoices):
+	invoices_with_acc_dimensions = []
+	for inv in invoices:
+		for dimension in accounting_dimensions:
+			if filters.get(dimension.fieldname):
+				if frappe.get_cached_value("DocType", dimension.document_type, "is_tree"):
+					filters[dimension.fieldname] = get_dimension_with_children(
+						dimension.document_type, filters.get(dimension.fieldname)
+					)
+				fieldname = dimension.fieldname
+				if inv.fieldname != filters[fieldname]:
+					break
+		else:
+			invoices_with_acc_dimensions.append(inv)
+	return invoices_with_acc_dimensions
