Power BI interviews test your knowledge of data modeling, DAX, Power Query, visualisations, security, and the Power BI Service. This guide covers 50 of the most frequently asked questions — with clear answers, DAX examples, and practical explanations.
Quick reference
| Topic | Most asked questions |
|---|---|
| Fundamentals | Components, data sources, import vs DirectQuery |
| Data Modeling | Relationships, star schema, cardinality, fact vs dimension |
| DAX | Measures vs calculated columns, CALCULATE, context, time intelligence |
| Power Query | M language, transformations, query folding |
| Visualisations | Chart types, cross-filtering, custom visuals |
| Filters & Slicers | Filter types, filter context, slicer sync |
| Row-Level Security | Static vs dynamic RLS, roles, testing |
| Power BI Service | Workspaces, sharing, datasets, dataflows |
| Performance | Star schema benefits, DAX optimisation, aggregations |
| Advanced | Composite models, incremental refresh, deployment pipelines |
Fundamentals
1. What are the main components of the Power BI ecosystem?
| Component | Purpose |
|---|---|
| Power BI Desktop | Author reports and data models (.pbix files) |
| Power BI Service | Cloud platform for sharing, collaboration, and consumption |
| Power BI Mobile | iOS/Android apps for consuming reports |
| Power BI Report Server | On-premises report hosting (Power BI Premium or RS licence) |
| Power BI Embedded | Embedding reports in custom applications via API |
| Power BI Gateway | Bridge between cloud Service and on-premises data sources |
| Power BI Dataflows | Self-service ETL stored in Azure Data Lake Gen2 |
The typical workflow: Desktop → Publish → Service → Share with users.
2. What is the difference between Import, DirectQuery, and Live Connection modes?
| Mode | How it works | Best for | Limitations |
|---|---|---|---|
| Import | Data copied into in-memory model (Vertipaq engine) | Most scenarios; fastest performance | Data refresh delay; model size limits |
| DirectQuery | Queries sent to source at render time; no data copy | Real-time data; very large datasets | Slower; limited DAX/Power Query features |
| Live Connection | Connects to SSAS, AAS, or Power BI dataset; no local model | Centralised shared models | No local transformations or measures |
| Composite model | Mix of Import + DirectQuery tables in one model | Hybrid scenarios (Power BI Premium) | Complex relationships; some restrictions |
Rule of thumb: prefer Import unless the dataset is too large or must be real-time.
3. What is Power Query and what language does it use?
Power Query is the data transformation and loading layer in Power BI (also in Excel). It uses the M language (formally: Power Query Formula Language) — a functional, case-sensitive language.
Key capabilities:
- Connect to 100+ data sources
- Shape, clean, and combine data before loading to the model
- Apply steps recorded in the Applied Steps pane
- Enable query folding — translating M steps to native source queries (SQL, etc.)
// Example: filter and rename in M
let
Source = Sql.Database("server", "db"),
Sales = Source{[Schema="dbo",Item="Sales"]}[Data],
Filtered = Table.SelectRows(Sales, each [Status] = "Completed"),
Renamed = Table.RenameColumns(Filtered, {{"Amt", "Amount"}})
in
Renamed
4. What is the difference between a measure and a calculated column?
| Feature | Measure | Calculated Column |
|---|---|---|
| Evaluated | At query time (dynamically) | At refresh time (statically) |
| Stored | Not stored; computed on the fly | Stored in the model (uses RAM) |
| Context | Uses filter context from visuals | Row context within the table |
| Use case | Aggregations, KPIs, % calculations | Row-level categorisation, flags, lookups |
| Syntax example | Total Sales = SUM(Sales[Amount]) |
Margin % = Sales[Profit] / Sales[Revenue] |
Best practice: prefer measures for aggregations; use calculated columns only when you need the value as a filter, slicer, or axis.
5. What are the Power BI licence types?
| Licence | Cost | Key capabilities |
|---|---|---|
| Power BI Free | Free | Desktop only; cannot publish to Service (shared capacity) |
| Power BI Pro | ~$10/user/mo | Publish, share, and collaborate in Service |
| Power BI Premium Per User (PPU) | ~$20/user/mo | Premium features (large models, paginated reports, AI) per user |
| Power BI Premium Capacity (P SKUs) | From ~$4,995/mo | Dedicated capacity; Pro users can share with Free users |
| Fabric (F SKUs) | Fabric capacity | Unified analytics + Power BI in Microsoft Fabric |
Data Modeling
6. What is a star schema and why is it preferred in Power BI?
A star schema has:
- One or more fact tables (numeric measures + foreign keys) at the centre
- Dimension tables (descriptive attributes) surrounding the fact
DimDate ──┐
DimProduct─┤
DimStore ──┤──── FactSales
DimCustomer┘
Why preferred:
- Simple, predictable relationships — easier DAX
- Vertipaq compression works best on dimension columns (low cardinality)
- Cross-filtering directions work naturally
- Avoids many-to-many complexity
Avoid snowflake schemas (normalised dimensions) unless necessary — they add join complexity and hurt performance.
7. What are the types of relationships in Power BI?
| Property | Options |
|---|---|
| Cardinality | One-to-many (most common), One-to-one, Many-to-many |
| Cross-filter direction | Single (one-way), Both (bidirectional) |
| Active vs inactive | Only one active relationship between two tables; extras are inactive |
Many-to-many relationships (Power BI handles natively since 2018):
- Supported without a bridge table
- Beware of ambiguous filter propagation and performance
Inactive relationships: activated in DAX using USERELATIONSHIP():
Sales by Ship Date =
CALCULATE(
[Total Sales],
USERELATIONSHIP(FactSales[ShipDate], DimDate[Date])
)
8. What is the difference between fact tables and dimension tables?
| Aspect | Fact Table | Dimension Table |
|---|---|---|
| Content | Quantitative metrics + FK references | Descriptive attributes |
| Row count | High (millions of rows) | Low (thousands of rows) |
| Cardinality | High | Low |
| Examples | FactSales, FactOrders | DimDate, DimProduct, DimCustomer |
| Primary key | Composite (multiple FKs) or surrogate | Surrogate key |
| Compression | Moderate | Excellent |
9. What is cardinality and why does it matter?
Cardinality describes the uniqueness of values in a column used to join two tables:
| Type | Meaning | Example |
|---|---|---|
| One-to-many | One unique key in dimension → many rows in fact | DimProduct.ProductID → FactSales.ProductID |
| One-to-one | Unique values on both sides | DimEmployee.ID → DimEmployeeContact.ID |
| Many-to-many | Duplicate values on both sides | Multiple products in a bundle |
Low-cardinality columns compress better (Vertipaq uses dictionary encoding). High-cardinality columns in fact tables (e.g., GUIDs) hurt memory usage — replace with integer surrogate keys.
10. What is the role of the Date table in Power BI?
A Date (calendar) dimension is required for time intelligence DAX functions.
Requirements:
- One row per date, no gaps
- At minimum a
Datecolumn of type Date - Marked as a Date Table (
Table tools → Mark as date table)
Best practice — create in Power Query or DAX:
DimDate =
ADDCOLUMNS(
CALENDAR(DATE(2020,1,1), DATE(2030,12,31)),
"Year", YEAR([Date]),
"Quarter", "Q" & FORMAT([Date], "Q"),
"Month", FORMAT([Date], "MMMM"),
"MonthNo", MONTH([Date]),
"Week", WEEKNUM([Date]),
"Weekday", FORMAT([Date], "dddd"),
"IsWeekend", WEEKDAY([Date],2) >= 6
)
DAX
11. What is CALCULATE and why is it the most important DAX function?
CALCULATE evaluates an expression in a modified filter context:
CALCULATE(<expression>, <filter1>, <filter2>, ...)
It:
- Takes the current filter context
- Removes filters on columns specified by filter arguments
- Adds/replaces with the new filters
- Evaluates the expression
-- Sales for the "North" region only, regardless of slicer
North Sales = CALCULATE([Total Sales], DimRegion[Region] = "North")
-- Sales YTD
Sales YTD = CALCULATE([Total Sales], DATESYTD(DimDate[Date]))
-- Remove all filters on Product
All Product Sales = CALCULATE([Total Sales], ALL(DimProduct))
Without CALCULATE, you cannot modify filter context inside a measure.
12. What is the difference between filter context and row context?
| Context | Where | What it does |
|---|---|---|
| Filter context | Visuals, slicers, report filters, CALCULATE | Restricts which rows are visible for aggregation |
| Row context | Calculated columns, iterator functions (SUMX, FILTER) | Provides access to values in the current row |
Context transition: when CALCULATE is used inside a calculated column or iterator, it converts the row context into a filter context — all unique row values become filters.
-- Row context: iterates each row
Revenue Per Unit = SUMX(Sales, Sales[Qty] * Sales[UnitPrice])
-- Filter context: slicer/page filter limits which rows SUMX iterates
13. What are the most important DAX functions?
| Category | Functions |
|---|---|
| Aggregation | SUM, AVERAGE, COUNT, COUNTROWS, MIN, MAX, DISTINCTCOUNT |
| Iterator | SUMX, AVERAGEX, COUNTX, MAXX, MINX, RANKX |
| Filter | CALCULATE, FILTER, ALL, ALLEXCEPT, ALLSELECTED, KEEPFILTERS |
| Relationship | RELATED, RELATEDTABLE, USERELATIONSHIP, CROSSFILTER |
| Time intelligence | DATESYTD, DATESQTD, DATESMTD, SAMEPERIODLASTYEAR, DATEADD, DATESBETWEEN |
| Table | ADDCOLUMNS, SUMMARIZE, SELECTCOLUMNS, UNION, INTERSECT, EXCEPT, TOPN |
| Logical | IF, SWITCH, IFERROR, ISBLANK, COALESCE |
| Text | CONCATENATE, FORMAT, LEFT, RIGHT, MID, LEN, TRIM, SUBSTITUTE |
| Math | DIVIDE (safe division), ABS, ROUND, ROUNDUP, MOD |
| Statistical | MEDIAN, PERCENTILE.INC, VAR.S, STDEV.S |
14. What is the difference between ALL, ALLEXCEPT, and ALLSELECTED?
| Function | Removes | Keeps | Use case |
|---|---|---|---|
ALL(Table) |
All filters on the table | Nothing | Calculate % of grand total |
ALL(Table[Col]) |
Filters on one column | Other column filters | % of category total |
ALLEXCEPT(Table, Col) |
All filters except specified column | Specified column filter | Running total within a group |
ALLSELECTED(Table) |
Context from outer CALCULATE | Filters from slicers/visuals | % of selected total |
-- % of Grand Total
Sales % of Total =
DIVIDE(
[Total Sales],
CALCULATE([Total Sales], ALL(FactSales))
)
-- % of Category (Product Category slicer still filters)
Sales % of Category =
DIVIDE(
[Total Sales],
CALCULATE([Total Sales], ALL(DimProduct[Product]))
)
15. How do you write common time intelligence measures?
Requires a marked Date table with continuous dates.
-- Year-to-Date
Sales YTD = CALCULATE([Total Sales], DATESYTD(DimDate[Date]))
-- Same Period Last Year
Sales SPLY = CALCULATE([Total Sales], SAMEPERIODLASTYEAR(DimDate[Date]))
-- Year-over-Year %
YoY % =
DIVIDE(
[Total Sales] - [Sales SPLY],
[Sales SPLY]
)
-- Last 12 months rolling
Sales L12M =
CALCULATE(
[Total Sales],
DATESINPERIOD(DimDate[Date], LASTDATE(DimDate[Date]), -12, MONTH)
)
-- Month-to-Date
Sales MTD = CALCULATE([Total Sales], DATESMTD(DimDate[Date]))
16. What is RANKX and how do you use it?
RANKX ranks a table expression based on a value:
RANKX(<table>, <expression>, [<value>], [<order>], [<ties>])
-- Rank products by sales (highest = 1)
Product Rank =
RANKX(
ALL(DimProduct[ProductName]),
[Total Sales],
,
DESC,
Dense
)
| Ties parameter | Behaviour |
|---|---|
Skip (default) |
1, 2, 2, 4 |
Dense |
1, 2, 2, 3 |
17. What is DIVIDE and why use it instead of the / operator?
DIVIDE(numerator, denominator, [alternateResult]) safely handles division by zero:
-- BAD: returns error if denominator = 0
Margin % = [Profit] / [Revenue]
-- GOOD: returns 0 (or BLANK) if denominator = 0
Margin % = DIVIDE([Profit], [Revenue], 0)
The optional third argument sets the fallback value (default is BLANK()).
18. What are variables in DAX and why should you use them?
Variables (VAR ... RETURN) improve readability and prevent double evaluation:
-- Without variables: [Total Sales] evaluated twice
GP % = DIVIDE([Gross Profit], [Total Sales])
-- With variables: evaluated once
GP % =
VAR TotalSales = [Total Sales]
VAR GrossProfit = [Gross Profit]
RETURN
DIVIDE(GrossProfit, TotalSales)
Benefits:
- Single evaluation → better performance
- Easier to read and debug
- Can hold table expressions:
VAR TopProducts = TOPN(10, DimProduct, [Sales])
Power Query
19. What is query folding and why does it matter?
Query folding is when Power Query translates M transformations into native source queries (SQL, OData, etc.) executed at the source rather than in Power BI.
Why it matters:
- Faster refresh (source DB does heavy lifting)
- Only needed data transferred over the network
- Required for incremental refresh
How to check: right-click a step → if "View Native Query" is enabled, that step folds.
Steps that break folding (must come after folding steps):
- Adding a custom column with complex M
- Merging with a non-foldable source
Table.Buffer()
20. What are the common data transformation steps in Power Query?
| Transformation | M function | GUI action |
|---|---|---|
| Filter rows | Table.SelectRows |
Filter arrows |
| Remove columns | Table.RemoveColumns |
Select → Remove |
| Rename columns | Table.RenameColumns |
Double-click header |
| Change type | Table.TransformColumnTypes |
Data type dropdown |
| Split column | Table.SplitColumn |
Split by delimiter |
| Merge queries | Table.NestedJoin |
Home → Merge Queries |
| Append queries | Table.Combine |
Home → Append Queries |
| Group by | Table.Group |
Transform → Group By |
| Pivot / Unpivot | Table.Pivot / Table.Unpivot |
Transform menu |
| Add custom column | Table.AddColumn |
Add Column → Custom Column |
21. What is the difference between Merge and Append in Power Query?
| Operation | SQL equivalent | Result |
|---|---|---|
| Merge (Join) | JOIN | Combines columns from two tables matching on a key |
| Append | UNION ALL | Stacks rows from multiple tables with the same columns |
Merge join types:
| Join type | Returns |
|---|---|
| Left Outer | All rows from left + matching from right |
| Right Outer | All rows from right + matching from left |
| Full Outer | All rows from both |
| Inner | Only matching rows |
| Left Anti | Rows in left NOT in right |
| Right Anti | Rows in right NOT in left |
22. How do you handle errors in Power Query?
// Replace errors with null
Table.TransformColumns(Source, {{"Amount", each try _ otherwise null}})
// Remove error rows
Table.RemoveRowsWithErrors(Source, {"Amount"})
// Replace errors in specific column with value
Table.ReplaceErrorValues(Source, {{"Amount", 0}})
Using the GUI: Transform → Replace Errors.
Visualisations
23. What types of visuals are available in Power BI and when should you use them?
| Visual | Best for |
|---|---|
| Bar / Column chart | Comparing categories |
| Line chart | Trends over time |
| Scatter chart | Correlation between two measures |
| Pie / Donut | Part-to-whole (max 5 slices) |
| Map / Filled map | Geographic distribution |
| Card / Multi-row card | Single KPI values |
| Table / Matrix | Detailed tabular data / cross-tab |
| Waterfall | Cumulative effect of positive/negative changes |
| Funnel | Sequential stage drop-off |
| Gauge | Progress toward a target |
| KPI | Status vs target with trend |
| Treemap | Hierarchical part-to-whole |
| Ribbon chart | Rank changes over time |
| Decomposition tree | Root cause analysis |
| Key influencers | AI-powered factor analysis |
| Q&A | Natural language queries |
24. What is cross-filtering and cross-highlighting in Power BI?
| Behaviour | What happens |
|---|---|
| Cross-filtering | Selecting a data point filters other visuals to show only related data (rows excluded) |
| Cross-highlighting | Selected data highlighted; unselected data shown dimmed (not removed) |
Control:
- Edit interactions button (Format tab) → change each visual's response (Filter / Highlight / None)
- Relationships with bidirectional cross-filter propagate filters in both directions
25. What is a slicer and how does it differ from a report-level filter?
| Feature | Slicer | Report filter |
|---|---|---|
| Visibility | Visible on the canvas | In the Filters pane (can be hidden) |
| User access | Always accessible | Can be locked or hidden |
| Scope | Page-level by default; can sync across pages | Page / report / visual level |
| Slicer sync | Yes (via View → Sync Slicers) | N/A |
Slicer types: List, Dropdown, Between (numeric/date), Relative date, Hierarchy.
Filters & Context
26. What are the types of filters in Power BI and their order of precedence?
Filters are evaluated in this order (highest precedence first):
- Visual-level filters — apply only to one visual
- Page-level filters — apply to all visuals on a page
- Report-level filters — apply to all pages
- Cross-filter / cross-highlight from other visuals
- Drillthrough filters — from the source page when drilling through
- Row-level security — applied at the model level (cannot be overridden by users)
27. What is the difference between FILTER and CALCULATE with a filter argument?
-- Using FILTER: iterates table, returns filtered table
CALCULATE([Total Sales], FILTER(FactSales, FactSales[Amount] > 1000))
-- Using column filter: more efficient (no table scan)
CALCULATE([Total Sales], FactSales[Amount] > 1000)
Rule: prefer direct column filters in CALCULATE for performance. Use FILTER when you need to iterate with a row context (e.g., comparing two columns).
Row-Level Security
28. What is Row-Level Security (RLS) in Power BI?
RLS restricts which rows a user can see in a dataset, based on their identity.
Types:
| Type | How it works |
|---|---|
| Static RLS | Hardcoded filter: [Region] = "North" |
| Dynamic RLS | Uses USERPRINCIPALNAME() or USERNAME() to match user to data |
29. How do you implement dynamic RLS?
Setup:
- Create a security mapping table (e.g.,
UserRegion[Email],UserRegion[Region]) - Create a role with DAX filter on the dimension:
-- On DimRegion table
[Region] =
LOOKUPVALUE(
UserRegion[Region],
UserRegion[Email], USERPRINCIPALNAME()
)
- Publish to Power BI Service → manage role memberships
- Test with "View as" in Desktop or "Test as role" in Service
USERPRINCIPALNAME() returns the logged-in user's UPN (e.g., jane@company.com) — works in Power BI Service. In Desktop, it returns the Windows login.
30. How do you test RLS without sharing access to other users?
In Power BI Desktop: Modeling tab → View as → select a role → enter a test username.
In Power BI Service: Dataset settings → Security → select a role → Test as role.
This lets you validate filter logic before publishing to end users.
Power BI Service
31. What is a workspace in Power BI Service?
A workspace is a collaborative container for dashboards, reports, datasets, and dataflows.
| Type | Features |
|---|---|
| My Workspace | Personal; cannot be shared with others |
| Shared workspace | Collaborative; assign roles (Admin/Member/Contributor/Viewer) |
| Premium workspace | Large models, incremental refresh, paginated reports, deployment pipelines |
Workspace roles:
| Role | Capabilities |
|---|---|
| Admin | Manage workspace, publish, delete content and members |
| Member | Publish, share, manage content |
| Contributor | Create and edit content; cannot publish apps |
| Viewer | Read-only access |
32. What is the difference between a report and a dashboard in Power BI Service?
| Feature | Report | Dashboard |
|---|---|---|
| Source | Single dataset (or multi-source composite) | Pins from multiple reports/datasets |
| Pages | Multiple pages supported | Single page (canvas) |
| Interactivity | Full cross-filter, drill, slicers | Limited (click → link to report) |
| Refresh | Dataset refresh | Reflects source report |
| Alerts | No | Yes (on card/gauge/KPI tiles) |
| Subscribe | Yes | Yes |
33. What is a Power BI app and how is it different from a workspace?
| Feature | Workspace | App |
|---|---|---|
| Purpose | Development/collaboration area | Curated read-only distribution package |
| Audience | Team members (with roles) | Broad audience (consumers) |
| Navigation | Flat list | Custom nav with sections |
| Access | Via roles | Published to users/groups |
Flow: Build in workspace → Publish App → consumers access via apps portal.
34. What is a Power BI dataset and what is a shared dataset?
A dataset is the data model (tables, relationships, measures) that powers reports.
A shared dataset (now called a semantic model) is a published dataset that multiple reports across different workspaces can connect to — enabling a single source of truth:
Shared semantic model
├── Report A (Finance team)
├── Report B (Marketing team)
└── Report C (Operations team)
Benefits: consistent KPI definitions, centralised refresh, governed metrics.
35. What is an On-premises Data Gateway?
The gateway bridges Power BI Service (cloud) with on-premises data sources (SQL Server, Oracle, file shares, etc.) or VNet-secured sources.
| Gateway type | Use case |
|---|---|
| Standard (Enterprise) | Multiple users, scheduled refresh, live DirectQuery |
| Personal | Single user, scheduled refresh only; no live connections |
How it works: Gateway polls the Service for pending refresh requests → queries on-prem source → returns results to Service (no inbound firewall ports needed).
Performance
36. How do you optimise Power BI report performance?
Data model:
- Use star schema — avoid many-to-many and bidirectional relationships where possible
- Remove unnecessary columns and tables from the model
- Use integer surrogate keys instead of string keys in fact tables
- Avoid high-cardinality columns (GUIDs, free-text) in fact tables
- Use aggregation tables for large datasets
DAX:
- Prefer
CALCULATEcolumn filters overFILTER(ALL(...), ...)table scans - Use
DIVIDEinstead of/ - Declare
VARto avoid re-evaluation - Avoid
COUNTROWS(FILTER(...))— useCALCULATE(COUNTROWS(...), filter)instead
Visuals:
- Limit visuals per page (aim < 20)
- Avoid bidirectional cross-filtering unnecessarily
- Use page-level caching (Auto in report settings)
Tools: Performance Analyzer (View tab) shows DAX query, visual display, and other times for each visual.
37. What is the Vertipaq engine?
Vertipaq (also called the xVelocity or VertiPaq engine) is Power BI's in-memory columnar storage engine (same as SSAS Tabular).
Key characteristics:
- Stores data column-by-column (not row-by-row)
- Dictionary encoding: replaces repeated values with integer references → very high compression for low-cardinality columns
- Run-length encoding: compresses consecutive identical values
- Value encoding: for numeric columns
This is why a star schema with low-cardinality dimension columns compresses so well.
38. What are aggregations in Power BI?
Aggregations are pre-computed summary tables that sit alongside the detail table. Power BI automatically routes queries to the aggregation when possible — falling back to detail only when needed.
FactSales (millions of rows) ← detail
AggSales_Monthly (hundreds of rows) ← aggregation
Query: "Sales by Month" → hits AggSales_Monthly (fast)
Query: "Sales by CustomerID" → hits FactSales (slower)
Configured via: Manage aggregations button on an Import table in a composite model.
Advanced Topics
39. What is a composite model?
A composite model allows a single Power BI report to use both Import and DirectQuery (or Live Connection) tables.
Use cases:
- Import small dimension tables for speed, DirectQuery large fact tables for freshness
- Connect to a shared semantic model and add local Import tables
Requires Power BI Desktop (no licence restriction for building; consumption may require PPU/Premium for complex scenarios).
40. What is incremental refresh and how do you configure it?
Incremental refresh only processes new/changed data instead of the full dataset on every refresh.
Configuration:
- Create two Power Query parameters:
RangeStartandRangeEnd(Date/Time type) - Filter your date column:
[Date] >= RangeStart and [Date] < RangeEnd - In Desktop: Table → Incremental refresh → set historical and refresh ranges
- Publish to Power BI Service (Premium/PPU workspace)
// Power Query filter using parameters
Table.SelectRows(Source, each [OrderDate] >= RangeStart and [OrderDate] < RangeEnd)
Benefits: dramatically faster refresh, supports large historical datasets.
41. What are deployment pipelines in Power BI?
Deployment pipelines (Premium feature) enable a DevOps-style workflow:
Development workspace → Test workspace → Production workspace
- Deploy content between stages with one click
- Rules engine allows overriding data source connections per stage
- Supports rollback to previous version
- Can be automated via REST API
42. What is a dataflow in Power BI?
A dataflow is a self-service ETL layer in Power BI Service using Power Query Online, storing results in Azure Data Lake Gen2.
Benefits:
- Reusable data preparation across multiple datasets
- Computed entities (transform dataflow output in another dataflow)
- Decouples ETL from reporting
- Can be refreshed independently of datasets
Source system → Dataflow (Power Query Online) → Dataset → Report
43. What is the difference between a Power BI dataflow and a dataset?
| Feature | Dataflow | Dataset |
|---|---|---|
| Storage | Azure Data Lake Gen2 (CDM) | Vertipaq in-memory model |
| Purpose | ETL / data preparation | Data model for reporting |
| Output | Tables stored as parquet files | Measures, relationships, calculated columns |
| Reuse | Across multiple datasets | Shared semantic model |
| Compute | Power Query Online (M) | DAX engine |
44. What are parameters in Power BI and how are they used?
Parameters are named, typed values used in Power Query (M) to make queries dynamic:
| Use case | Example |
|---|---|
| Filter date range | RangeStart / RangeEnd for incremental refresh |
| Switch data source | Change server name without editing each query |
| User-selectable options | What-if parameter as a DAX slicer |
What-If parameters create a slicer that generates a DAX measure:
-- Auto-generated by What-If
Discount Rate Value = SELECTEDVALUE('Discount Rate'[Discount Rate], 0.1)
-- Use in a measure:
Discounted Revenue = [Total Revenue] * (1 - [Discount Rate Value])
45. What is the XMLA endpoint and when would you use it?
The XMLA endpoint exposes the Power BI semantic model using the Analysis Services protocol, allowing external tools to connect:
| Tool | Use case |
|---|---|
| SQL Server Management Studio (SSMS) | Browse model, run DMV queries |
| Tabular Editor | Build and deploy models programmatically |
| DAX Studio | Write and optimise DAX queries |
| Azure Analysis Services | Migrate to/from AAS |
Available in Power BI Premium / PPU workspaces. Enables ALM (Application Lifecycle Management) for enterprise deployments.
46. What is DAX Studio and how is it used?
DAX Studio is a free tool for writing, executing, and optimising DAX queries against a Power BI model.
Key features:
- Run DAX
EVALUATEqueries and see results - Server Timings: see storage engine vs formula engine query time
- Query Plan: analyse DAX logical and physical query plans
- All Measures: dump all measures to debug
- Connect to Desktop, Power BI Service (XMLA), or SSAS
-- Example: check all products with sales > 10,000
EVALUATE
FILTER(
ADDCOLUMNS(
VALUES(DimProduct[ProductName]),
"Sales", [Total Sales]
),
[Sales] > 10000
)
ORDER BY [Sales] DESC
Scenarios & Best Practices
47. How would you implement a "selected measure" slicer (dynamic measure switching)?
Use a disconnected table with measure names and SWITCH in a calculation:
-- Disconnected table: MeasureSelector[Metric] = {Sales, Profit, Units}
Selected Metric =
SWITCH(
SELECTEDVALUE(MeasureSelector[Metric]),
"Sales", [Total Sales],
"Profit", [Total Profit],
"Units", [Total Units],
[Total Sales] -- default
)
This lets users pick which KPI to display without changing the report layout.
48. How do you show "No data" rows in Power BI?
By default, Power BI hides rows with no data. To show them:
- Visual: Format → Show items with no data on the axis field
- DAX: use
CROSSJOINorALLNOBLANKROWto force all dimension values - Relationship: ensure the dimension table has rows for all expected values
49. What is the difference between BLANK() and 0 in DAX?
| Behaviour | BLANK() |
0 |
|---|---|---|
| Arithmetic | BLANK() + 5 = 5 |
0 + 5 = 5 |
| Comparison | BLANK() = 0 is TRUE |
0 is 0 |
| Visual display | Hidden in most charts/tables | Shown as 0 |
| Division | DIVIDE(0, BLANK()) = BLANK() |
DIVIDE(0, 0) = BLANK() |
Best practice: return BLANK() from measures when there is no meaningful value so visuals hide those data points rather than showing misleading zeros.
50. How do you secure and govern Power BI content at enterprise scale?
| Governance area | Tool / Approach |
|---|---|
| Data access | RLS + object-level security (OLS) |
| Workspace management | Naming conventions, defined workspace admins, Premium for prod |
| Deployment | Deployment pipelines (Dev → Test → Prod) |
| Shared models | Certified/promoted shared semantic models as single source of truth |
| Audit | Power BI activity log + Microsoft 365 audit log |
| Sensitivity labels | Microsoft Purview (MIP) labels on datasets and reports |
| API governance | Power BI REST API + service principal for automation |
| Metric definitions | Metrics hub / certified measures in shared model |
Anti-patterns to avoid
| Anti-pattern | Problem | Fix |
|---|---|---|
Using COUNTROWS(FILTER(...)) |
Full table scan per row | CALCULATE(COUNTROWS(...), filter) |
| Calculated columns for aggregations | Stored in memory, evaluated at refresh | Use measures instead |
| Bidirectional relationships everywhere | Ambiguous filter paths, performance | Use only when required; prefer single direction |
| Snowflake schema | Complex joins, poor compression | Flatten to star schema |
Using ALL() without understanding scope |
Removes expected filters | Use ALLSELECTED() or ALLEXCEPT() as appropriate |
| Not marking the date table | Time intelligence functions fail or are inaccurate | Always mark the date table |
| Too many visuals per page | Slow render time | Max ~10-15 visuals per page |
| Importing entire tables | Bloats model with unused columns | Select only needed columns in Power Query |
Power BI vs Tableau vs Looker vs Qlik
| Feature | Power BI | Tableau | Looker | Qlik Sense |
|---|---|---|---|---|
| Price (Pro) | ~$10/user/mo | ~$75/user/mo | Varies (GCP) | ~$30/user/mo |
| Best BI language | DAX | Tableau Calc / LOD | LookML | Qlik scripting |
| Integration | Microsoft 365 / Azure | Salesforce / Slack | Google Cloud | Qlik ecosystem |
| Ease of use | High (familiar Excel UX) | High (drag-and-drop) | Moderate (code-first) | Moderate |
| Self-service | Very high | High | Moderate | High |
| Enterprise governance | Strong (PPU/Premium) | Strong | Very strong (semantic layer) | Strong |
| Market share | Leader (#1 by users) | Leader | Growing | Established |
Common mistakes
| Mistake | Impact | Fix |
|---|---|---|
| Building reports before the data model | Rework-heavy | Model first, then report |
| Ignoring the date table | Time intelligence breaks | Always create and mark a date table |
| Using many-to-many relationships unnecessarily | Ambiguous results | Redesign to one-to-many with a bridge table |
| Hardcoding filter values in DAX | Reports break on data change | Use dimension table values |
| Sharing raw Power BI Desktop files | No access control | Always publish to Service and manage via workspaces |
| Not using variables in complex measures | Double calculation, hard to debug | Use VAR ... RETURN |
| Putting all content in one workspace | Governance nightmare | Separate development, testing, production workspaces |
| Enabling all cross-filter directions | Ambiguous filter paths | Use bidirectional only when required |
6 frequently asked questions
Q: What is the difference between Power BI Pro and Power BI Premium? Pro ($10/user/mo) lets users publish, share, and collaborate — but every consumer needs a Pro licence. Premium ($4,995+/mo for capacity, or $20/user/mo PPU) provides dedicated compute, larger models, incremental refresh, paginated reports, deployment pipelines, and free consumption for users with Free licences.
Q: Can Power BI connect to real-time streaming data? Yes. Power BI supports streaming datasets via REST API, Azure Stream Analytics, or PubNub — enabling dashboards that update in near real-time without scheduled refresh. For operational BI, DirectQuery or composite models are more common.
Q: What is the difference between a Power BI report and a paginated report? Standard Power BI reports are interactive (slicers, drill-through) and optimised for exploration. Paginated reports (built in Power BI Report Builder, based on SSRS) are pixel-perfect, page-by-page documents optimised for printing and regulated outputs like invoices and statements. Paginated reports require Premium/PPU.
Q: How does Power BI handle large datasets? Options: DirectQuery (query at source), incremental refresh (only process new data), aggregation tables (pre-aggregate for fast queries), large dataset storage format (Premium — removes 1 GB model limit), and composite models (mix import and DirectQuery).
Q: What is Copilot in Power BI? Microsoft Copilot (GA 2024) integrates generative AI into Power BI. In Desktop/Service, Copilot can: generate report pages from a prompt, suggest DAX measures, summarise visual insights in natural language, and answer questions about the report. Requires Premium Per User or Premium capacity with Fabric enabled.
Q: What is the recommended way to deploy Power BI to production? Use deployment pipelines: maintain three workspaces (Dev/Test/Prod), deploy via the pipeline UI or REST API, use deployment rules to override data source connections per environment, track changes with version history, and gate promotion with approvals.