Topic 1 — What is Power BI?
Power BI is a Business Intelligence (BI) tool developed by Microsoft. It helps you connect, transform, visualise, and share data to make better business decisions. BI means turning raw data into useful information — Power BI handles Data Collection, Data Analysis, Data Visualisation, Reporting, and Better Decision Making in one platform.
💡 Flow: Raw Data → Power BI Desktop → Power BI Service → Power BI Mobile → Useful Information
Power BI Architecture
| Component | What it does | Note |
| Power BI Desktop | Free Windows app — connect, transform, model data, create reports | Start here. Download free from powerbi.microsoft.com |
| Power BI Service | Online SaaS platform — publish, share, collaborate, dashboard | app.powerbi.com — teams view reports in browser |
| Power BI Mobile | Android/iOS/Windows app — view reports & dashboards on the go | Access reports from anywhere |
Power BI Licensing
| Licence | What you get |
| Power BI Free | Use Power BI Desktop and basic sharing |
| Power BI Pro | Sharing, collaboration, and larger datasets |
| Power BI Premium | Advanced features, large organisations, dedicated capacity |
Topic 2 — Power BI Desktop Interface
| Interface Area | Purpose |
| Ribbon | Contains all important commands and tools |
| Views (Report / Data / Model) | Switch between creating reports, previewing data, and managing relationships |
| Report Canvas | Area where you design and build your reports |
| Visualisations Pane | Select chart type, assign values, set filters and format |
| Fields Pane | Shows all tables and columns from your data |
| Page Tabs | Add, delete, and manage report pages |
Topic 3 & 10 — Data Sources & Get Data
Power BI can connect to a wide variety of data sources. Use Home → Get Data to connect.
| Category | Examples | Description |
| File | Excel (.xlsx, .xls), CSV, Text, JSON, XML | Data stored on your computer or network |
| Database | SQL Server, MySQL, PostgreSQL, Oracle, IBM DB2 | Data stored in relational databases |
| Cloud | Azure SQL, Azure Blob Storage, Google BigQuery | Data stored in cloud services |
| Online Services | SharePoint List, Salesforce, Google Analytics | Data from online platforms |
| Other | Web, OData Feed, Blank Query | Web pages, APIs, custom queries |
Data Import Modes — critical to understand
| Mode | Description | Best For |
| Import Mode | Data is imported and stored in Power BI. Fast performance and all features available | Smaller datasets, fast reports |
| DirectQuery | Data is NOT imported. Power BI sends queries to source in real-time. Always up-to-date | Large datasets, real-time data from databases |
| Dual (Composite) | Combination of Import and DirectQuery | Large models with aggregations |
💡 Tip: For best performance use Import Mode. Use DirectQuery only for large real-time data. Always clean and prepare data before using in reports.
Topic 4 & 15 — Power Query Editor (ETL)
Power Query is a data preparation and transformation tool in Power BI. Use it to clean, shape and transform raw data before loading it into the data model. Access via Home → Transform Data.
| Operation | What it does |
| Remove Columns | Remove unnecessary columns from data |
| Remove Rows | Remove unwanted rows (blanks, errors, duplicates) |
| Split Columns | Split a column into multiple columns |
| Merge Columns | Combine two or more columns into one |
| Change Data Type | Change type to Text, Number, Date etc. |
| Replace Values | Find and replace specific values |
| Remove Duplicates | Remove duplicate rows |
| Merge Queries | Combine two tables based on a common column (like SQL JOIN / VLOOKUP) |
| Append Queries | Add rows from one table to another (like SQL UNION ALL) |
| Pivot/Unpivot Column | Reshape data from rows to columns or columns to rows |
| Custom Column | Create a new column using a custom formula |
💡 Applied Steps: Every transformation you apply is recorded in the Applied Steps list. Steps are executed in order from top to bottom. You can edit, delete, reorder or disable any step. Always keep steps simple, reusable and well organised.
Power Query Keyboard Shortcuts
| Action | Shortcut |
| Close & Apply | Alt + F4 |
| Advanced Editor | Alt + F11 |
| Go to Step | Ctrl + G |
| Move Step Up/Down | Ctrl + Up/Down Arrow |
Topic 5, 11 & 16 — Data Modeling in Power BI
Data modeling is the process of creating relationships between tables. It helps organise data and make it easier to analyse. A data model is a collection of tables, relationships, and calculations (measures and columns).
Types of Tables
| Table Type | Description | Examples |
| Fact Table | Contains measurable data (numbers) | Sales, Orders, Transactions |
| Dimension Table | Contains descriptive data (details) | Customer, Product, Date, Region |
Types of Relationships
| Type | Description | Example | Symbol |
| One-to-One (1:1) | One record in Table A relates to one record in Table B | Employee ↔ Employee Detail | 1 — 1 |
| One-to-Many (1:*) | One record in Table A relates to many records in Table B | Customer → Many Sales | 1 — * |
| Many-to-Many (*:*) | Many records in Table A relate to many records in Table B | Student ↔ Course | * — * |
Cross Filter Direction
| Direction | Behaviour | When to Use |
| Single (Default) | Filter flows from Table A to Table B only | Most cases — better performance |
| Both | Filter flows in both directions | Only when you have a specific requirement |
Schema Types
| Schema | Description | Recommendation |
| Star Schema | Fact table at center, dimension tables around it. Simple and fast | ✅ Recommended for Power BI |
| Snowflake Schema | Dimension tables are normalised into multiple related tables | Use when dimension data is very large and has hierarchy |
Best Practices for Data Modeling
Use a Star Schema. Keep fact tables at the center. Use meaningful and consistent names. Create relationships using unique key columns. Avoid many-to-many relationships if possible. Hide unnecessary columns from report view. Use a Date Table for time intelligence. Always relate dimensions to facts, not to each other.
Topic 6, 12 & 17 — DAX (Data Analysis Expressions)
DAX is the formula language used in Power BI to create calculations in tables or models. DAX is used to create Measures (dynamic calculations), Calculated Columns (static, stored in model), and Calculated Tables (new tables using DAX).
Basic DAX Syntax
-- Basic syntax: Result = FUNCTION( Column1, Column2, ... )
-- Example:
Total Sales = SUM(Sales[Amount])
Avg Sales = AVERAGE(Sales[Amount])
Total Orders = COUNT(Sales[OrderID])
Unique Customers = DISTINCTCOUNT(Customers[CustomerID])
Essential DAX Functions
| DAX Function | What it does | Example |
| SUM() | Adds all values in a column | Total Sales = SUM(Sales[Amount]) |
| AVERAGE() | Returns average of values | Avg Sales = AVERAGE(Sales[Amount]) |
| COUNT() | Counts number of rows | Total Orders = COUNT(Sales[OrderID]) |
| DISTINCTCOUNT() | Counts unique values | Unique Customers = DISTINCTCOUNT(Customers[CustomerID]) |
| MIN() / MAX() | Returns min or max value | Min Sales = MIN(Sales[Amount]) |
| CALCULATE() | Modifies filter context for a measure | Sales 2024 = CALCULATE(SUM(Sales[Amount]), Sales[Year]=2024) |
| FILTER() | Returns table that satisfies condition | FILTER(Sales, Sales[Amount] > 1000) |
| ALL() | Removes all filters from table/column | All Sales = CALCULATE(SUM(Sales[Amount]), ALL(Sales)) |
| RELATED() | Gets related value from another table | City = RELATED(Customer[City]) |
| IF() | Conditional logic | Status = IF(Sales[Amount] > 1000, "High", "Low") |
| RANKX() | Rank rows by a measure | Rank = RANKX(ALL(Products), [Total Sales]) |
| SUMX() | Iterate rows and sum expression | Revenue = SUMX(Orders, Orders[Qty] * Orders[Price]) |
| COUNTROWS() | Counts number of rows in a table | Total Orders = COUNTROWS(Sales) |
CALCULATE — the most important DAX function
-- CALCULATE changes the filter context
-- Example: Sales for 2024 only
Sales 2024 = CALCULATE(
SUM(Sales[Amount]),
Sales[Year] = 2024
)
-- Sales YTD using time intelligence
Sales YTD = CALCULATE(
SUM(Sales[Amount]),
DATESYTD(Date[Date])
)
Filter Context vs Row Context
| Context | Description | Example |
| Filter Context | Determines which rows are considered in a calculation. Comes from slicers, filters, visuals, and CALCULATE | Total Sales = SUM(Sales[Amount]) |
| Row Context | Exists when a formula is evaluated row by row. Comes from calculated columns or iterators | Discounted Price = Sales[Price] * 0.9 |
Time Intelligence Functions
| Function | Syntax | Use |
| TOTALYTD | TOTALYTD(Expression, DateColumn) | Year to date total |
| SAMEPERIODLASTYEAR | SAMEPERIODLASTYEAR(DateColumn) | Same period last year |
| DATESYTD | DATESYTD(Date[Date]) | Returns dates year to date |
| DATEADD | DATEADD(Date[Date], -1, YEAR) | Shift dates by a period |
Topic 18 — Measures vs Calculated Columns
| Aspect | Calculated Column | Measure |
| Calculation Time | Calculated at data refresh time | Calculated at query time |
| Storage | Stored in the data model | Not stored — calculated on the fly |
| Size Impact | Increases model size | Does NOT increase model size |
| Used In | Rows, Filters, Slicers, Groups | Values, KPIs, Cards, Charts |
| Changes with Filters | No (static per row) | Yes (dynamic) |
| Best For | Storing data and row-level logic | Aggregations and business calculations |
💡 Rule of thumb: Use Columns to store data. Use Measures for calculations. The right choice = better performance and accurate reports.
Topic 7 — Power BI Visualisations
| Visual | Best Used For |
| Bar / Column Chart | Compare categories across items (horizontal = Bar, vertical = Column) |
| Line / Area Chart | Show trends over time, patterns |
| Pie / Donut Chart | Show part of a whole (few categories only) |
| Scatter Chart | Show relationship/correlation between two values and outliers |
| Map | Show geographical data by country, state, city |
| Treemap | Show hierarchical data in rectangles |
| Gauge / KPI | Show progress towards a target/goal |
| Card / Multi-row Card | Show single KPI values, key numbers |
| Table / Matrix | Detailed data view, summarised data with subtotals and hierarchies |
| Funnel Chart | Show stages in a process (conversion rates) |
| Waterfall Chart | Show cumulative effect of positive and negative values |
Which Visual to Use — Quick Guide
| Goal | Use |
| Compare categories | Bar / Column Chart |
| Show trend over time | Line / Area Chart |
| Show part of whole | Pie / Donut Chart |
| Show relationship between two values | Scatter Chart |
| Show geographical data | Map |
| Show hierarchical data | Treemap / Matrix |
| Show progress to goal | KPI / Gauge |
| Show flow or stages | Funnel Chart |
| Show increase/decrease | Waterfall Chart |
Topic 8 — Filters & Slicers in Power BI
| Type | What it does |
| Visual Level Filter | Filters data for a specific visual only |
| Page Level Filter | Filters data for the entire page |
| Report Level Filter | Filters data for all pages in the report |
| Drillthrough Filter | Passes data to a drillthrough page for more detailed analysis |
Filters vs Slicers
| Feature | Filters | Slicers |
| Purpose | Restrict data shown in visuals | Allow user to interact and filter data |
| Visibility | Usually hidden in Filter pane | Visible on the report page |
| User Interaction | Not directly visible to users | Users can click and select values |
| Types | Visual, Page, Report, Drillthrough | Dropdown, List, Date, Between |
| Best Used For | Page/Report level filtering or advanced conditions | Quick filtering and interactive analysis |
Topic 9 — Formatting & Design in Power BI
Good formatting makes your report attractive, easy to read and more effective. Use the Format pane to modify each visual.
| Formatting Option | Description | Best Practice |
| Title | Add or change the title of the visual | Use clear and meaningful titles |
| Background | Change background colour or add transparency | Use light colours for better look |
| Data Colours | Change colours of data points | Use different colours for categories |
| Data Labels | Show values on charts | Show value on bars or pie slices |
| Gridlines | Show or hide gridlines | Helps in better readability |
| Conditional Formatting | Highlight data based on conditions (Data Bars, Color Scale, Icon Sets) | Use for KPIs, targets, performance tracking |
Topic 14 & 19 — Power BI Dashboards & Publishing
A dashboard is a single-page view of your most important visuals from one or more reports. It is ideal for monitoring KPIs and tracking performance. Dashboards are interactive and update with real-time data.
Dashboard vs Report
| Feature | Dashboard | Report |
| Purpose | Monitor KPIs and key metrics at a glance | Analyse and explore detailed data |
| Layout | Single page (tile-based) | Multiple pages (detailed) |
| Interactivity | High-level interactivity | High (Filters, slicers, drill) |
| Data Source | Can use multiple reports | Based on a single dataset |
| Best For | Quick insights and monitoring | In-depth analysis and storytelling |
Step-by-step: build your first Power BI dashboard
| Step | Action | Notes |
| 1 | Home → Get Data → Excel / SQL Server / CSV | Connect to your data source |
| 2 | Transform Data → Power Query Editor | Clean: remove blanks, rename columns, fix data types |
| 3 | Model view → create relationships | Link tables by common key column — like SQL JOINs |
| 4 | Create DAX measures | Total Sales = SUM(Sales[Amount]), YTD, Growth % |
| 5 | Report view → add visuals | Bar chart, line chart, card, KPI, table, map |
| 6 | Add slicers for interactivity | Date slicer, region slicer — user filters on click |
| 7 | Format visuals and apply theme | View → Themes. Consistent colours, clear labels |
| 8 | File → Publish to Power BI Service | Share URL with team — live dashboard, no email needed |
Topic 20 — Power BI Service (Publish, Share & Collaborate)
| Task | How to Do It |
| Pin a visual to dashboard | Open report → Focus mode → Pin (pushpin icon) → Select dashboard |
| Share a report | Click Share → enter email with specific permissions |
| Publish to web | File → Embed report → Copy link or code |
| Schedule data refresh | Dataset settings → Scheduled refresh → Set frequency (daily, hourly) |
Workspaces in Power BI Service
| Type | Use |
| My Workspace | Personal workspace for individual use |
| Team Workspace | Collaborate with a team or group |
| Premium Workspace | For datasets >1GB and advanced features |
| App Workspace | Distribute content at scale with apps |
Row-Level Security (RLS)
RLS allows you to restrict data access based on user roles. Users see only the data they are allowed to see. Example: North region manager sees only North data, South manager sees only South data. Set up in Model view → Manage Roles → define DAX filter rules per role.
Topic 13 — Navigation & Interactivity
| Feature | Description | How to Enable |
| Drill Down | View data at lower level of detail (Category → Subcategory) | Click drill icon on visual |
| Drill Through | Navigate to a different page with more details | Right-click data point → Drill through |
| Bookmarks | Save and go to a specific view of your report | View → Bookmarks → Add |
| Sync Slicers | Apply slicer selection to multiple pages | View → Sync Slicers panel |
| Report Tooltips | Show additional info when hovering over a visual | Create a page → Page Information → Tooltip: On |
| Q&A Visual | Ask questions in natural language and get answers | Add Q&A visual from visualisations pane |
Power BI vs Excel — when to use which
| Scenario | Use Excel | Use Power BI |
| One-off analysis for yourself | ✅ | — |
| Live dashboard for management | — | ✅ |
| Share with non-technical users | Email file (risky) | ✅ Share URL, always fresh |
| Data over 1 million rows | ❌ Slow / crashes | ✅ Handles very large datasets |
| Quick ad-hoc calculation | ✅ | — |
| Multiple data sources in one report | Complex | ✅ Built-in |
| Automated scheduled refresh | Manual | ✅ Scheduled refresh in Service |
| Role-based access (RLS) | ❌ Not available | ✅ Row-Level Security built-in |
Sample DAX Measures Reference
-- Common measures every Power BI developer needs
Total Sales = SUM(Sales[Amount])
Total Quantity = SUM(Sales[Quantity])
Average Price = AVERAGE(Sales[Price])
Total Orders = COUNTROWS(Sales)
Unique Customers = DISTINCTCOUNT(Customers[CustomerID])
-- Profit Margin %
Profit Margin % = DIVIDE([Total Profit], [Total Sales], 0)
-- Running Total
Running Total =
CALCULATE(
SUM(Sales[Amount]),
FILTER(ALL(Date), Date[Date] <= MAX(Date[Date]))
)
-- Sales vs Last Year
Sales Last Year =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR(Date[Date])
)
-- YTD Sales
Sales YTD =
TOTALYTD([Total Sales], Date[Date])
-- Sales 2024 only
Sales 2024 =
CALCULATE(
[Total Sales],
YEAR(Date[Date]) = 2024
)
-- Top 10 Customers (Calculated Table)
Top Customers =
TOPN(10, Customers, [Total Sales], DESC)