Satisfies Expression Check FAQ
Answers to common questions about what the expression must return, how empty values behave, and how anomalies are reported, grouped by topic.
Behavior
What must the expression return?
True or false for each row. A bare column or a computed value is not a valid expression; a comparison, a boolean function, or a CASE whose branches all return true or false is.
What happens when the expression returns nothing?
The row is reported. A row passes only when the expression is definitely true, so an empty column in a comparison, or a CASE with no matching branch, causes a failure.
How do I let rows with empty values pass?
State it in the expression: col IS NULL OR <condition>. To keep reporting them, col IS NOT NULL AND <condition> makes the intent explicit.
Which fields does the check read?
Whichever ones the expression names. The rule works them out from the expression, which is why the form shows no field picker. The derived list is stored on the check, so the API returns it under fields even though you never send it.
Can the expression reference a subquery?
Yes, including one over the data being scanned via the built-in {{_qualytics_self}} variable. Be aware that a subquery runs per row, so it is far more expensive than a plain comparison.
Anomaly Reporting
What do the anomaly messages look like?
Record Anomaly: The record does not satisfy the expression: <expression>
Shape Anomaly: X.XXX% of N records (K) do not satisfy the expression: <expression>
When a filter is set, both messages end with [filter: <expression>].
Does Satisfies Expression produce Record Anomalies, Shape Anomalies, or both?
At 100% coverage (the default), violating rows are reported as Record Anomalies. Below 100% coverage, a failed coverage assertion produces one Shape Anomaly for the dataset. A scan can also roll up a large number of Record Anomalies into one Shape Anomaly.
Does Custom Anomaly Description work for Satisfies Expression?
Yes. Satisfies Expression emits Record Anomalies, so the anomaly_message_field payload field (and the Custom Anomaly Description toggle in the UI) replaces the Record Anomaly message with the value of the named column on the violating row. When that column is null, missing, or empty, the standard Record template is used instead. The Shape Anomaly always uses the fixed template.
Which cells are highlighted in Source Records?
Every column the expression references. The check's field list is derived from the expression, so the highlight covers all the columns that took part in the comparison rather than a single offending value. Read the expression quoted in the message against those values to see which part did not hold.
Configuration
Can I lower the coverage on a Satisfies Expression check?
Yes. Coverage at 1.0 (100%) means every row must pass. Lowering coverage to 0.995 allows up to 0.5% of rows to fail without raising an anomaly; once the failing fraction goes past that, the check reports a Shape Anomaly. Use lower coverage with care: a real regression that happens to fall just under the threshold will not raise an alert at all.
Can I change the expression later?
Yes. In the UI, open the check, edit Expression, and click Update; see Edit a Check for the full steps. Through the API, a PUT to /api/quality-checks/{id} updates the properties object. The rule type, the target container, and the associated Check Template stay immutable.
What permission do I need to create or edit a Satisfies Expression check?
The Drafter team permission on the datastore covers Draft work (creating a check as Draft or editing it while it stays Draft). Anything that puts the check into evaluation, such as creating or editing an Active check, archiving, or deleting, requires the Author team permission (or above). Viewing only requires Reporter. See Permissions for the full matrix.
Should I use Satisfies Expression or a dedicated rule?
Always prefer a dedicated rule when one fits: it states its intent, needs no SQL review, and names the field in its message. Use this rule for logic that spans several fields, branches on a condition, or has no other home.