Data Quality App
User guide for the Data Quality App by Techdio ApS, for Microsoft Dynamics 365 and Dataverse. Release 2026.09.03.
Download this guide as a PDF (20 pages).
About this guide
This guide takes you from an empty organization to a working set of duplicate rules, match keys, data quality rules and a dashboard, in the order you would do it. Each chapter starts with what the feature is for, then how to do it, then what to watch out for. Page names are written in bold, as they appear in the app’s left navigation: Duplicate Rules, Match Keys and so on.
If you only want to know which setting catches which kind of duplicate, the companion cheat sheet that ships with each release is a one-screen version of the duplicate chapters with an example pair per option.
The ideas in five minutes
| Idea | What it means here |
|---|---|
| Duplicate rule | A definition of “these two records are the same thing”: a table, one or more field comparisons, and what happens on a match. Rules run when a record is saved and in bulk runs over a whole table or view. |
| Field comparison | One row of a rule: compare this column with that column, this way (exactly, first letters, contains, two words in common, similar enough). Rows in one alternative must all match. |
| Alternative | A group of comparisons. A rule may have several; a pair is a duplicate if any alternative matches. “Same email, OR same phone and surname” is a rule with two alternatives. |
| Match score | Each comparison carries a weight; a matching pair scores the sum of its weights, adjusted for how rare the matched value is and for other alternatives it also satisfies. Two bars on the rule: pairs above the high bar are confident duplicates, pairs above the review bar are worth a look. |
| Match key | A second column the product computes from a field and keeps beside it, so rules can compare on something the person did not type: how a name sounds, a phone number in one shape, a company name without its legal form. Rules match on key columns with an ordinary exact comparison. |
| Match synonym | A word your organization teaches the matching: an abbreviation, a nickname, a legal form, a word to ignore. Laid over the words the product already knows. |
| Run | One bulk detection over a table or view, with its results grouped per record. Reviewed and merged from Duplicate Results. |
| Merge | Two records become one: related records move to the survivor, chosen field values are kept, the loser is deactivated and marked as merged. There is no undo. |
| Not a duplicate | A pair somebody has ruled out. It is never offered again, on save, in a run or by a merge, until the decision is removed. |
| Data quality rule | A per-field check on a record (a pattern, a minimum length, recent activity). Each rule passes, warns or fails, and together they give the record a score from 0 to 100. |
| Job | Bulk work in the background: a detection run, a bulk merge, a match key fill, a score recalculation. Jobs can be scheduled and can repeat. |
Installing and setting up
1. Import the solution
- In the Power Platform admin center open your environment, choose Solutions, Import, and pick
DataQualityApp_<version>_managed.zip. - The import adds the Data Quality App, its tables, plug-ins, pages and three security roles. It takes a few minutes.
- Open the Data Quality App from the app list. The License page shows a trial has started.
2. Give people a role
Assign roles in the Power Platform admin center. Changes take effect within a minute.
| Role | Who gets it |
|---|---|
| Duplicate Detection | Everybody who works with records: sees duplicate warnings on save, reviews results, merges within their own privileges, marks pairs as not duplicates. |
| Duplicate Detection Administrator | The people who define rules, match keys and synonyms, run bulk detections, schedule jobs and see license warnings. |
| DQA MCP Read, Create, Delete | Only for people who use an AI assistant with the app (chapter on the assistant). Granular: Delete does not include Create. |
3. Start the background engine
Bulk work runs in the background. The solution ships a Power Automate flow, DD Background Engine Heartbeat, switched off. It is the recommended engine: nothing to install on a machine, and it runs itself.
- In the environment’s solutions, open the Data Quality App solution, find the flow’s connection reference for Microsoft Dataverse and map it to a connection owned by a dedicated service account or application user, not a personal login.
- Turn the flow on.
- Start a small detection from a rule and confirm it begins within about a minute. That proves the connection works.
DuplicateDetection.BackgroundService.Installer-<version>.zip as a Windows service, or upload DuplicateDetection.BackgroundService.Standalone-<version>.zip as a continuous, single-instance Azure WebJob in their own tenant. Both carry the same engine as the solution and must be updated together with it. Configuration is an ordinary Dataverse connection string; App Service settings override the packaged file.4. License
A new organization starts a 15-day trial with full functionality and two limits: one active duplicate rule and at most ten merges per operation. Paste the activation code from Techdio on the License page and press Activate now. Newer releases can fetch the license themselves; an offline activation is available for environments that must never contact Techdio. Only administrators see expiry warnings; end users are never nagged.
5. Where your data stays
Everything in the Data Quality App runs natively inside your own Dataverse environment: rules, match keys, detection, merging and scoring are Dataverse plug-ins, pages and background jobs. No customer data is sent to Techdio or to any third-party service, and no external AI is used for matching. The only outbound call the product ever makes is the optional license check to Techdio, and an offline activation removes even that.
A tour of the app
| Navigation | Page | What you do there |
|---|---|---|
| Overview | Home | The starting dashboard. |
| Data Health Studio | Your data quality dashboard: duplicates found and merged, rules passing and failing, over time. Arrange it as you like; the layout follows you. | |
| Duplicates | Duplicate Rules | Every duplicate rule and its health. Create, open, estimate, run. |
| Duplicate Results | Every detection run and what remains to review. Open a run to review and merge. | |
| Not Duplicates | Pairs somebody decided are not duplicates. Remove a pair to undo the decision. | |
| Data Quality | Data Quality Rules | Every data quality rule and its health. Create and open rules. |
| Data Quality Score | Per table: which rules count, how warnings weigh, whether scores recalculate automatically; recalculate. | |
| Administration | Scheduled Jobs | Every background job and its status. Cancel, retry, start early, open the related rule or run. |
| Match Keys | Every match key and its health. Create, fill, audit, rewrite. | |
| Match Synonyms | The words your organization teaches the matching, and the words the product already knows. | |
| Translations | The app’s own texts, translated or reworded. Changes the interface, not your data. | |
| License | Status, expiry, days remaining, activation. |
Duplicate rules
What a rule is for
A rule says when two records of a table are the same thing. It runs in two places: when a user saves a record, the rule checks it against the rest of the table and warns or blocks; and in a bulk run, where every record in a table or view is checked and the pairs are grouped for review.
Creating a rule
Open Duplicate Rules and press New rule. The page asks its questions in order and creates the rule once, when you press Create.
- Which table? The table whose records are checked (the source), and the table they are checked against (the target). Usually the same; a Contact-against-Lead rule is allowed.
- Which fields must match? Add a comparison row per field. For each: the source column, the target column, and how to compare. If the column has a match key, the page offers to match by how it sounds, as normalized text, as a telephone number and so on; that is an exact comparison on the key column. Put rows that must all be true in one alternative; add a second alternative for “or”. Weights and the two score bars live here too; the defaults are sensible.
- When does it run? When a record is created or changed, only on create, or only on change.
- Who runs it? The saving user, the system, or a named user. Choose the system or a named user when ordinary users cannot read every record the rule should compare against.
- Which records are checked? Optionally limit the source and the target to a saved view or a FetchXML filter. Only records in the filter take part.
- How are duplicates shown? The result view decides which columns the duplicates dialog and the results pages show. Whether the save is only warned about or blocked. Whether inactive records count.
- Name the rule and create it. Rules are active at once.
The six comparisons
| Comparison | Example pair it catches | Notes |
|---|---|---|
| Exact | Nordisk Vinduer = nordisk vinduer | Case-insensitive, like the database. The comparison to use on a match key column. |
| First N characters | Kastrup Logistik A/S ≈ Kastrup Transport (N=6) | A value shorter than N compares whole. |
| Last N characters | 98 44 22 33 ≈ 98 45 22 33 (N=4) | For a phone column a telephone key is usually better: it understands country codes. |
| Contains | Bornholm Byg ⊂ Bornholm Byg og Anlæg | One direction: the stored value contains the typed one. |
| 2 Word Match | Aalborg Marine Service ≈ Marine Service Aalborg | Two whole words in common, any order. Punctuation glued to a word is not part of it. |
| Similar enough (N = %) | Christianssen Revison ≈ Christiansen Revision (85) | Typo tolerance. Reads accents both ways and words in fixed order. On a column with a normalized, company or sounds-like key it searches on its own; without one it needs an exact or starts-with row beside it in the same alternative. |
Per-row options. Trim, remove all whitespace, compare blank values (two blanks count as equal), compare lookups as text (by the related record’s name), ignore words (a comma list removed before comparing, for plain text columns), and a date-time behaviour for date columns. Non-text columns compare by equality.
What a user sees on save
When a save matches a rule, the form shows Duplicate found for this record with View duplicate records. The dialog lists the duplicates in the rule’s result view, grouped by the rule that found them, and lets the user open a record or merge. A rule set to block refuses the save until the duplicate is dealt with; a rule set to warn lets the user save anyway.
Health and estimate
Duplicate Rules shows each rule’s health: rules that cannot run, have no fields, reference deleted columns or views, use a disabled run-as user, duplicate another rule, can never reach their own review bar, match through a key that was never filled, or rely on a telephone key with no country. Open a rule for an estimate: a sampled count of how many duplicates it would find, before running it.
Match keys
What a key is for
People write the same thing differently. A match key is a second column the product computes from a field and keeps up to date, so a rule can compare on the computed value with an ordinary exact match, which is fast and indexed. Adding a key changes no rule; a rule uses a key by matching on its column.
The eight kinds
| Key | Example: value → key | Choose it when |
|---|---|---|
| Sounds like | Jorgensen → JRJNSN Joergensen → JRJNSN | Names spelled several ways that sound the same. English, German or Spanish. Two readings, so a name that sounds two ways is matched on either. |
| Normalized text | Vejle Bryghus → BRYGHUS VEJLE Grøn → GRON / GROEN | Any text where case, punctuation, spacing, special letters or word order vary. Can be a composite of several columns. |
| Company name | Herning Maskinfabrik A/S → HERNING MASKINFABRIK Aarhus Intl Trading Ltd → AARHUS INTERNATIONAL TRADING | Company names. Strips legal forms for the countries you choose, writes out shortenings, recognizes a form at either end, ignores word order. |
| Telephone | +45 66 12 34 56 → +4566123456 0045 66123456 → +4566123456 | Any phone column. Give it a country so bare national numbers get their code; or let it read the country from a column of the record. |
| Info+crm@Techdemo.dk → info@techdemo.dk | Email columns. Lower case, +tags removed, Gmail dots, googlemail = gmail, first address of several. | |
| Registration number | DK 25 31 37 63 → 25313763 (verified) | CVR, VAT and company numbers. Country prefixes stripped, checksums verified for DK, SE, NO, FI, DE, GB, NL and CH; a verified number weighs more. |
| Web domain | https://www.koldingmoebler.dk/ → koldingmoebler.dk | Website or email columns. The strongest company identifier after a registration number. |
| Given name | Bob → ROBERT Kristian → CHRISTIAN | First-name columns. Weak alone; pair it with a surname or a postcode in the same alternative. |
Creating a key
- Open Match Keys, press New match key.
- Choose the table and the field, then the kind. The page proposes a column name; you may edit it.
- Answer the kind’s own questions: the language for a sounds-like key; the country for a telephone or registration key, or the column to read each record’s country from; for a company key whether to ignore legal forms and for which countries; for a normalized key whether to ignore word order and which other columns to key together with it (a composite key).
- Create. The key column and its second-reading column appear on the table, and records saved from now on are keyed at once.
- Fill existing records: the page offers to queue the fill as a background job. Until it finishes, rules on the key find only records saved since.
Country from a column
A telephone or registration key with customers in several countries should read the country from the record. Choose the column on the New Match Key page; text, choice and lookup columns all work, and “Danmark”, “Germany” and “DE” are all understood. The fixed country is the fallback for a record with none. Changing a record’s country re-keys its number.
Keeping keys healthy
Keys are written by the product when a record is saved. Anything that writes around it, a data import with plug-ins switched off, an integration that bypasses custom plug-ins, leaves keys empty or stale. Match Keys audits each key: records with a value and no key, and a re-keyed sample of the most recently changed records. Rewrite all keys recomputes every record. Changing a key’s country, language or options marks it “definition changed” until you rewrite it.
Match synonyms
Match Synonyms holds the words your organization teaches the matching. They are laid over the words the product already knows; press Show the words the product already knows on the page to see those. A row with the same word as a built-in entry wins over it; a row that maps a word to itself switches the built-in entry off.
| Kind | Example | Read by |
|---|---|---|
| Company abbreviation | Manufact = Manufacturing Co = Co (switch the built-in off) | Company name keys that write out shortenings, and “similar enough” comparisons. |
| Given name | Kat = Katarina | Given name keys, and “similar enough” comparisons. |
| Legal form, with country | Kft (HU) | Company name keys set to ignore the legal form for that country. |
| Word to ignore | Holding | Normalized text and company name keys. The tool that works where a rule’s “ignore words” does nothing, because keys are computed before rules run. |
Adding a word. Pick the kind, type the word as it appears in the data and, where the kind has one, what it stands for or the country. The product stores it in upper case without punctuation, names the row, and refuses what makes no sense: a legal form without a country, a given name of two words, the same word twice, or a chain (Mfg means Manufact while Manufact means Manufacturing).
After adding a word: rewrite the keys
A word takes effect in two steps, and the second one is yours to do.
- New and changed records are keyed with the word at once. From the moment the row is saved, every record saved or changed is keyed using it. A company name key with shortenings written out stores “Herning Manufact. A/S” as HERNING MANUFACTURING right away.
- Records that already exist keep their old keys until you rewrite them. Their key columns were computed before the word existed, and nothing touches a stored record because a table row changed. So saving the word marks every match key that reads that kind of word as “definition changed, rewrite needed”. Open Match Keys, find the marked keys, and press Rewrite all keys. The rewrite runs as a background job and recomputes the key for every record of the table; the job appears under Scheduled Jobs.
Until the rewrite has run, a rule on that key finds the new word only among records saved since the row was added. Which keys are marked depends on the kind of word: an abbreviation or a legal form marks company name keys; a word to ignore marks normalized text and company name keys; a given name marks given name keys. Sounds-like, telephone, email, web domain and registration keys are never marked, because they never read the table. The same two steps apply when you switch a word off or remove it, and when you change a key’s own settings, such as its country or its word-order option.
Running detection
On save
Every active rule runs when a record is created or changed, according to its trigger. Nothing to start.
A bulk run
- Open the rule from Duplicate Rules and choose to run it. Optionally limit the run to a saved view.
- Choose now or a scheduled time, and whether the job repeats every N minutes, hours, days or months. A repeating job creates its next occurrence when this one finishes.
- The run appears in Duplicate Results and the job in Scheduled Jobs. Detection is done in batches inside Dataverse; the job records progress and a log.
Reviewing results
Duplicate Results lists every run: rule, table, when, how many records with duplicates, how many remain to review. Filter by table. Open a run.
A run page groups the duplicates per record. Each row shows the record, the number of duplicates and the best match score; pairs at or above the review bar are marked as worth reviewing, pairs at or above the high bar as confident. Click a record to see its duplicates individually, which alternative of the rule joined each pair, and the columns of the rule’s result view side by side.
From here you can Merge duplicates for one group, Merge all duplicates for the run (now, or as a Background merge job), mark a pair as not a duplicate, Open printable report, or Delete this run and its results. Deleting a run deletes only the result rows; the records are untouched and merges already done are not undone.
Merging
A merge combines two records. Related records, both one-to-many and many-to-many, are moved onto the surviving record; the field values you choose are kept; the loser is deactivated and marked as merged, pointing at the survivor.
| Kind of merge | Where | How the survivor is chosen |
|---|---|---|
| Single | From a record’s duplicate dialog or a result group | You pick the survivor and, field by field, which value to keep. |
| Group | A group on a run page | All duplicates of the group merge into its anchor record. |
| Bulk | A whole run, now or as a background job; or auto-merge on the rule | Survivorship per group: oldest, newest, most activities, most filled fields, or best data quality score. |
Options. Include or exclude each relationship from reparenting; skip errors and continue; bypass synchronous plug-ins, asynchronous plug-ins or Power Automate flows during the merge; which inactive status the loser gets. A merge of a record somebody else is merging at the same moment is refused by the platform: wait and run again, and already-merged records are skipped. A trial license allows ten merges per operation.
Not Duplicates
When two records look alike but are not the same, mark the pair as not a duplicate from the run page or the duplicate dialog. The pair is then never offered again: not on save, not in a bulk run, not by a merge. Not Duplicates lists every such decision with who made it; removing a pair undoes the decision. A user may undo their own; an administrator may undo anybody’s.
Export, import and starter rules
Starter rules
Open Duplicate Rules, choose Import. The page offers three bundles made by the product:
| Bundle | Keys it sets up | Rule |
|---|---|---|
| Accounts | Registration number, web domain, company name, sounds-like on the name | The same company however it was written: by registration number, or web domain, or company name with the postcode, or the sound of the name, or a name spelled nearly the same, or a looser likeness with the postcode. |
| Contacts | Email, mobile phone, given name, normalized surname | The same person: by email, or mobile and surname, or first name (Bob = Robert) with a similar surname and the postcode. |
| Leads | Email, business phone, company name, normalized surname | The same lead: by email, or business phone and surname, or company name with a similar surname. |
Importing a starter creates the keys that are not already there, queues their fill, and creates the rule. Importing again updates rather than duplicates.
Moving rules between environments
- In the source environment, select rules on Duplicate Rules and export. The zip carries the rules, the match keys they match through and the synonyms those keys read, with a manifest and notes.
- In the destination, open Import and choose the zip. Nothing is written yet: the page says what would happen to each rule and key, asks you to confirm a person or view it matched by name, and blocks a rule that cannot work here.
- Tick what to import and import. Keys are created first with their columns; a key of the same kind already here is used instead, and the rule’s fields point at its column.
Data quality rules
A data quality rule checks one thing about a record and gives a verdict: pass, warning or error. Create them on Data Quality Rules; the page asks for the table, the field, the kind of check and its parameters, the severity, and any condition. The rule builder shows a live preview of what the rule would say about existing records before you save it. Rules apply to every table, standard or custom.
The 22 kinds of check
| Kind of check | What it verifies | Example |
|---|---|---|
| Required | The field has a value. | Email is filled on every Contact. |
| Format | An email, phone number, web address or postcode has a valid shape. | info@techdemo.dk · +45 66 12 34 56 · 8000 |
| Regular expression | The value matches a pattern of your own. | A customer number like C-12345. |
| Minimum length | At least N characters. | Business phone at least 8 characters. |
| Maximum length | At most N characters. | Account name no longer than 160 characters. |
| Must not contain | None of the listed filler words appear. | “test”, “n/a”, “unknown”, “?” |
| No stray spaces | No leading, trailing or doubled spaces. | “Nordisk Vinduer ” fails. |
| Must be empty | The field has no value. | A closed opportunity has no open follow-up date. |
| Must be one of | The value is in your list. | Country is one of the markets you sell in. |
| Must not be one of | The value is not in your list. | Industry is not the placeholder “Other”. |
| Number range | A number lies between two bounds. | Discount between 0 and 30 %. |
| Number of selections | A multi-select choice has between N and M values. | Interests: 1 to 3 selected. |
| Date check | A date is in the past, in the future, or within N days of today. | Founded date in the past; renewal date in the future. |
| Date order | A date is before or after another date on the record. | Contract end is after contract start. |
| Must match another field | Two fields hold the same value. | Billing country equals shipping country. |
| Must differ from another field | Two fields hold different values. | Primary contact is not also the decision maker. |
| At least one of these fields | One of several fields is filled; one rule instead of several. | Email or phone: one of them must be there. |
| Linked record still active | A lookup points at an active record, not a deactivated or merged one. | The contact’s parent account is active. |
| Last modified | The record was changed within N days. | An account untouched for a year is stale. |
| Number of activities | At least N activities, of a chosen type, state or direction. | A lead has at least two activities. |
| Last activity | An activity within N days. | A contact with no activity in 180 days. |
| Flow | Your own Power Automate flow decides, for checks that need outside data or your own logic. | A register lookup; an ERP balance check. |
Severity. A warning counts half in the score. An error counts fully and can, if you switch it on and confirm, block saving on create, on update or both. Conditions: a rule can apply only when a field has a value, or only to a business unit or team, and can ignore chosen users. Weight: a rule can count double or be excluded from the score while still flagging records. New and changed records are evaluated on save; existing records need a recalculation job.
Data Quality Rules shows each rule’s health: rules that cannot run, reference deleted fields or duplicate another rule.
Data quality score
Each record gets a score from 0 to 100: passes plus half the warnings, divided by the rules that apply, times 100. Rules that do not apply to the record are left out. On the record form a dashboard shows each rule’s outcome.
Data Quality Score configures each table: which rules are included, how warnings weigh, whether scores recalculate automatically, and a button to recalculate the whole table as a background job. Recalculate after you change rules or weights, so existing records catch up.
Data Health Studio
Your data quality dashboard. Widgets show open duplicate pairs, records merged, failed merges, active quality rules, the data health score (90 and above is excellent, below 40 needs attention), duplicates found by month, and merge status, so you can see how data health moves over 30, 60 and 90 days. The header applies to every widget at once: date range, record types, whole organization or my records, refresh.
Press Edit to arrange it: add, remove, resize and move widgets, and change what each shows. Your layout is saved to your user and follows you; an administrator can publish a default for everyone.
Scheduled jobs
Scheduled Jobs lists every background job: bulk detection, bulk merge, match key fills, data quality calculations and health snapshots. Each shows its status and what it is working on, and keeps a newest-first log.
| Status | Meaning and what you can do |
|---|---|
| Scheduled | Waiting for its time, or for the engine. Start it early, or cancel it. If everything stays Scheduled, the engine is not running (see installing). |
| In Progress | Working. Cancel stops it at its next step and keeps the work done so far. |
| Done | Finished. A repeating job has already created its next occurrence. |
| Error | Stopped on a failure; the log says where. Retry runs it again as a fresh job. |
| Canceled | Stopped by a person. |
Translations
Translations lists every text the app shows its users: duplicate checks, merge screens, dashboards. Edit the wording or translate it into another language. This changes the interface only, never your data. The interface ships in English; add any language your users need here. Texts are grouped by screen; an entry with no translation for a language falls back to English.
License
License shows the license type, its expiry, days remaining, and the trial limits while on trial: one active duplicate rule and ten merges per operation. Paste the activation code and press Activate now. After expiry there is a grace period; then new rules and bulk operations are refused until a license is applied, while existing real-time checks keep running. Warnings are shown to administrators only.
Upgrading to a new release
- Import the new
DataQualityApp_<version>_managed.zipover the existing one in the Power Platform admin center, keeping Upgrade selected. Rules, match keys, synonyms, results and your Data Health Studio layout are data, not solution components: they are kept. - If you run the background service or the WebJob instead of the heartbeat flow, update it to the matching version at the same time. The engine and the solution must agree.
- Open and save one duplicate rule. The rules’ cached definition is rebuilt on save, so new matching features apply to existing rules.
- Check Scheduled Jobs: a run that was in progress during the import resumes; one that shows Error can be retried.
The AI assistant (MCP)
The app ships a server that connects an AI assistant, such as Claude, Copilot Studio or ChatGPT, to your environment, so you can manage duplicates and data quality by talking to it. The server is software you run, on your own machine or in your own Azure tenant; your data flows only between you and your Dataverse environment.
- Unzip
DqaMcp-win-x64-<version>.zip(or the Linux build for a server) and registerdqa-mcp.exein your assistant. No configuration is needed: the first time you ask it something, a browser window asks for your normal Microsoft sign-in and the assistant lists the environments you can access. - Have an administrator assign you one of the DQA MCP roles. Any role lets the assistant read; Create is needed to create rules and run detections; Delete to delete configuration and to merge. Nobody is exempt, System Administrators included.
- Ask. “How healthy is my CRM data?”, “Check Contoso Ltd for duplicates”, “Set up duplicate detection for leads matching email exactly and last name by sound”, “Add a match key on contact last name and backfill it”, “Teach the matching that Manufact means Manufacturing”, “What background jobs are running?”
Everything the assistant does runs as you, so your Dataverse security applies and audit fields carry your name. Merge tools are hidden unless the machine enables them, and every merge needs your explicit approval. The assistant explains the product from its own built-in documentation and points you to the app page for the few things it cannot do itself: score weights and thresholds on duplicate rules, auto-merge configuration, bundles, license activation, translations.
Capacity and performance
Detection runs in batches inside Dataverse and is designed for tables of millions of records; the engine has merged more than two million duplicates in a single customer environment. A few habits keep large runs fast:
- Estimate before you run. A rule’s estimate samples the table in seconds and tells you roughly how many pairs to expect, so a badly tuned rule never becomes a badly tuned run.
- Match on keys. An exact comparison on a match key column is indexed and fast. A “similar enough” comparison on a column without a key is the slowest thing a rule can do; give the column a normalized, company or sounds-like key and let the comparison search through it.
- Schedule big runs outside working hours and let repeating jobs handle the steady state afterwards: a nightly or weekly run over a view of recently changed records is cheaper than a full run every time.
- Fill keys once, then keep them. A key fill over a large table is a one-time job; after that, saves keep the key current. Rewrite only when a key’s definition or a synonym changed.
- Use the review bar. Raising it costs nothing and removes the pairs nobody would merge anyway.
Getting help
Support is included in an active subscription and covers defects, configuration and how-to questions for the app. Write to support@techdio.dk. Hours are Monday to Friday, 9 AM to 5 PM CET; the first response comes within two business days, and a production-down situation is prioritized ahead of everything else. Customers outside Europe are answered by the next business day at the latest.
Include the environment URL, the release shown at the top of the License page, and, for a failing job, the newest lines of its log from Scheduled Jobs. That is usually enough to answer without a follow-up.
Housekeeping and troubleshooting
| Symptom | What to check |
|---|---|
| A run or fill stays “Scheduled” | The background engine: is the heartbeat flow on and its connection valid, or is the service running? Scheduled Jobs shows the queue. |
| A rule on a match key finds only new records | The key was never filled, or was filled before an import bypassed the plug-ins. Match Keys shows “records without a key” and “keys out of date”; rewrite the key. |
| Two obvious duplicates are not found | Open the rule’s health and estimate. Common causes: the value differs inside the first letters and no sounds-like key is on the column; the pair is on the Not Duplicates list; one record is inactive and the rule excludes inactive records; the rule’s filter view excludes one of them. |
| Too many pairs are offered | Raise the rule’s review bar, or make the loosest alternative require a second field such as the postcode. |
| A word the matching should know | Add it under Match Synonyms and rewrite the keys that read it. |
| A new column does not appear right away | Dataverse publishes new columns to its query engine and its data API a little after creating them. Wait a minute and refresh. |
| The page says to open it from inside the app | The app’s pages need the app context. Open them from the Data Quality App’s navigation, not from a bookmark to the file. |
| Merges fail for some records | Open the job’s log. A record merged by somebody else at the same time is skipped; a relationship the merging user cannot write is reported per record when “skip errors” is on. |
| After an upgrade an existing rule does not use a new matching feature | The rules’ cached definition is rebuilt when a rule or key is saved. Open and save one rule. |
Glossary
| Term | Meaning |
|---|---|
| Alternative | A group of comparisons in a rule that must all match; several alternatives are ORed. Also called a match group. |
| Alternate column | A key’s second reading: the other way a name sounds, the expanded spelling of Ø, the dots-removed Gmail form. Rules match on both. |
| Anchor | The record a result group is built around; the survivor of a group merge. |
| Backfill / fill | The background job that computes a match key for records that existed before the key. |
| Composite key | A normalized key computed from a field together with other columns of the record. |
| High bar | The score at which a pair is a confident duplicate; what an unattended merge must clear. |
| Match key | A computed column beside a field, so rules can compare on it. Also called a phonetic field in older releases. |
| Match synonym | A word the organization teaches the matching, laid over the built-in word lists. |
| Review bar | The minimum score for a pair to be offered for review. |
| Run | One bulk detection with its grouped results. |
| Run-as | Whose privileges a rule uses when it searches: the saving user, the system, or a named user. |
| Rewrite all keys | Recompute a key for every record, not only the ones without a key. |
| Survivorship | The rule for choosing which record survives a bulk merge. |
Data Quality App by Techdio ApS. User guide for release 2026.09.03. Revised 2026-09-05.
