Shape Anomalies¶
Reviewing shape anomalies
A Shape anomaly describes a problem that belongs to many rows or to the dataset as a whole, rather than to a single row. The simplest Shape anomaly is a table that no longer has a field it is expected to have: no row is wrong on its own, the structure is. Shape anomalies also cover problems that only show up when rows are compared with each other, such as duplicate keys, and failures too widespread to report one row at a time.
This page explains what creates a Shape anomaly, what one contains, and how to read it. For failures tied to one row, see Record Anomalies.
What Creates a Shape Anomaly¶
A Scan reports a Shape anomaly in three situations.
A Rule That Looks at the Dataset¶
Some rules can only be answered by looking at the data as a whole: whether a field exists, whether values repeat, whether the row count or the latest update is within its limits, whether two tables agree. These rules always produce Shape anomalies.
See Rule Types for every rule type that produces only Shape anomalies.
A Coverage Below 100%¶
A rule that evaluates each row, such as Not Null or Min Value, can be set to a coverage below 100%. The check then tolerates some failing rows and asks a different question: does the share of passing rows reach the coverage? When it does not, the Scan reports one Shape anomaly for the dataset, with the number of failing rows, instead of one Record anomaly per row.
More Failing Rows Than the Limit¶
When a check at 100% coverage fails more rows than the Scan's Maximum Record Anomalies per Check (10 by default), all of that check's failures are reported as one Shape anomaly, which keeps the total count. No Record anomaly is created for that check, so a widespread failure does not flood the anomaly list. The other checks on the same rows still report their own anomalies. See Maximum Record Anomalies per Check.
What a Shape Anomaly Shows¶
| Part | What it shows |
|---|---|
| Anomalous Records | The number of rows that failed, when the rule can count them, as in a coverage or rolled-up failure. A structural failure, such as a missing field, has no count. |
| Failed Checks | The check that failed, with a message that carries the numbers, such as email has no value in 14 of 200 asserted records. |
| Source Records | A sample of the failing rows, up to the Scan's Maximum Source Examples per Anomaly, when the source datastore has an enrichment datastore. A Unique check shows every row of each duplicate group. A rule that does not read rows, such as Expected Schema, Volumetric, or Freshness, has no source records. See Source Records. |
| Description | A summary of the failure whose opening line gives the share of records that failed, such as 2 of 4 records (50%) in ACCOUNTS failed 1 check. See Anomaly Description. |
Every Shape anomaly holds exactly one failed check. When several checks fail at the shape level in the same Scan, even on the same fields, each one produces its own Shape anomaly.
The Custom Anomaly Description option of a check does not change Shape anomaly messages. It applies to Record anomalies only.
Impact and Fingerprints¶
Shape anomalies differ from Record anomalies in two ways that affect triage:
- Impact follows the scale of the failure. A coverage or rolled-up failure is rated by the share of checked records that failed: less than 1% is Low, 1% to less than 10% is Medium, and 10% or more is High. A check that tests the table as a whole, such as Expected Schema, Freshness, or Volumetric, is rated High when it fails. The check's Importance then raises or lowers that level. See Anomaly Impact.
- A fingerprint needs a scanned range. The fingerprint of a Shape anomaly is built from its check, the full text of its failure message, and the range of data the Scan read. That range comes from the table's or file's incremental field or last-modified date. Without one, the Shape anomaly has no fingerprint and is never marked Duplicate. Volumetric and Freshness anomalies never have one, so every failing Scan opens a new anomaly.
Because the message is part of the fingerprint, a Shape anomaly whose counts change between Scans, such as 14 of 200 becoming 15 of 210, is a new anomaly, not a duplicate.
Rule Types¶
These rule types look at the data as a whole, so they produce only Shape anomalies. The rule types that evaluate each row produce Shape anomalies too, when the check's coverage is below 100% or when it fails more rows than the limit. See Record Anomalies for those.
| Rule Type | Record Anomalies | Shape Anomalies |
|---|---|---|
| Aggregation Comparison | ||
| Data Diff | ||
| Distinct Count | ||
| Entity Resolution | ||
| Expected Schema | ||
| Field Count | ||
| Freshness | ||
| Max Partition Size | ||
| Min Partition Size | ||
| Required Values | ||
| Sum | ||
| Time Distribution Size | ||
| Unique | ||
| Volumetric |
Examples¶
The Sample Data tables below follow the Source Records view: one row per record, with the failing cells highlighted. A structural failure has no failing cell, so nothing is highlighted.
The situation: Your orders table is loaded by an upstream pipeline. An Expected Schema check declares the four fields the reports depend on: order_id, customer_id, order_date, and total_amount. After a pipeline change, total_amount stops arriving.
Sample Data
| order_id | customer_id | order_date |
|---|---|---|
| 101 | C001 | 2026-10-10 |
| 102 | C002 | 2026-10-11 |
| 103 | C003 | 2026-10-12 |
What gets flagged
Every row is complete for the fields it has, so no cell is wrong. The table itself is: a declared field is missing. The Scan reports one Shape anomaly for the table, with no anomalous record count and no source records. The evidence is the table's field list.
Shape Anomaly
The required field [total_amount] is not present
The situation: Your customers table must hold one row per customer. A Unique check on customer_id guards that rule.
Sample Data
| customer_id | name | |
|---|---|---|
| 1001 | Alice Cohen | alice@example.com |
| 1002 | Ben Dias | ben@example.com |
| 1001 | Alice C. | alice.c@example.com |
| 1003 | Cara Mota | cara@example.com |
What gets flagged
Neither row with customer_id = 1001 is wrong on its own. The problem only exists when the two are compared, so the Scan reports one Shape anomaly. Its source records show both rows of the duplicate group, and every row in the group counts toward the total, so the message counts 2 rows, not 1.
Shape Anomaly
customer_id values are repeated across 2 of 4 asserted records
The situation: Your contacts table has an optional email field that marketing expects to be filled in for at least 95% of contacts. A Not Null check on email with a coverage of 95% guards that target. The Scan reads 200 contacts, and 14 have no email, so 93% pass.
Sample Data (a sample of the failing rows)
| contact_id | name | country | |
|---|---|---|---|
| 7004 | Leo Park | NULL | KR |
| 7019 | Mia Rossi | NULL | IT |
| 7023 | Omar Haddad | NULL | AE |
What gets flagged
A missing email is allowed on some rows, so none of them is an anomaly on its own. The failure is the share: 93% is below the 95% coverage. The Scan reports one Shape anomaly with an anomalous record count of 14, and its source records hold a sample of the rows with no email.
Shape Anomaly
email has no value in 14 of 200 asserted records
The situation: The employees table from the Record Anomalies examples has a Min Value check on salary with a minimum of 40000 and 100% coverage. After a bad import, 25 of the 400 rows the Scan reads have a salary under the minimum. The Scan keeps the default Maximum Record Anomalies per Check of 10.
Sample Data (a sample of the failing rows)
| emp_id | name | department | salary |
|---|---|---|---|
| 102 | Bob Johnson | Support | 30000 |
| 104 | Ana Lima | Support | 28500 |
| 117 | Raj Patel | Sales | 31200 |
What gets flagged
The check failed 25 rows, more than the limit of 10, so instead of 25 Record anomalies the Scan reports one Shape anomaly with an anomalous record count of 25. Its source records hold a sample of the failing rows, with the salary cell highlighted as it would be on a Record anomaly.
Shape Anomaly
salary values are under the minimum of 40000, affecting 25 of 400 asserted records
See Also¶
-
AI Managed and Authored
How anomalies from AI Managed and Authored checks differ, the AI badge, and how triage tunes AI Managed checks.
-
Impact
How the Low to Critical impact level is decided from the failed checks, and when it updates.
-
Status
The lifecycle of an anomaly, from Active and Acknowledged to the archived statuses.
-
Assignees
How the Assignees field works, who can be assigned, and when assignees are notified.
-
Fingerprints
How Qualytics recognizes a newly detected anomaly as a duplicate of one it already found.
-
Anomaly Views
The four screens that show anomalies: how to reach each one, what it shows, and what you can do there.
-
Description
The business-friendly explanation of the data quality issue behind an anomaly.
-
Source Records
The rows behind an anomaly, how to read them, and how masked values are protected.
-
Tickets
Linked Jira and ServiceNow tickets: sync modes, what reaches the ticket, and status sync.
-
Timeline
The record of every change to an anomaly, and how comments and mentions work.
-
Examples
Real scenarios that follow an anomaly from the Scan that finds it to the decision that closes it.
-
Best Practices
Guidelines for keeping the anomaly list short, trusted, and acted on.
-
Permissions
The team permission and user role behind every anomaly action.
-
How It Works
How a Scan creates anomalies, AI Managed and Authored checks, the lifecycle, duplicates, and notifications.
-
Record Anomalies
Anomalies that flag one row: when they are created, how rows are grouped, and examples.