Power BI Cheat Sheet
Workflow: Get data → clean it in Power Query → build the model (relationships + DAX measures) → design report visuals → publish to the Power BI Service.
On this page
Desktop Shortcuts #
| Shortcut | Action |
|---|---|
Ctrl + S | Save |
Ctrl + Z / Ctrl + Y | Undo / redo |
Ctrl + C / Ctrl + V | Copy / paste visuals (also between pages and files) |
Ctrl + G | Group selected visuals |
Ctrl + click | Select several data points / use buttons while editing |
Ctrl + / (DAX editor) | Comment / uncomment |
Shift + Enter (DAX editor) | New line |
Alt + ↑/↓ (DAX editor) | Move a line |
Power Query (Transform data) #
| Task | How |
|---|---|
| Open | Home → Transform data |
| Use first row as headers | Home → Use First Row as Headers |
| Set data types | Click the icon in the column header |
| Remove columns | Select the ones to keep → Remove Other Columns |
| Split a column | Split Column → By Delimiter |
| Unpivot (wide → long) | Select the ID columns → Unpivot Other Columns |
| Fill down empty cells | Transform → Fill → Down |
| Replace values / errors | Right-click the column |
| Join tables | Home → Merge Queries |
| Stack tables | Home → Append Queries |
| Group & summarize | Transform → Group By |
| Combine all files in a folder | Get data → Folder → Combine |
| See the M code | View → Advanced Editor |
Every step appears in Applied Steps. Click a step to see the data at that point, or delete it to undo.
DAX Essentials #
| Function | Example |
|---|---|
SUM, AVERAGE, MIN, MAX | Total Sales = SUM(Sales[Amount]) |
COUNTROWS | Orders = COUNTROWS(Sales) |
DISTINCTCOUNT | Customers = DISTINCTCOUNT(Sales[CustomerID]) |
DIVIDE | Margin % = DIVIDE([Profit], [Total Sales]) (safe for 0) |
CALCULATE | Antwerp Sales = CALCULATE([Total Sales], Store[City] = "Antwerp") |
ALL / REMOVEFILTERS | % of Total = DIVIDE([Total Sales], CALCULATE([Total Sales], ALL(Product))) |
FILTER | CALCULATE([Total Sales], FILTER(Sales, Sales[Qty] > 10)) |
SUMX (iterator) | Revenue = SUMX(Sales, Sales[Qty] * Sales[Price]) |
RELATED | Sales[Category] = RELATED(Product[Category]) (calculated column) |
IF / SWITCH | SWITCH(TRUE(), [Sales] > 1000, "High", [Sales] > 500, "Mid", "Low") |
SELECTEDVALUE | SELECTEDVALUE(Product[Name], "Multiple") |
RANKX | RANKX(ALL(Product[Name]), [Total Sales]) |
VAR / RETURN | Store intermediate results (see below) |
Time Intelligence (needs a date table) #
| Function | Example |
|---|---|
TOTALYTD | Sales YTD = TOTALYTD([Total Sales], 'Date'[Date]) |
SAMEPERIODLASTYEAR | Sales LY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date])) |
DATEADD | CALCULATE([Total Sales], DATEADD('Date'[Date], -1, MONTH)) |
CALENDAR | Date = CALENDAR(DATE(2024,1,1), DATE(2026,12,31)) |
Sales Growth % =
VAR Current = [Total Sales]
VAR LastYear = CALCULATE([Total Sales], SAMEPERIODLASTYEAR('Date'[Date]))
RETURN DIVIDE(Current - LastYear, LastYear)
Modelling Rules of Thumb #
| Rule | Why |
|---|---|
| Use a star schema: fact table in the middle, dimension tables around it | Fast and simple DAX |
| Prefer measures over calculated columns | Calculated at query time, no extra storage |
| Create a dedicated date table and Mark as date table | Time intelligence works correctly |
| Relationships: one-to-many, single direction | Avoids ambiguous filters |
| Hide ID columns from the report view | Cleaner field list |
Service & Sharing #
| Task | Where |
|---|---|
| Publish | Home → Publish |
| Scheduled refresh | Service → Dataset settings (on-premises data needs a gateway) |
| Row-level security | Modeling → Manage roles |
| Share / apps | Workspace → Share or Create app (needs Pro or Premium) |
| Export to Excel / PowerPoint | Report → Export |
Tips #
- Name measures clearly and keep them in a separate empty "_Measures" table.
- Use the Performance Analyzer (View tab) to find slow visuals.
Nothing on this sheet matches “”.