Toolmingo
Guides26 min read

50 Power BI Interview Questions (With Answers)

Top Power BI interview questions with clear answers — covering DAX, Power Query, data modeling, RLS, Power BI Service, and advanced topics for developer and analyst interviews.

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:

  1. Simple, predictable relationships — easier DAX
  2. Vertipaq compression works best on dimension columns (low cardinality)
  3. Cross-filtering directions work naturally
  4. 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 Date column 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:

  1. Takes the current filter context
  2. Removes filters on columns specified by filter arguments
  3. Adds/replaces with the new filters
  4. 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):

  1. Visual-level filters — apply only to one visual
  2. Page-level filters — apply to all visuals on a page
  3. Report-level filters — apply to all pages
  4. Cross-filter / cross-highlight from other visuals
  5. Drillthrough filters — from the source page when drilling through
  6. 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:

  1. Create a security mapping table (e.g., UserRegion[Email], UserRegion[Region])
  2. Create a role with DAX filter on the dimension:
-- On DimRegion table
[Region] =
LOOKUPVALUE(
    UserRegion[Region],
    UserRegion[Email], USERPRINCIPALNAME()
)
  1. Publish to Power BI Service → manage role memberships
  2. 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 CALCULATE column filters over FILTER(ALL(...), ...) table scans
  • Use DIVIDE instead of /
  • Declare VAR to avoid re-evaluation
  • Avoid COUNTROWS(FILTER(...)) — use CALCULATE(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:

  1. Create two Power Query parameters: RangeStart and RangeEnd (Date/Time type)
  2. Filter your date column: [Date] >= RangeStart and [Date] < RangeEnd
  3. In Desktop: Table → Incremental refresh → set historical and refresh ranges
  4. 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 EVALUATE queries 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:

  1. Visual: Format → Show items with no data on the axis field
  2. DAX: use CROSSJOIN or ALLNOBLANKROW to force all dimension values
  3. 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.

Related tools

Keep reading

All Toolmingotools are free & run in your browser

No sign-up, no upload, no watermark. Your files never leave your device.

Browse all tools