Change Log
New and updated Power Query Lint rules. See all rules on the Rules page.
October 5, 2026
New Rules
preserve-dataverse-lookup-tables-for-joinsWhen a query performs a manual Table.Join or Table.NestedJoin, flags removing Dataverse table-typed navigation columns with Table.ColumnsOfType. Those relationship columns may already provide the data the manual join is recreating.
no-unnecessary-table-sortFlags Table.Sort steps whose result is not used by an order-sensitive operation. Power BI does not preserve load order, so refresh-time sorting is otherwise wasted.
require-manual-status-handling-for-web-contentsFlags Web.Contents calls without ManualStatusHandling. Without it, any non-2xx response (404, 429, 500) raises a generic DataSource.Error instead of being handled explicitly.
require-aggregation-function-for-table-pivotFlags Table.Pivot calls without an aggregation function as the fifth argument. Without one, the query fails when a pivoted attribute/value combination has more than one row for the same key.
require-try-otherwise-for-type-conversionsFlags conversions like Number.From or Date.From that are not wrapped in try ... otherwise, so a single bad cell fails the whole step.
require-try-otherwise-for-text-split-index-accessFlags indexed access on Text.Split results (e.g. Text.Split([Phone], "x"){1}) that is not wrapped in try ... otherwise, which errors when the input has fewer parts than expected.
require-guard-for-text-position-of-not-foundFlags Text.PositionOf results used without checking for -1 (not found), which can slice incorrectly or error in functions like Text.Range.
require-distinct-lookup-table-before-nested-joinFlags a Table.NestedJoin whose lookup table (third argument) is never deduplicated on the join keys, which silently multiplies rows. Traces the lookup through earlier steps: Table.Distinct, Table.Group and Table.AddKey count as deduplication, and later steps that can repeat rows undo it.
require-distinct-lookup-table-before-nested-join-across-queriesFlags a Table.NestedJoin whose lookup table comes from another query that never deduplicates on the join keys. Runs on TMDL, and on pasted Power Query when the paste contains several queries with // QueryName headers.
require-null-guard-before-table-expandFlags Table.ExpandRecordColumn/Table.ExpandListColumn on a JSON- or API-sourced column with no null guard, since a null record or list raises an error. Checked per column, so a guard on one column does not clear another.
require-null-check-in-conditional-columnFlags relational comparisons (>=, <=, >, <) on a possibly-null column with no null guard, since a null comparison silently falls through to the else branch. Null checks in the same if/else if chain, or a Table.SelectRows/Table.ReplaceValue guard upstream, count as guarded.
Rule Changes
use-adbc-implementation-for-odbc-driversUpdated to match Microsoft's current ADBC transition timeline: service-side ODBC removal is planned for early Q1 2027 and Desktop/gateway removal for spring 2027. Implementation="1.0" (or "default") is called out as the highest-risk case because it always forces ODBC, while an unpinned Implementation follows the tenant/workspace ADBC default.
no-plain-text-client-secret-as-parameterNo longer flags URL/API path literals (e.g. a Databricks HttpPath such as "/sql/1.0/warehouses/...") as client secrets.
