# Docs - Getting Started - [Getting Started](/docs/getting-started): Start here to install Power BI Desktop and learn the fundamentals before moving on to DAX, modeling, and Power Query. - [Introduction](/docs/getting-started/introduction): Power BI documentation. - [Installation](/docs/getting-started/installation): How to install Power BI Desktop and understand the other ways to access Power BI. - [Power BI Overview](/docs/getting-started/power-bi-overview): How Power BI licensing tiers work, and how it fits into the broader Microsoft Fabric ecosystem. - AI-Assisted Power BI - [AI-Assisted Power BI](/docs/ai-power-bi): Using AI to write and debug DAX, generate Power Query M code, review a data model, and plan report design — without skipping the fundamentals. - [Introduction](/docs/ai-power-bi/introduction): Power BI documentation. - [DAX with AI](/docs/ai-power-bi/dax-with-ai): Use AI to write, explain, debug, and optimize DAX calculations faster, without skipping the fundamentals. - [Power Query with AI](/docs/ai-power-bi/power-query-with-ai): Use AI to generate, explain, and troubleshoot Power Query M code and transformation logic. - [Model Advisor](/docs/ai-power-bi/model-advisor): Use AI as a second set of eyes on a Power BI data model's relationships, star schema design, and performance. - [Report Design with AI](/docs/ai-power-bi/report-design): Use AI to plan dashboard layouts, choose visuals, and improve the storytelling in a Power BI report. - [Prompt Library](/docs/ai-power-bi/prompt-library): A curated collection of ready-to-use AI prompts for DAX, Power Query, data modeling, and report development. - DAX - [DAX](/docs/dax): Measures, calculated columns, filter context, and the functions behind Power BI's calculation language. - [Introduction](/docs/dax/introduction): Power BI documentation. - [DAX Function Reference](/docs/dax/functions): A categorized reference of common DAX functions — aggregation, filter, iterator, time intelligence, and more — linking to full explanations where available. - [Basics](/docs/dax/basics): Power BI documentation. - [Variables (VAR)](/docs/dax/variables): Learn how to use DAX variables (VAR) to create cleaner, faster, and more maintainable calculations in Power BI. - [Measures](/docs/dax/measures): Power BI documentation. - [Calculated Columns](/docs/dax/calculated-columns): Power BI documentation. - [Calculated Tables](/docs/dax/calculated-tables): Learn how DAX calculated tables generate new tables inside a Power BI data model. - [Row Context](/docs/dax/row-context): Power BI documentation. - [Filter Context](/docs/dax/filter-context): Power BI documentation. - [Calculate](/docs/dax/calculate): Power BI documentation. - [IF()](/docs/dax/if): Learn how IF branches a DAX calculation on a condition, and when to reach for SWITCH instead once there's more than one condition to check. - [DIVIDE()](/docs/dax/divide): Learn how DIVIDE safely handles division in DAX, returning blank (or a chosen fallback) instead of an error when the denominator is zero or blank. - [Iterator Functions (X Functions)](/docs/dax/iterator): Learn how DAX iterator functions evaluate expressions row by row using functions such as SUMX, AVERAGEX, COUNTX, MINX, and MAXX. - [Time Intelligence](/docs/dax/time-intelligence): Learn how DAX Time Intelligence functions perform year-to-date calculations, period comparisons, running totals, and trend analysis in Power BI. - [ALL(), ALLEXCEPT(), ALLSELECTED() & REMOVEFILTERS()](/docs/dax/filter-functions): Learn how DAX filter removal functions modify filter context for percentages, rankings, running totals, and advanced calculations. - [FILTER()](/docs/dax/filter): Learn how the FILTER function creates custom filter conditions for advanced DAX calculations. - [RELATED() & RELATEDTABLE()](/docs/dax/related): Learn how RELATED and RELATEDTABLE pull values across relationships in a Power BI data model. - [LOOKUPVALUE()](/docs/dax/lookupvalue): Learn how LOOKUPVALUE retrieves a value from another table without requiring an existing relationship. - [SELECTEDVALUE()](/docs/dax/selectedvalue): Learn how SELECTEDVALUE safely returns a single selected value from a column, or a fallback when more than one value is selected. - [SWITCH()](/docs/dax/switch): Learn how SWITCH evaluates an expression against multiple possible values, as a cleaner alternative to nested IF statements. - [RANKX()](/docs/dax/rankx): Learn how RANKX ranks values within a table, and why ALL() is almost always required to get a meaningful result. - [TOPN()](/docs/dax/topn): Learn how TOPN returns the top (or bottom) N rows of a table by a given expression. - [SUMMARIZE()](/docs/dax/summarize): Learn how SUMMARIZE groups a table by columns and computes aggregations per group, and why ADDCOLUMNS is often the safer alternative. - [USERELATIONSHIP()](/docs/dax/userelationship): Learn how USERELATIONSHIP activates an inactive relationship for a single calculation, without changing the model's default relationships. - [Performance Optimization](/docs/dax/performance): Practical techniques for diagnosing and fixing slow DAX measures, from filter context to iterator overhead to storage engine vs. formula engine time. - [DAX User-Defined Functions (UDFs)](/docs/dax/user-defined-functions): Learn the FUNCTION syntax for DAX user-defined functions, generally available since the June 2026 release — parameter types, val vs. expr evaluation, and where UDFs can and can't be used. - [SUMX()](/docs/dax/sumx): Learn how SUMX evaluates an expression per row before summing, and when that row-by-row evaluation is actually necessary instead of a plain SUM. - [COUNTROWS()](/docs/dax/countrows): Learn how COUNTROWS counts every row in a table regardless of column content, and how it differs from COUNT and COUNTA. - [DISTINCTCOUNT()](/docs/dax/distinctcount): Learn how DISTINCTCOUNT counts unique values in a column, how it treats blanks, and when to use DISTINCTCOUNTNOBLANK instead. - [EARLIER()](/docs/dax/earlier): Learn how EARLIER reaches back to an outer row context from inside a nested row context, and why VAR has mostly replaced it in modern DAX. - [LEFT(), RIGHT() & MID()](/docs/dax/mid-left-right): Learn how DAX's LEFT, RIGHT, and MID extract a substring by position, why MID counts starting positions from 1 (not 0), and why that's the opposite of Power Query's Text.Middle. - [BLANK() vs 0: ISBLANK() and the Comparison Trap](/docs/dax/blank-vs-zero): Learn why DAX measures return BLANK() instead of 0 for missing data, why BLANK() = 0 evaluates to TRUE, and why ISBLANK() is the only reliable way to test for an actual blank. - [TRIM(), UPPER() & LOWER()](/docs/dax/trim-upper-lower): Learn how DAX's TRIM, UPPER, and LOWER clean up text, and why TRIM does more than Power Query's Text.Trim -- it also collapses internal runs of spaces down to one, not just the leading and trailing ones. - [DATEDIFF()](/docs/dax/datediff): Learn why DAX's DATEDIFF counts calendar boundaries crossed between two dates, not full elapsed periods -- so a 1-day gap across a month-end can return 1 for MONTH, and how that differs from a simple day-count division. - [CALENDAR() vs CALENDARAUTO()](/docs/dax/calendar-calendarauto): Learn why CALENDARAUTO() scans every date and datetime column in the entire model to determine its range -- not just your fact table -- and why an unrelated column with an outlier date can silently produce a much wider date table than intended. - [DATEADD() vs PARALLELPERIOD()](/docs/dax/dateadd-parallelperiod): Learn why DATEADD shifts a date range while preserving its exact shape, while PARALLELPERIOD always snaps the result out to the full calendar period -- and why that only matters when the current filter context isn't already a complete month, quarter, or year. - [UNION(), EXCEPT() & INTERSECT()](/docs/dax/union): Learn why DAX's UNION, EXCEPT, and INTERSECT match columns between tables by position, not by name -- so two tables with identical column names built in a different order combine silently wrong, with no error. - [TODAY() & NOW(): Calculated Column vs Measure Timing](/docs/dax/today-now): Learn why TODAY() and NOW() in a DAX calculated column get frozen at the moment of the last data refresh, while the same functions in a measure re-evaluate live every time the report is viewed -- and why that difference explains a stale-looking calculated column. - [KEEPFILTERS()](/docs/dax/keepfilters): Learn why CALCULATE() replaces an existing filter on the same column by default, how KEEPFILTERS() makes it AND with that filter instead, and why the two versions only diverge once the outer and inner filters actually disagree. - [VALUES() vs DISTINCT()](/docs/dax/values-distinct): Learn why VALUES() can return one more row than DISTINCT() on the exact same column -- an extra blank row that accounts for fact-table rows with no matching dimension value, a referential integrity gap DISTINCT() never surfaces. - [ADDCOLUMNS() vs SELECTCOLUMNS()](/docs/dax/addcolumns-selectcolumns): Learn why ADDCOLUMNS keeps every original column and adds new ones, while SELECTCOLUMNS returns only the columns explicitly listed -- dropping the rest of the source table entirely, not just hiding them. - [CROSSFILTER()](/docs/dax/crossfilter): Learn why a standard one-to-many relationship only filters from the dimension side to the fact side by default, and how CROSSFILTER() temporarily lets a fact-table filter flow backward to the dimension table for a single calculation. - [IFERROR()](/docs/dax/iferror): Learn why IFERROR only catches a genuine DAX error, substituting a fallback -- and why it leaves a BLANK() result completely untouched, since blank is a valid value, not an error. - Data Modeling - [Data Modeling](/docs/modeling): Star schemas, fact and dimension tables, relationships, and date tables — the foundation everything else in Power BI is built on. - [Introduction](/docs/modeling/introduction): Power BI documentation. - [Star Schema](/docs/modeling/star-schema): Power BI documentation. - [Fact Tables](/docs/modeling/fact-tables): Power BI documentation. - [Dimension Tables](/docs/modeling/dimension-tables): Power BI documentation. - [Relationships](/docs/modeling/relationships): Power BI documentation. - [DirectQuery vs. Import](/docs/modeling/storage-modes): Learn the difference between Import, DirectQuery, and Composite storage modes in Power BI, and when to use each. - [Aggregations](/docs/modeling/aggregations): Learn how Power BI aggregation tables speed up DirectQuery models by pre-summarizing common queries. - [Composite Models](/docs/modeling/composite-models): A deeper look at building Power BI composite models that combine multiple data sources and storage modes. - [Date Tables](/docs/modeling/date-tables): Power BI documentation. - [Measures](/docs/modeling/measures): Power BI documentation. - [Slowly Changing Dimensions](/docs/modeling/slowly-changing-dimensions): How to handle dimension attributes that change over time in a Power BI model, using Type 1 and Type 2 slowly changing dimension patterns. - [Bridge Tables](/docs/modeling/bridge-tables): How bridge tables resolve many-to-many relationships in a Power BI star schema. - [Many-to-Many Relationships](/docs/modeling/many-to-many): How to model many-to-many relationships in Power BI, and when to use a native relationship versus a bridge table. - Power Query - [Power Query](/docs/power-query): Data transformation and preparation for Power BI — connect to sources, clean data, and shape it with the M language. - [Introduction](/docs/power-query/introduction): An introduction to Power Query, the data connection and transformation engine behind Power BI. - [M Function Reference](/docs/power-query/functions): A categorized reference of common Power Query M functions — table, text, list, date, and source functions — linking to full explanations where available. - [Power Query Editor](/docs/power-query/editor): A tour of the Power Query Editor interface — the Queries pane, preview grid, Applied Steps, and Query Settings. - [M Language](/docs/power-query/m-language): An introduction to M, the functional formula language behind every Power Query transformation. - [Custom Functions in Power Query M](/docs/power-query/custom-functions): Learn how to write, type, and reuse custom functions in Power Query M — the concept behind every each expression, and what unlocks List.Transform, List.Accumulate, and reusable transformation logic. - [Transformations](/docs/power-query/transformations): Common Power Query transformations for cleaning and reshaping data before it loads into Power BI. - [Table.SelectRows()](/docs/power-query/table-selectrows): Learn how Table.SelectRows filters a table with a per-row condition, how to combine multiple conditions, and the case-sensitivity and null-comparison mistakes that trip people up. - [Table.AddColumn()](/docs/power-query/table-addcolumn): Learn how Table.AddColumn creates a new column from a per-row expression, the each shorthand behind it, and how it differs from Table.TransformColumns. - [Table.TransformColumns()](/docs/power-query/table-transformcolumns): Learn how Table.TransformColumns applies a function to every value in a column in place, how to transform multiple columns at once, and why it differs from Table.AddColumn. - [Table.TransformColumnTypes()](/docs/power-query/table-transformcolumntypes): Learn how Table.TransformColumnTypes sets column data types, the optional locale argument behind most "couldn't convert" errors, and how it differs from Table.TransformColumns despite the near-identical name. - [Merge Queries](/docs/power-query/merge-queries): How to combine two Power Query tables on matching columns, and how to choose the right join kind. - [Merge vs. Append: When to Use Each](/docs/power-query/merge-vs-append): Merge Queries and Append Queries are two completely different operations that sound similar. Here's the actual decision — matching columns sideways versus stacking rows — and the mistakes that come from confusing them. - [Table.Group()](/docs/power-query/table-group): Learn how Table.Group aggregates rows into per-group summaries, the M equivalent of SQL's GROUP BY. - [Table.Pivot() & Table.Unpivot()](/docs/power-query/table-pivot-unpivot): Learn how Table.Pivot and Table.Unpivot reshape data between wide and long formats, why "Unpivot Other Columns" matters for future-proofing a query, and the aggregation function Pivot requires. - [Table.ReplaceValue()](/docs/power-query/table-replacevalue): Learn how Table.ReplaceValue finds and replaces values across specific columns, why it requires an explicit column list, and how ReplaceValue differs from ReplaceText. - [Text.Trim(), Text.Upper() & Text.Lower()](/docs/power-query/text-trim-upper-lower): Learn how Text.Trim, Text.Upper, and Text.Lower clean up text values, why Text.Trim doesn't always catch what looks like whitespace, and when case-insensitive comparison is the better fix than converting case at all. - [Text.Split() & Text.Combine()](/docs/power-query/text-split-combine): Learn how Text.Split breaks a text value into a list by delimiter, how Text.Combine joins one back together, and the mistakes that come from consecutive delimiters and mismatched null handling. - [Text.Start(), Text.End(), Text.Middle() & Text.Length()](/docs/power-query/text-substring-functions): Learn how Text.Start, Text.End, and Text.Middle extract a substring by position, why they're zero-indexed, and how Text.Length combines with them for a variable-length extraction. - [Text.Contains() & Text.Replace()](/docs/power-query/text-contains-replace): Learn how Text.Contains checks for a substring and Text.Replace swaps every occurrence of one, why both are case-sensitive by default, and the comparer option that makes them case-insensitive. - [Table.Buffer()](/docs/power-query/table-buffer): Learn how Table.Buffer loads a table fully into memory, why that stabilizes a volatile source, and why it can silently break query folding. - [Query Folding](/docs/power-query/query-folding): Learn how Power Query's query folding pushes transformations back to the source for much faster refreshes. - [List.Generate()](/docs/power-query/list-generate): Learn how List.Generate builds a custom sequence by repeatedly applying a function, the M equivalent of a while loop. - [List.Transform()](/docs/power-query/list-transform): Learn how List.Transform applies a function to every value in a list, how it differs from Table.TransformColumns, and when to reach for it versus Table.AddColumn. - [List.Accumulate()](/docs/power-query/list-accumulate): Learn how List.Accumulate reduces a list to a single value by carrying state across every item — the general-purpose function behind running totals and custom aggregations that no built-in function covers. - [Web.Contents()](/docs/power-query/web-contents): Learn how Web.Contents fetches data from a URL, the options that control headers and query parameters, and why RelativePath matters for query folding and refresh in the Service. - [Sql.Database()](/docs/power-query/sql-database): Learn how Sql.Database connects to SQL Server, why pasting a native SQL query breaks query folding, the auth issues that only surface once a report moves to a gateway, and Import vs. DirectQuery for SQL sources. - [Excel.Workbook()](/docs/power-query/excel-workbook): Learn how Excel.Workbook reads sheets and named tables from an Excel file, the difference between accessing a Sheet vs a Table, and why a renamed sheet breaks a query with no obvious error at the point of the actual change. - [Json.Document()](/docs/power-query/json-document): Learn how Json.Document parses JSON into M records and lists, how to turn a JSON array into a proper table, and why an API response with inconsistent fields across records causes silent, not obvious, problems. - [Error Handling in Power Query (try ... otherwise)](/docs/power-query/error-handling): Learn how try...otherwise catches an error from an expression, when to catch it versus fix the root cause, and how to inspect an error's details with [HasError] and Error.Record. - [Working with Dates in Power Query (Date & Duration Functions)](/docs/power-query/date-functions): Learn the core Date.* and Duration.* functions in Power Query M — adding/subtracting time, extracting components, and the Duration vs. DateTime distinction that trips people up. - [Number.Round(), Number.RoundUp() & Number.RoundDown()](/docs/power-query/number-functions): Learn how Number.Round, Number.RoundUp, and Number.RoundDown differ, why "round up" doesn't mean what it sounds like for negative numbers, and how negative digits round to the left of the decimal point. - [Csv.Document()](/docs/power-query/csv-document): Learn what Csv.Document actually returns before Table.PromoteHeaders runs — generic Column1/Column2 names and every value as text, not the named, typed columns the Get Data wizard makes it look like. - [Table.SplitColumn() & Table.CombineColumns()](/docs/power-query/table-splitcolumn-combinecolumns): Learn how Table.SplitColumn breaks one column into several across every row of a table, why a row with fewer parts than expected fills the extra columns with null instead of erroring, and how Table.CombineColumns merges columns back with a separator. - [Table.Sort()](/docs/power-query/table-sort): Learn how Table.Sort orders rows by one or more columns, and why a numeric-looking column still typed as text sorts "10" before "2" — lexicographically, not numerically. - [Table.Distinct()](/docs/power-query/table-distinct): Learn how Table.Distinct removes duplicate rows, and why scoping it to specific columns silently keeps only the first row's values for every other column — discarding the rest without a warning. - [Table.AddIndexColumn()](/docs/power-query/table-addindexcolumn): Learn how Table.AddIndexColumn generates a sequential index column, why it starts at 0 by default instead of 1, and how the increment argument can count by anything, including backward. - [Number.ToText()](/docs/power-query/number-totext): Learn how Number.ToText's optional format argument works, and why the "P" (percent) format multiplies the value by 100 instead of just appending a percent sign — the same convention Excel's percentage format uses. - [Value.Type(), Value.Is() & Comparing to null](/docs/power-query/value-type-null): Learn how Value.Type helps debug unexpected-type errors, why Value.Is is the idiomatic way to check a value's type, and why null = null evaluates to true in Power Query M — unlike SQL's three-valued NULL logic. - [Table.SelectColumns() and MissingField](/docs/power-query/table-selectcolumns): Learn how Table.SelectColumns keeps only the specified columns, why requesting a column that doesn't exist errors by default, and how the MissingField option (Ignore or UseNull) changes that instead of the query breaking on the next refresh. - [Table.FirstN() & Table.Skip()](/docs/power-query/table-firstn-skip): Learn how Table.FirstN and Table.Skip work with a row count, and why passing a condition function instead makes them stop at the first row that fails it — a "take while," not a filter over the whole table. - [DateTime.LocalNow() and the Desktop-vs-Service Trap](/docs/power-query/datetime-localnow): Learn why DateTime.LocalNow returns a different value in Power BI Desktop than it does during a scheduled refresh in the Service, and why DateTimeZone.UtcNow (or a fixed local time) is usually the more reliable choice. - [List.Distinct() & List.Contains()](/docs/power-query/list-distinct-contains): Learn why List.Distinct and List.Contains are both case-sensitive by default in Power Query M, and how Comparer.OrdinalIgnoreCase fixes both at once. - Visuals - [Visuals](/docs/visuals): Choosing and configuring Power BI charts, tables, slicers, field parameters, and interactivity. - [Charts](/docs/visuals/charts): Learn how to choose and configure the right Power BI chart type for your data. - [Tables](/docs/visuals/tables): Learn when to use Table and Matrix visuals in Power BI, and how to configure them well. - [Slicers](/docs/visuals/slicers): Learn how Power BI slicers let report users filter visuals interactively. - [Field Parameters](/docs/visuals/field-parameters): Learn how Power BI field parameters let report users swap which fields or measures a visual displays. - [Bookmarks & Interactivity](/docs/visuals/bookmarks): Learn how Bookmarks, drill-through, and tooltips make Power BI reports interactive. - [Formatting](/docs/visuals/formatting): Learn how to format Power BI visuals and reports for clarity and consistency. - Power BI Service - [Power BI Service](/docs/power-bi-service): Workspaces, dashboards, refresh, dataflows, deployment pipelines, and row-level security in the Power BI Service. - [Workspaces](/docs/power-bi-service/workspaces): Learn how Power BI workspaces organize reports, datasets, and permissions in the Power BI Service. - [Dashboards](/docs/power-bi-service/dashboards): Learn how Power BI dashboards differ from reports, and how to build one from pinned tiles. - [Refresh](/docs/power-bi-service/refresh): Learn how dataset refresh keeps Import-mode Power BI reports up to date, including scheduled and incremental refresh. - [Dataflows](/docs/power-bi-service/dataflows): Learn how Power BI dataflows centralize data preparation so multiple datasets can share the same cleaned tables. - [Deployment Pipelines](/docs/power-bi-service/deployment-pipelines): Learn how Power BI deployment pipelines move content through Development, Test, and Production stages safely. - [Row-Level Security](/docs/power-bi-service/security): Learn how Row-Level Security (RLS) restricts data access in Power BI using roles and DAX filter expressions. - Microsoft Fabric - [Microsoft Fabric](/docs/fabric): How Power BI fits into Microsoft Fabric — OneLake, Lakehouse, Data Warehouse, Data Factory, and Direct Lake mode. - [Introduction](/docs/fabric/introduction): Learn what Microsoft Fabric is, how its workloads fit together on OneLake, and how Power BI connects to it via Direct Lake. - [OneLake](/docs/fabric/onelake): How OneLake organizes Fabric's data as one shared lake — Files vs. Tables, shortcuts, and the security model behind it. - [Lakehouse](/docs/fabric/lakehouse): How a Fabric Lakehouse organizes raw and curated data, and how notebooks transform it into queryable Delta tables. - [Data Warehouse](/docs/fabric/data-warehouse): Fabric's T-SQL-first alternative to the Lakehouse, for teams who want a traditional warehousing experience over Delta tables in OneLake. - [Data Factory](/docs/fabric/data-factory): Orchestrating and transforming data in Microsoft Fabric with Pipelines and Dataflows Gen2. - [Direct Lake Mode](/docs/fabric/direct-lake): How Direct Lake reads OneLake's Delta tables directly into Power BI's engine, when it falls back to DirectQuery, and how to keep it fast. - [Fabric Capacity & Cost Management](/docs/fabric/capacity): How Fabric capacity SKUs, Capacity Units, and smoothing work, and how to manage cost as workloads grow. - Governance - [Governance](/docs/governance): Reference formats for keeping RLS, gateway architecture, and report themes auditable and consistent as a Power BI tenant grows. - [RLS Role Matrix](/docs/governance/rls-matrix): A reference format for mapping Power BI roles to their DAX filter logic and table scope, so row-level security stays auditable as it grows. - [Gateway & Refresh Architecture](/docs/governance/gateway-refresh): A reference architecture for mapping on-premises data gateways to the datasets and refresh schedules that depend on them, to avoid contention and bottlenecks. - [Report Theme JSON Files](/docs/governance/report-themes): How Power BI JSON theme files are structured, what to check for accessibility, and how to distribute one standard theme across a team. - DAX Patterns - [DAX Patterns](/docs/dax-patterns): Ready-made DAX patterns for totals, ranking, percent of total, running totals, and Earned Value Management metrics — the calculations almost every report needs. - [Totals](/docs/dax-patterns/totals): Common DAX patterns for calculating totals, grand totals, and totals that ignore filters. - [Ranking](/docs/dax-patterns/ranking): Common DAX patterns for ranking rows using RANKX, including ties, filtered ranks, and ranking within groups. - [Percent Of Total](/docs/dax-patterns/percent-of-total): Common DAX patterns for calculating percent of total, percent of parent, and percent of a specific category. - [Running Total](/docs/dax-patterns/running-total): A general DAX pattern for calculating running (cumulative) totals over any sorted column, not just dates. - [Earned Value Management (EVM) Metrics](/docs/dax-patterns/evm-metrics): Ready-made DAX patterns for Planned Value, Earned Value, Actual Cost, CPI, SPI, and the standard EAC/VAC/TCPI forecasting measures used in program and systems engineering status reporting. - [Risk Score & Heat Map](/docs/dax-patterns/risk-score-heat-map): Ready-made DAX patterns for finding each item's latest assessment, computing a likelihood x impact risk score with threshold bands, and turning a disconnected-axis matrix into an actual heat map. - [Coverage & Verification (Requirements Traceability)](/docs/dax-patterns/coverage-verification): Ready-made DAX patterns for the covered-vs-verified distinction behind a requirements traceability matrix -- counting through a many-to-many bridge table without double-counting, and finding the exact gap list. - [Reliability Metrics (MTBF, MTTR & Availability)](/docs/dax-patterns/reliability-mtbf-mttr): Ready-made DAX patterns for Mean Time Between Failures, Mean Time To Repair, and Availability -- including the per-asset uptime calculated column these measures depend on, built without a dedicated date table.