Not Null Best Practices
Guidelines for getting reliable signal from Not Null checks while keeping the noise (and the maintenance) low.
Reserve it for columns that are genuinely mandatory
A Not Null check on an optional column produces a permanent stream of anomalies that people learn to ignore, which erodes trust in every other check. Put the rule on the columns whose absence actually breaks something downstream, and leave the rest to a completeness metric rather than a check.
Group fields that share an owner, split the rest
One check across several mandatory columns is compact and easy to maintain. Split it when the columns are produced by different systems or fixed by different teams, so each anomaly lands with the person who can act on it.
Normalize blanks before relying on the check
'' and 'n/a' pass, because they are values. When the source writes blanks instead of nulls, normalize them upstream (or with a Computed Field), otherwise the check reports full coverage on a column that is effectively empty.
Pair it with a validity rule
Not Null guarantees presence, never correctness. Combine it with Expected Values, Matches Pattern, or a range rule so the value that satisfies the check is also usable.
Use Any Not Null for interchangeable alternatives
When the rule is "at least one of these must be filled in", Not Null is the wrong tool: it would demand all of them. Any Not Null expresses that group correctly.
Keep coverage at 100% unless a known backlog exists
At 100% coverage every failing row is reported as a Record Anomaly, which tells you exactly which rows break the rule. Below 100% the check reports a single Shape Anomaly only when the failing fraction crosses the tolerance, and no per-row detail is produced. Lower coverage only while a known set of legacy rows is being cleaned up.
Scope with a filter instead of loosening coverage
When the rule only applies to part of the table (one segment, one channel, one period), express that with a filter clause rather than by lowering coverage. The filter removes the out-of-scope rows from evaluation entirely, and the expression is echoed in every anomaly message.
Route the anomalies to the right people
A failure usually points at the system that produced the value, not at the warehouse. Set an Anomaly Assignee from the team that owns that producer, and tag the check so related checks are easy to find.
See Also
-
How It Works
The complete reference: definition, field scope, multi-field behavior, empty strings, arrays, filter behavior, and coverage.
-
Anomaly Reporting
The anomaly messages the check produces, what the numbers mean, Source Records highlighting, and Custom Anomaly Description.
-
Examples
Three production scenarios with sample data, anomaly messages, and the SQL equivalent of what the check evaluates.
-
Permissions
The team permission each action needs: view, create, edit, archive, restore, and delete.