A bit of a mouthful of a title! I had a great time earlier today presenting at my first ever virtual event, D365UG UK. Many thanks to the organising team for a smoothly run event!
My topic today was using a variety of free tools to unearth some data quality issues in your CRM installation that you may be unaware of, and some suggestions on common causes and possible resolutions.
The tools I used were:
- Advanced Find
- FetchXML Builder
- SQL 4 CDS
- Data Export Validation Tool
Those last three are all free XrmToolBox tools, so head over to the tool store to install them today.
The slides are available on the D365UG UK forum, but I also promised to share the script that you can run in SQL 4 CDS to check many of the common scenarios we looked at. Many of these could also be run in either Advanced Find or FetchXML Builder if you prefer.
-- Accounts assigned to inactive users
select a.name
from
account a
inner join systemuser u on a.owninguser = u.systemuserid
where
a.statecode = 0 and
u.isdisabled = 1
-- Accounts with a disabled primary contact
select a.name
from
account a
inner join contact c on a.primarycontactid = c.contactid
where
a.statecode = 0 and
c.statecode = 1
-- Accounts with a primary contact that isn't part of the account
select a.name
from
account a
inner join contact c on a.primarycontactid = c.contactid
where
a.statecode = 0 and
(c.parentcustomerid is null or c.parentcustomerid <> a.accountid)
-- Contacts with the same firstname and lastname
select contactid, firstname, lastname
from
contact
where
statecode = 0 and
firstname = lastname
-- Contacts with the same lastname and email address
select contactid, firstname, lastname
from
contact
where
statecode = 0 and
lastname = emailaddress1
-- Common firstnames
select firstname, count(*)
from
contact
where
statecode = 0 and
firstname is not null
group by
firstname
order by
count(*) desc
-- Common lastnames
select lastname, count(*)
from
contact
where
statecode = 0 and
lastname is not null
group by
lastname
order by
count(*) desc
-- Contacts with a parent contact
select c1.contactid, c1.firstname, c1.lastname
from
contact c1
inner join contact parent on c1.parentcustomerid = parent.contactid
where
c1.statecode = 0
-- Orphaned contacts
select contactid, firstname, lastname
from
contact
where
statecode = 0 and
parentcustomerid is null
-- Active contacts in inactive accounts
select contactid, firstname, lastname, account.name
from
contact
inner join account on contact.parentcustomerid = account.accountid
where
contact.statecode = 0 and
account.statecode = 1