Power BI in Azure: From Raw Data to Trusted Decisions at Enterprise Scale
A complete, plain-English guide to how Power BI runs on Azure and connects to Azure data: building blocks, storage modes, modeling, gateways, refresh, capacities and licensing, security, private networking, governance, deployment, performance, embedding, monitoring and cost.
Imagine the owner of a large restaurant chain. Every night, hundreds of cash registers, supplier invoices, delivery apps and staff schedules produce a mountain of numbers. The owner does not want the mountain. She wants a single clear page that says: “Which branches sold less than expected this week, why, and what should I do about it?” Someone has to gather all those numbers, clean them, connect them, calculate the meaningful figures, and then draw them as charts that anyone can understand at a glance, while making sure that each branch manager sees only their own branch. That whole chain, from messy numbers to trusted pictures, is what Power BI is built to deliver.
This guide assumes you know nothing about it. Each new term is explained when it first appears, with an everyday comparison. We start with what Power BI is and how it relates to Azure, then move through data connections, modeling, refresh, capacity, security, networking, governance, deployment, performance and cost. Microsoft’s analytics products, licensing and names have changed noticeably in recent years, especially with the arrival of Microsoft Fabric, so wherever details may have moved, we point it out and recommend checking the current official documentation.
1What Power BI Is and Why It Matters
Power BI turns data into visuals, insights and shared understanding.
Business intelligence in plain words
Business intelligence, or BI, is the practice of collecting data from many places and presenting it so that people can make better decisions. Power BI is Microsoft’s BI product. You connect it to data sources, shape and combine the data, build a model with calculations, and create reports with charts, tables and maps. You then publish those reports to a cloud service where colleagues can view them in a browser, in a mobile app, inside Microsoft Teams, or embedded in other applications.
It is popular because it serves several kinds of people at once. Business users explore reports with a few clicks. Analysts build reports and models with a desktop tool. Data engineers prepare the data underneath. Administrators control who sees what. Developers embed analytics inside their own applications. All of them share one platform.
Think of a newspaper. Reporters gather facts, editors verify and shape them, designers lay out the pages, and the printing and delivery system gets the paper to every reader on time. Power BI is that newspaper for your data, with data engineers as reporters, analysts as editors and designers, and the Azure-hosted service as the printing and delivery operation.
Why “in Azure”
The Power BI service is a cloud service that runs on Microsoft Azure infrastructure. Your organization’s tenant, which is its private space in Microsoft’s cloud, has a home region where the service stores your content. Power BI also works closely with many Azure data services such as Azure SQL Database, Azure Synapse Analytics, Azure Data Lake Storage, Azure Databricks and Azure Cosmos DB, and relies on Microsoft Entra ID, Azure’s identity service, for sign-in and permissions. So when people say “Power BI in Azure”, they usually mean three things together: the Power BI service hosted on Azure, the Azure data sources it reads, and the Azure features it uses for security, networking and operations.
A good dashboard is the last ten percent of a BI project. The first ninety percent is trustworthy data, a clean model and sensible security. This guide spends most of its time on that ninety percent.
2Power BI and Microsoft Fabric: The Current Landscape
Power BI is now part of a larger analytics platform, and this changes licensing and features.
Microsoft Fabric is a unified analytics platform that brings together data engineering, data warehousing, real-time analytics, data science and Power BI under one roof, with a shared storage layer called OneLake. Power BI is one of the experiences inside Fabric. Many capabilities that once required separate Azure services can now be done in Fabric, and some Power BI licensing has moved toward Fabric capacity-based models.
OneLake
A single logical data lake for the whole organization, in which Fabric items store data in open formats, so that different engines can use the same data without copying.
Capacity
A pool of compute that you buy. All Fabric experiences, including Power BI refreshes and queries, consume that shared pool.
Direct Lake
A newer storage mode that lets Power BI read data directly from lake files in OneLake at high speed, without a full import copy.
Workloads in one place
Engineers, analysts and data scientists can work on the same data and the same workspace, with shared security and governance.
Product names, license types, capacity tiers, feature availability and purchase options have been changing, including the shift from older premium capacities to Fabric capacities. Before you design or budget, confirm the current licensing model and feature list on Microsoft’s official pages. The concepts in this guide remain valid, but the labels and prices may have changed.
Two ways to run a modern solution
Organizations take one of two broad paths. In the first, they keep using separate Azure data services such as Synapse or Databricks for preparation, and use Power BI mainly for the reporting layer. In the second, they adopt Fabric more broadly so that data preparation, storage and reporting all live in one integrated platform. Both paths are legitimate. Many organizations mix them during a gradual transition.
The first path is like running a kitchen with specialist suppliers delivering ingredients to your restaurant. The second is like an integrated food hall where the farm, the kitchen and the dining room share one building. The food hall is convenient, but not every restaurant needs to move in at once.
3The Building Blocks of Power BI
A handful of objects appear in every Power BI solution.
Workspace
A shared container in the service where related content lives and where teams collaborate. Access roles are granted at the workspace level.
Semantic model
The data model: tables, relationships and calculations that reports use. Previously called a dataset. It is the heart of any solution.
Report
One or more pages of visuals such as charts, tables and maps built on a semantic model, with interactive filtering.
Dashboard
A single page of pinned tiles drawn from one or more reports, giving a quick overview. Different from a report, which has multiple pages and richer interaction.
Dataflow
Reusable data preparation logic that runs in the cloud and stores cleaned tables for several models to share.
App
A packaged, curated collection of reports and dashboards published to a wider audience in a controlled way.
Paginated report
A pixel-precise, printable report such as an invoice or statement, suited to long tables across many pages.
Gateway
A bridge that lets the cloud service reach data sources inside private networks or on-premises.
flowchart LR
A["Data sources"] --> B["Dataflow or data preparation"]
B --> C["Semantic model"]
C --> D["Reports"]
D --> E["Dashboards"]
D --> F["App for wide audience"]
C --> G["Other reports using the same model"]
The semantic model is the kitchen’s prepared ingredient stock, the reports are the plated dishes, the dashboard is the daily specials board, and the app is the printed menu given to guests. One stock can serve many dishes, which is exactly why a well-built model is so valuable.
Separate the model from the reports. Build one trusted semantic model, and let many reports connect to it. Copying a model into every report creates duplicate numbers and endless arguments about whose figure is right.
4The Tools: Desktop, Service, Mobile and More
Different tools serve different parts of the journey.
| Tool | Where it runs | Main purpose |
|---|---|---|
| Power BI Desktop | Windows application on the author’s computer | Connect to data, shape it, build the model and design reports |
| Power BI service | Cloud, in a web browser | Publish, share, schedule refresh, manage access, collaborate and light editing |
| Power BI mobile apps | Phones and tablets | Viewing reports and dashboards on the go, with alerts |
| Report Builder | Windows application | Authoring paginated reports |
| Power BI Report Server | On-premises server | Hosting reports inside your own data center when the cloud is not allowed |
| Embedded analytics | Inside your own applications | Giving customers or employees analytics within an application they already use |
Languages inside the tools
Two languages power most of the work. Power Query, with its formula language called M, is used to connect to data and shape it: removing columns, merging tables, changing data types, and unpivoting. DAX, short for Data Analysis Expressions, is used to create calculations in the model: totals, ratios, running totals, year-over-year comparisons and measures that respond to the filters a user chooses. Learning to think in these two languages is the main step from casual user to capable analyst.
Power Query is the prep station that washes and chops ingredients before cooking. DAX is the chef’s recipe formulas that decide how to combine them into dishes depending on what each customer ordered.
Desktop is where serious model design happens. The browser editing experience is convenient for small changes and exploration, but professional teams usually keep the source of truth in a file or a version-controlled project created in Desktop or a compatible tool.
5How Power BI Runs on Azure: Architecture
Understanding the moving parts helps you reason about speed, security and cost.
When a user opens a report in a browser, a chain of Azure components answers. The request authenticates with Microsoft Entra ID. The service checks permissions. The query engine runs the report’s questions against the semantic model, either from data held in memory or by sending queries to a source system. Results return to the browser, which draws the visuals. Where the model is hosted and how much compute it can use depends on the capacity attached to the workspace.
flowchart TD
U["User in browser, Teams or mobile"] --> E["Microsoft Entra ID sign-in"]
E --> S["Power BI service in tenant home region"]
S --> C["Capacity: compute for queries and refresh"]
C --> M["Semantic model in memory"]
C -.->|DirectQuery or refresh| D["Azure data sources"]
C -.->|Through gateway| G["On-premises or private network sources"]
Tenant, home region and data location
Your organization’s tenant has a home region, which is where Power BI stores its tenant metadata and, by default, your content. Large organizations with data residency rules can use multi-geo capabilities to place certain content in other regions, so that data for a particular country stays in that country. Because these rules matter legally, confirm the current options with your administrator and documentation.
Shared capacity versus dedicated capacity
With the basic per-user licensing, content lives on shared capacity, where compute is pooled among many customers and managed by Microsoft. With a dedicated capacity, you purchase a reserved amount of compute that serves only your organization. Dedicated capacity offers more predictable performance, larger model sizes, more frequent refresh, advanced features and, at larger sizes, the ability for free-licensed viewers to read content.
Shared capacity is a public bus: economical and fine for most trips, but you share the ride. Dedicated capacity is a chartered coach: it costs more, but the seats are yours and it leaves when you say.
Choose shared capacity for small teams and early projects, and consider dedicated capacity when you need many viewers without individual paid licenses, larger models, heavy scheduled refresh or advanced enterprise features.
6Connecting to Azure Data Sources
Power BI has connectors for a large catalog of sources, and Azure services are first-class citizens.
Azure SQL Database and Managed Instance
Common relational sources for operational and reporting data. Support both import and direct query.
Azure Synapse Analytics
Enterprise data warehouse and lake analytics. Frequently used for large-scale reporting with DirectQuery or import.
Azure Data Lake Storage Gen2
Files in a data lake, such as Parquet or CSV, read directly or through a lakehouse or warehouse layer.
Azure Databricks
Lakehouse tables queried through the Databricks connector, popular in data engineering heavy organizations.
Azure Cosmos DB and Data Explorer
Operational documents and fast time-series or log analytics, with connectors suited to those shapes.
Fabric lakehouses and warehouses
Items within Fabric, accessible with the most direct and efficient connection options, including Direct Lake.
flowchart LR
A["Azure SQL"] --> P["Power BI semantic model"]
B["Synapse"] --> P
C["Data Lake Storage"] --> P
D["Databricks"] --> P
E["Cosmos DB"] --> P
F["Fabric lakehouse"] --> P
G["Excel, files, SaaS applications"] --> P
P --> R["Reports and dashboards"]
Authentication to the source
The model must prove who it is to each data source. Options include a stored credential, an organizational account that signs in with Entra ID, and, for supported sources, single sign-on, where the actual report viewer’s identity is passed through so that the source can apply its own per-user security. Single sign-on is powerful but needs careful setup, and it works with direct query connections rather than imported data.
Saving a personal account as the stored credential for a shared model. When that person leaves, changes their password or has their account disabled, scheduled refresh breaks for everyone. Use service accounts or managed approaches owned by the team, not by an individual.
7Storage Modes: Import, DirectQuery, Dual and Direct Lake
The most important design decision in Power BI is where the data lives at query time.
A storage mode describes how a table in the model gets its data when users interact with a report. Each mode trades freshness, speed, size and cost.
Import
Data is copied into the model’s in-memory engine and compressed. Queries are very fast, but data is only as fresh as the last refresh, and the model must fit within size limits.
DirectQuery
Data stays in the source. Every visual sends queries to the source in real time. Data is always current, but speed depends on the source and the model design.
Dual
A table can act as either import or DirectQuery depending on the query, useful for small dimension tables used alongside large DirectQuery tables.
Direct Lake
Reads columns straight from lake files in OneLake into memory as needed, aiming for import-like speed with near-real-time freshness, available within Fabric.
Composite model
A model combining several modes or several sources, so that big detailed tables stay in the source while summaries are imported.
Live connection
A report connects to an existing hosted model rather than holding its own. All modeling happens in the shared model.
| Question | Import | DirectQuery | Direct Lake |
|---|---|---|---|
| Data freshness | As of last refresh | Real time from source | Near real time after data lands in the lake |
| Query speed | Very fast | Depends on the source | Fast, similar to import when cached |
| Data size ceiling | Bounded by model size limits | Bounded by the source | Large, bounded by capacity guardrails |
| Load on source | Only during refresh | Every user interaction | Little, reads lake files |
| DAX and model features | Full | Some limits | Mostly full, with some limits to check |
| Best for | Most reporting scenarios | Huge or real-time sources and source-level security | Lakehouse-centric Fabric solutions |
flowchart TD
A["Choose a storage mode"] --> B{"Need data fresher than a scheduled refresh?"}
B -->|No| C{"Data fits within model size limits?"}
C -->|Yes| D["Import"]
C -->|No| E["Consider Direct Lake, aggregations or composite model"]
B -->|Yes| F{"Data in a Fabric lakehouse or warehouse?"}
F -->|Yes| G["Direct Lake"]
F -->|No| H["DirectQuery against a well-tuned source"]
Import is photocopying a reference book and keeping the copy on your desk: instant to read, but it can be out of date. DirectQuery is walking to the library every time you need a fact: always current, but slower. Direct Lake is a library that keeps the pages you need already open on your desk, with a fresh edition arriving as soon as it is printed.
Default to Import. It is the fastest, the most feature-rich and usually the cheapest for the source. Move to DirectQuery or Direct Lake only when freshness or data size genuinely demand it.
8Data Modeling: The Foundation of Everything
A clean model makes reports fast, accurate and easy to build; a messy one makes everything harder.
The star schema
The widely recommended design is the star schema. In the middle sits a fact table, which holds the events or measurements you want to analyze, such as sales lines, with numeric values and keys. Around it sit dimension tables, which describe the context: customers, products, dates, stores. Each dimension connects to the fact table through a relationship. The shape looks like a star, which gives it its name. This structure matches the way the engine is optimized and keeps calculations simple.
flowchart TD
F["Fact table: Sales"]
D1["Dimension: Date"] --> F
D2["Dimension: Product"] --> F
D3["Dimension: Customer"] --> F
D4["Dimension: Store"] --> F
The fact table is the receipt roll of every purchase. The dimensions are the separate lookup books that say who the customer was, what the product is, which store it was and what day it happened. Keeping descriptions in lookup books means you never repeat them on every receipt.
Measures versus columns
A calculated column stores a computed value for every row and uses memory. A measure is a calculation evaluated at query time, in the context of whatever filters the user has applied. Totals, averages, ratios and comparisons are best written as measures. Because measures respond to filters, one measure can answer questions about any product, region or period without being rewritten.
Filter context
The key concept in DAX is filter context: the set of filters in effect when a calculation runs. Clicking a region, choosing a month and placing products in rows all contribute to the context. A measure like “total sales” gives different answers in each cell of a table because each cell has a different context. Understanding this, and how functions can modify the context, is the heart of DAX.
Use a proper date table
A complete, continuous calendar table enables time intelligence such as year to date and same period last year.
Hide technical columns
Keys and helper columns should be hidden from report authors, who should see only meaningful fields.
One-to-many relationships
Prefer simple one-to-many relationships with a single filter direction. Avoid unnecessary bidirectional filters.
Reduce columns and cardinality
Remove columns you do not use and avoid very high-cardinality text columns, which bloat memory.
Name things for business users
Friendly names, folders and descriptions make a model self-explanatory.
Problem
The model is one giant flat table imported from a join of many source tables, with repeated descriptive text on every row.
Why It’s Harmful
It uses far more memory, refreshes slowly, makes measures awkward and produces wrong totals when duplicates appear.
Correct Approach
Reshape into a star schema with clean dimensions and a narrow fact table before loading.
9Gateways: Bridging Private Networks and the Cloud
Cloud services cannot reach inside your private network unless you give them a safe door.
If your data lives on a server inside your own data center, or inside an Azure virtual network that is not publicly reachable, the Power BI service cannot connect directly. A gateway solves this. It is a small piece of software that runs inside your network and makes only outbound connections to the cloud. When the service needs data, it sends a request through the cloud relay, the gateway runs the query against the private source and returns the results.
sequenceDiagram
participant PBI as Power BI service
participant R as Cloud relay
participant G as Gateway in private network
participant S as Private data source
G->>R: Outbound connection kept open
PBI->>R: Request for data refresh
R->>G: Forward request
G->>S: Run query
S-->>G: Data
G-->>PBI: Results sent back securely
On-premises data gateway, standard mode
Installed on a server you manage, shared by many users and models, the usual choice for enterprise use.
Virtual network data gateway
A managed gateway that runs inside your Azure virtual network without you maintaining a server, for sources reachable only from that network.
Personal mode
For one person’s own use, mainly for individual experiments. Not suited to shared enterprise reports.
A gateway is a trusted courier stationed inside a locked building. The outside world never gets a key. The courier steps out to a known pickup point, receives instructions, fetches the requested papers from inside, and hands them back.
Operating a gateway well
Treat the gateway like a production server. Run it on a dedicated, well-sized machine close to the data source, not on someone’s laptop. Install it on more than one machine to form a cluster for high availability. Keep the software updated. Monitor processor, memory and network use, because refreshes and DirectQuery traffic all pass through it. Document who owns it and how credentials are stored.
Running the only gateway on a single small virtual machine. When it is rebooted, patched or overloaded, every refresh and every DirectQuery report fails at once. Use a cluster and size it for peak load.
Many Azure sources do not need a gateway at all if they are publicly reachable with proper firewall rules, or if they are connected through private networking features of the service. Only add a gateway when the source is not reachable otherwise.
10Refresh, Incremental Refresh and Freshness
Imported data is a snapshot, so you must decide how it stays current.
Scheduled refresh
A refresh reloads data from the sources into the model. You can run it on a schedule, such as nightly or every hour, or trigger it through an API when upstream data is ready. The number of scheduled refreshes per day depends on the license and capacity, and larger dedicated capacities allow more frequent refreshes. Check the current limits for your plan.
Incremental refresh
Reloading years of history every night is wasteful. Incremental refresh divides a large table into time-based partitions and refreshes only the recent ones, such as the last few days, while keeping older partitions untouched. This makes refreshes much faster, reduces load on the source, and allows bigger tables. It requires the data to have a reliable date column and the source to support filtering by that date efficiently.
flowchart LR
A["Partition: years ago"] --> B["Partition: last year, archived"]
B --> C["Partition: recent months, refreshed rarely"]
C --> D["Partition: last days, refreshed every time"]
D --> E["Optional: real-time partition via DirectQuery"]
Instead of rewriting the whole ledger every night, the bookkeeper only writes today’s new pages and checks the last few days for corrections. The old pages stay exactly as they were.
Query folding
Query folding is when Power Query translates your data shaping steps into a single query that the source runs itself, instead of pulling all rows and shaping them locally. When folding works, refresh is faster and gentler on the network. Certain operations break folding, and once broken, later steps run in the engine. Design transformations so that the heavy filtering and joining steps come first and fold to the source.
Push heavy transformations upstream whenever possible, into views, a warehouse or a dataflow, rather than rebuilding them in every model. Power BI should consume prepared, well-shaped data.
Problem
Every report author builds their own import of the same large source tables, each refreshing on its own schedule.
Why It’s Harmful
The source is hammered by duplicate loads, capacity is wasted, and different reports show slightly different numbers.
Correct Approach
Build a shared, certified semantic model with one refresh, and let reports connect to it.
11Licensing and Capacities
The licensing model decides who can build, who can view, and how much power you get.
Free
Allows personal use and, on suitable capacities, viewing of content shared with the person. Cannot share content on shared capacity.
Pro
A per-user license that lets people create, publish and share content on shared capacity, with every viewer of that content also needing a license unless dedicated capacity is used.
Premium Per User
A per-user license unlocking many premium features such as larger models and more frequent refreshes for those users.
Fabric capacity
Purchased in sizes in Azure and billed by capacity unit. Powers Power BI and other Fabric experiences. At larger sizes, free users can view content.
Embedded capacity
Capacity purchased in Azure for embedding analytics in applications for customers, without individual viewer licenses.
Legacy premium capacity
Earlier dedicated capacity SKUs that have been moving toward Fabric capacities. Check current availability and transition guidance.
| Need | Typical choice | Why |
|---|---|---|
| A few analysts building and sharing among themselves | Pro licenses | Simple and inexpensive for small groups |
| Few power users needing large models or advanced features | Premium Per User | Premium features without a full capacity |
| Hundreds or thousands of viewers inside the company | Dedicated capacity at a size that supports free viewers | Avoids buying a license per viewer |
| Analytics inside a product used by external customers | Embedded or Fabric capacity | Customers do not need Power BI licenses |
| Lakehouse centered analytics platform | Fabric capacity | One pool for engineering and reporting |
License names, per-user prices, capacity sizes, the viewing thresholds for free users, and the status of older premium offerings are changing. Always confirm them in current Microsoft documentation and with your licensing contact before committing to a budget.
Pausing and scaling in Azure
Because capacities are Azure resources, you can often scale them up and down and, for some types, pause them when not in use. Pausing stops the compute charge but also makes content on that capacity unavailable until resumed. This is useful for development or embedded scenarios with predictable idle periods, but it must be planned so that users are not surprised.
Per-user licenses are like buying a ticket for each cinema-goer. A capacity is like hiring the entire cinema: more expensive upfront, but if hundreds of people attend, the cost per person falls, and the private hall is always ready.
12Security: Identity, Row-Level Security and Protection
Different people should see different data, and every layer of the platform helps enforce that.
Identity with Microsoft Entra ID
Users sign in with Microsoft Entra ID. This brings centralized controls: multi-factor authentication, conditional access rules that require compliant devices or trusted locations, and group-based assignment of permissions. Always manage access through groups instead of individual users so that onboarding and offboarding are simple.
Workspace roles
| Role | Typical abilities |
|---|---|
| Admin | Full control of the workspace, including managing access and deleting content |
| Member | Edit content and manage most items, often add other members with lower roles |
| Contributor | Create and edit content but not manage access or publish apps |
| Viewer | View content only |
Row-level security
Row-level security, or RLS, restricts which rows of data each user may see. You define roles in the semantic model with filter rules, then assign users or groups to those roles. A regional manager sees only their region’s rows, even though everyone uses the same report. A more flexible technique, dynamic RLS, uses a table that maps each user’s sign-in name to the data they are allowed to see, so rules are maintained as data instead of as many separate roles.
flowchart LR
U1["Manager A"] --> R["One report, one model"]
U2["Manager B"] --> R
R --> F["RLS filter applied by sign-in identity"]
F --> D1["Rows for region A"]
F --> D2["Rows for region B"]
Row-level security is like a hotel key card. Every guest uses the same elevator and corridor, but their card opens only their own room.
RLS applies to people who view through the model with a viewer-level access. Users with higher rights in the workspace, such as editing rights over the model, can bypass the role restrictions. Do not give broad workspace roles to people who must be restricted, and test with the “view as” feature.
More layers of protection
Object-level security
Hides entire tables or columns from certain users, such as salary columns.
Sensitivity labels
Labels from the organization’s information protection tools classify content and can travel with exported files and enforce encryption.
Data loss prevention
Policies that detect sensitive information and warn or block risky sharing.
Encryption and customer-managed keys
Data is encrypted at rest and in transit, with options for organizations to control their own keys where supported.
Export and sharing controls
Tenant settings limit exporting to files, sharing externally and publishing to the web.
Secure data at the earliest layer that is practical. Security in the source and in the model is stronger than relying on hiding visuals in a report, because a determined user can still reach hidden data through other tools.
13Network Security and Private Connectivity
For regulated organizations, the path of the traffic matters as much as the permissions.
By default, users reach the Power BI service over the public internet, authenticated and encrypted. Many organizations want more control. Azure Private Link, available for Power BI at the tenant level and, in newer offerings, at the workspace level, lets you route access to the service through a private endpoint in your own virtual network. You can then block public internet access to Power BI, so that only traffic from your network, including on-premises connected through private links, can use it.
flowchart LR
A["Corporate network and VPN"] --> B["Private endpoint in your virtual network"]
B --> C["Power BI service over Microsoft backbone"]
D["Public internet"] -.->|Blocked when public access is disabled| C
Private Link for the service
Private access to the portal and APIs through a private endpoint, with careful DNS configuration.
Conditional access
Rules based on location, device compliance and risk that decide whether a sign-in is allowed.
Virtual network data gateway
Lets the service read from sources locked inside a virtual network without public exposure.
Trusted access to storage
Mechanisms that let the service access firewall-protected storage with an identity instead of opening it to the public.
Enabling private-only access without planning for everyone who needs it: mobile users, external guests, embedded applications, and other tools. These can lose access suddenly. Pilot with a small group, document exceptions, and read the current limitations before enabling.
Using Private Link is like giving employees a staff entrance to a public library’s reading room, and then closing the front door to everyone else. It is safer, but you must make sure every legitimate visitor has a way to the staff entrance.
14Governance and Administration
Self-service is powerful, and without guardrails it becomes chaos.
Power BI makes it easy for anyone to create reports, which is a strength and a risk. Without governance, organizations end up with thousands of overlapping reports, conflicting numbers, orphaned content and accidental exposure of sensitive data. Governance means setting clear rules and tools so that freedom and trust coexist.
Tenant settings
Administrators switch features on or off for the whole organization or for chosen groups, such as export, external sharing and embedding.
Endorsement
Promoted and certified labels tell users which models are official and trusted.
Lineage and impact analysis
Visual maps showing where data comes from and which reports depend on a model, essential before making changes.
Audit logs and activity events
Records of who viewed, exported, shared or changed content, available for security investigation and usage analysis.
Domains and catalog integration
Organize content by business area and connect it to data governance and cataloging tools.
Admin APIs and scanning
Programmatic ways to inventory workspaces, models and sensitive content across the tenant.
A workable operating model
Define tiers of content
Personal exploration, team content and enterprise certified content each have different rules for review, testing and support.
Publish certified models
A central team curates a small set of high-quality semantic models for common subjects such as sales and finance.
Enable self-service on top
Let business teams build reports on certified models without needing to rebuild the data logic.
Monitor and clean up
Review usage and remove unused content, and enforce ownership so that every item has a responsible person.
Train and support
Provide a champions network, documentation and office hours so that people learn the right habits.
Governance is the set of road rules, signs and traffic lights in a city. They do not stop anyone from driving; they let thousands of people drive at once without collisions.
15Application Lifecycle: Deployment Pipelines, Git and XMLA
Reports are software. Treat changes with the discipline software deserves.
Development, test and production
Editing a live report that executives rely on is risky. Deployment pipelines give you separate stages, typically development, test and production, each tied to a workspace. Authors build in development, testers review in the test stage, and approved content is promoted to production. Rules can change data source connections and parameters per stage, so that the test version reads from test data and the production version from production data.
flowchart LR
A["Development workspace"] -->|Promote| B["Test workspace"]
B -->|Review and approve| C["Production workspace"]
C --> D["Users via app"]
A -.-> G["Git repository"]
Git integration
Connects a workspace to a repository so that report and model definitions are versioned, reviewed through pull requests, and recoverable.
XMLA endpoint
An open interface to the model on capacities that support it, allowing professional tools to read and write model definitions and manage partitions.
External model tools
Specialist editors and comparison tools help with large models, bulk edits and merging changes between versions.
Automation through APIs
Scripts and pipelines can publish, refresh, and configure content automatically as part of release processes.
Use parameters for server names and database names so that moving content between stages never requires editing the model by hand. Hand edits are where mistakes creep in.
A deployment pipeline is the rehearsal hall before opening night. The play is performed to a test audience first, so mistakes are found before the paying public arrives.
Problem
Authors edit the production semantic model directly in the browser during business hours with no review.
Why It’s Harmful
A small mistake breaks a report that the whole company is using, and there is no history of who changed what or how to roll back.
Correct Approach
Develop in a separate workspace, use source control, test, and promote through a pipeline.
16Performance Tuning
Slow reports lose users. Most slowness has a few common causes.
A report is slow because of one of three things: the visuals ask for too much, the DAX is inefficient, or the model or source is poorly designed. Find which before tuning anything.
Measure first
Use the built-in performance analysis tool in Desktop to see how long each visual takes and capture its queries. Use external tools to study the queries in detail.
Simplify the report page
Fewer visuals per page, fewer slicers and less detail per visual. Every visual runs its own queries.
Fix the model
Adopt a star schema, remove unused columns, reduce cardinality, use correct data types and avoid unnecessary bidirectional relationships.
Optimize the DAX
Write measures that avoid unnecessary row-by-row iteration, reuse intermediate results through variables, and prefer simple filters.
Use aggregations
Pre-summarized tables answer most questions quickly, while detailed data is fetched only when needed.
Tune the source for DirectQuery
Make sure the source has good indexes, suitable views and enough capacity, since every interaction becomes a query.
Right-size the capacity
If the capacity is overloaded, even perfect design will feel slow. Watch utilization and spread heavy jobs across time.
A slow restaurant might have a too-large menu, a disorganized kitchen or too few cooks. You time each stage before hiring anyone. Likewise, measure where a report loses time before throwing more capacity at it.
Putting a table with hundreds of thousands of rows on a page “so people can export it”. Use paginated reports or targeted drill-through pages for detailed listings, and keep the main report page for summaries.
Problem
A DirectQuery model over a transactional database with no indexes tuned for analytical queries, and many users clicking slicers at once.
Why It’s Harmful
Each click sends several heavy queries to the live operational system, slowing both the report and the business application.
Correct Approach
Query a replica or a prepared analytical store, use aggregations, or switch to import for most tables.
17Monitoring, Capacity Management and Troubleshooting
Operate the platform with data, not guesses.
Capacity metrics app
Shows how much of the capacity is used over time, which items consume the most, and when overload and throttling occur.
Usage metrics
Shows which reports and pages people actually open, helping you retire unused content and focus effort.
Workspace logging to Azure Log Analytics
Sends detailed model and query events to a log workspace so you can analyze slow queries and refresh failures at scale.
Refresh history
Per-model record of refresh starts, durations and errors, with alerts to owners on failure.
Azure Monitor and cost tools
Metrics and budgets on capacity resources in Azure to watch spend and set alerts.
Understanding capacity pressure
A capacity has a fixed amount of compute per time period. Interactive queries and background refreshes both draw from it. When demand exceeds supply, the capacity can borrow against future time for a while and then may delay or throttle work. The effect is slow reports and delayed refreshes. The usual remedies are to spread refresh schedules so that they do not all start at the top of the hour, to optimize the heaviest models, to move non-critical work to another capacity, or to scale up.
| Symptom | Likely cause | What to do |
|---|---|---|
| Scheduled refresh fails | Expired credentials, gateway offline, source change, timeout | Read the error in refresh history, check credentials and gateway status |
| Reports slow at certain hours | Capacity overloaded by many simultaneous refreshes or users | Stagger schedules, optimize heavy models, scale capacity |
| Users see different numbers | Duplicate models or different refresh times | Consolidate on a certified model and communicate refresh times |
| Users see data they should not | Row-level roles missing, or users hold elevated workspace roles | Review roles and workspace access and test with view-as |
| DirectQuery visuals time out | Slow source queries or heavy DAX | Tune source, add aggregations, reduce visual complexity |
| Cannot reach service from corporate network | Private access and DNS mismatch | Check private endpoint, DNS resolution and firewall rules |
Set alerts for refresh failure and for sustained high capacity use, and send them to a team mailbox or chat channel rather than a single person. Silent failures are the usual reason executives see stale numbers.
18Embedded Analytics
Put reports inside your own applications so users never leave them.
Power BI content can be embedded in websites and applications. There are two main models, and the choice drives licensing, identity and architecture.
Embed for your organization
Users are employees who have Power BI access. They sign in with their own identity and the application shows content they are already permitted to see. Sometimes called user owns data.
Embed for your customers
Users are external customers who do not need Power BI accounts. Your application authenticates to Power BI using a service identity and generates secure tokens for each session. Sometimes called app owns data.
sequenceDiagram
participant C as Customer in your app
participant A as Your application backend
participant E as Microsoft Entra ID
participant P as Power BI service
C->>A: Open analytics page
A->>E: Authenticate with service identity
E-->>A: Access token
A->>P: Request embed token with row-level identity
P-->>A: Embed token
A-->>C: Page with embedded report and token
C->>P: Report loads using embed token
Design considerations
Multi-tenant isolation
Software vendors serving many customers must ensure that each sees only their own data. Options include one shared model with row-level security by customer, or separate workspaces and models per customer for stronger isolation at higher management cost.
Service principals instead of user accounts
Applications should use a registered application identity, not a shared human account, to call the service. It is safer, auditable and not tied to a person’s employment.
Capacity sizing and pausing
Embedded workloads follow customer usage patterns. Size for peaks, and consider pausing capacity during known quiet periods if the business allows, remembering that paused capacity serves nothing.
Branding and user experience
Embedded reports can be themed and controlled through a client library, so that they feel like part of your product rather than a separate tool.
Generating embed tokens in the browser, or with broad permissions that ignore the customer’s identity. Always create tokens on the server and apply the customer’s identity so that row-level security is enforced.
19Working with Other Azure Services
Power BI is the visible layer; Azure provides the engine room.
flowchart LR
A["Operational systems"] --> B["Ingestion: Data Factory or Fabric pipelines"]
B --> C["Data lake storage"]
C --> D["Transformation: Synapse, Databricks or Fabric"]
D --> E["Warehouse or lakehouse"]
E --> F["Power BI semantic model"]
F --> G["Reports, apps and embedded analytics"]
H["Catalog and governance"] -.-> C
H -.-> F
Azure Data Factory and Fabric pipelines
Orchestrate ingestion and movement of data from many sources into the lake or warehouse on a schedule.
Azure Synapse and Databricks
Transform and aggregate large volumes of data into analysis-ready tables.
Azure Data Lake Storage
Low-cost, scalable storage for raw and curated data, and an optional home for dataflow storage if you choose to bring your own.
Microsoft Purview
Catalog, classification and lineage across data sources and Power BI, plus sensitivity labels and audit.
Azure Machine Learning and AI services
Add predictions, text analysis or anomaly detection into data preparation and reports.
Power Automate and Logic Apps
Trigger actions from data alerts, send report snapshots and start refreshes when upstream jobs finish.
Azure Monitor and Log Analytics
Collect and analyze operational telemetry from capacities, gateways and models.
Microsoft Teams and Microsoft 365
Surface reports in collaboration tools and spreadsheets so that people use data where they already work.
The medallion idea
Many lake-based architectures organize data into layers: a raw layer that stores data exactly as received, a cleaned layer where errors are fixed and formats standardized, and a curated layer shaped for analysis. Power BI models should sit on the curated layer. If analysts must do heavy cleaning in Power Query, it signals that the upstream curation is incomplete.
Raw data is vegetables straight from the farm, cleaned data is washed and trimmed, and curated data is chopped and portioned into meal kits. A cook at the serving station, Power BI, should receive meal kits, not muddy vegetables.
Smart assistance and AI features
Power BI includes AI-assisted features such as natural language questions, automated insights and a conversational assistant that can help create reports and explain data. Availability depends on license, capacity and tenant settings and changes often, so confirm what is available to you. Whatever the tool, remember that AI answers are only as good as the model’s definitions, descriptions and security. A clean, well-documented model is the best preparation for any AI feature.
20Cost Optimization
The bill depends on licenses, capacity, data sources and people.
Costs come from several places. There are license costs for users who build and share. There is capacity cost for dedicated compute. There is the cost of the underlying data services such as warehouses, storage, and data movement. Then there is the cost of people’s time maintaining content. Optimizing means keeping each in proportion to the value delivered.
Match licensing to usage patterns
Compare per-user licensing against capacity for your actual number of builders and viewers. The break-even point depends on the numbers and current prices.
Right-size and schedule capacity
Use usage data to pick the smallest capacity that handles peaks. Scale or pause non-production capacities when not in use.
Consider reservations
For stable, long-running capacity needs, committing for a term often brings a discount compared with pay as you go. Check current offers.
Make refreshes efficient
Use incremental refresh, share models, stagger schedules and drop unused tables and columns to save compute and memory.
Retire unused content
Reports that nobody opens still consume refresh time. Use usage data to archive or delete them.
Watch the data source bills
DirectQuery against a premium warehouse can generate large query costs. Import with sensible refresh frequency is often cheaper.
Prices, license structures and discount programs are updated by Microsoft over time. Use the official pricing pages and the Azure cost management tools for current figures, and re-evaluate your choices at least once a year.
Running a capacity at all hours for a handful of viewers is like heating an entire stadium for a book club. Match the size and hours to the audience.
21Patterns and Anti-Patterns
Habits that scale, and habits that hurt.
Patterns worth adopting
Shared certified semantic models
A central team owns a small number of trusted models. Many reports connect to them, giving one version of the truth.
Hub and spoke content model
Central teams manage the hub of certified data. Business teams build spokes of reports and local extensions on top of it.
Separate workspaces for model and reports
Keep models in one workspace and reports in another, so that access, release schedules and ownership can differ.
Dynamic row-level security
Use a mapping table of users to allowed values so access rules are maintained as data, not as dozens of roles.
Aggregation tables for scale
Imported summary tables answer most queries instantly, while detailed data is queried only on demand.
Parameterized deployment
Use parameters and pipeline rules to move content between stages without manual edits.
Anti-patterns to avoid
Problem
Emailing report files with embedded data around the organization, or publishing sensitive reports to the public web.
Why It’s Harmful
Copies cannot be revoked, go stale, and escape governance. Public publishing exposes data to anyone with the link.
Correct Approach
Share through workspaces and apps with proper permissions and sensitivity labels, and restrict public publishing through tenant settings.
Problem
All content lives in one giant workspace where everyone is a member.
Why It’s Harmful
People can edit or delete each other’s work, security boundaries are blurry, and the workspace becomes impossible to manage.
Correct Approach
Create workspaces by team, subject or lifecycle stage, with groups assigned to roles and a clear owner for each.
Problem
Business logic is scattered across many report-level measures, each author writing their own definition of revenue.
Why It’s Harmful
Reports disagree, trust collapses, and any change in the business definition has to be fixed in dozens of places.
Correct Approach
Define key measures once in the shared model, document them, and let reports reuse them.
22Best Practices Checklist
A review list before you launch or audit a solution.
Do
- Build star schema models with a proper date table
- Default to Import mode and move away only for clear reasons
- Create measures once in a shared, certified model
- Use incremental refresh for large tables
- Use security groups for access and row-level security for data scoping
- Use a clustered gateway for private sources
- Use deployment pipelines and source control
- Monitor capacity use and refresh failures with alerts
- Apply sensitivity labels and limit risky tenant settings
- Document models and train people
Avoid
- Flat, wide tables and unnecessary bidirectional relationships
- Personal accounts as stored credentials for shared models
- Giving broad workspace roles to people who need row restrictions
- Editing production content directly
- Dozens of copies of the same model
- Overcrowded report pages with huge tables
- Enabling private-only access without planning exceptions
- Choosing DirectQuery by habit rather than need
- Leaving unused content running forever
Create a one-page launch checklist for every new solution covering data source, refresh schedule, owner, security roles, sensitivity label, test results, performance check and support contact. Review it before promoting to production.
23Real-World Scenarios
How organizations put the pieces together.
Retail chain with regional managers
Sales data lands in a lake each night, is transformed into a curated warehouse, and feeds a certified sales model with dynamic row-level security by region. Store managers see their own store, regional managers see their region, and executives see everything, all from one report.
Manufacturer with factory telemetry
Machine data flows into a real-time store. Operations dashboards use a combination of near-real-time sources for the live view and imported summaries for historical trends, so that performance stays high at scale.
Bank with strict network controls
The bank routes access through private endpoints, requires conditional access with compliant devices, uses sensitivity labels with encryption, and audits all export activity. Models read from locked-down sources through virtual network gateways.
Software vendor embedding analytics
A vendor embeds dashboards in its application for thousands of customers, using a service identity, per-customer row-level security and a capacity sized for peak usage with monitoring of cost per customer.
Hospital network
Clinical and operational data is anonymized in the lake, models enforce strict object-level and row-level security, and governance tools track lineage so auditors can see where each number originates.
Public sector open reporting
An agency publishes certified apps to internal staff, keeps public-facing information in a separate controlled channel, and uses usage analytics to retire reports that nobody reads.
24Frequently Asked Questions
Short answers to common beginner questions.
The Power BI service runs on Azure infrastructure and relies on Azure identity and many Azure data services, but it is licensed and administered as its own Microsoft product, which is now also a part of Microsoft Fabric.
Desktop is the application on your computer where you connect to data, build the model and design reports. The service is the cloud where you publish, share, schedule refresh, secure and collaborate.
Start with Import because it is the fastest and most capable. Use DirectQuery or Direct Lake only when you need data fresher than scheduled refresh allows or the data is too big for import, and plan for source performance.
Only if the service cannot reach your data source directly, such as a server in your data center or a source locked inside a private virtual network. Publicly reachable Azure sources typically do not need one.
It is the data model behind reports: tables, relationships and calculations. It was previously called a dataset. Many reports can share one model.
You define roles with filters in the model and assign users or groups to them. When a user opens a report, the filters limit the rows they can see. Users with edit rights on the model can bypass the restrictions, so assign roles carefully.
A capacity is a reserved pool of compute purchased for your organization. You may need one if you have many viewers, large models, frequent refresh or advanced features, or if you embed analytics for customers.
Common causes include too many visuals, inefficient calculations, a poor model design, a slow DirectQuery source, or an overloaded capacity. Measure with the performance analysis tools before changing anything.
It depends on your license and capacity. Dedicated capacities allow more frequent refreshes than shared ones, and DirectQuery or Direct Lake can provide fresher data without scheduled refresh. Check the current limits for your plan.
Yes, using Azure Private Link for Power BI, combined with conditional access and private data gateways. Plan DNS and exceptions carefully and confirm the current limitations.
Use deployment pipelines with separate workspaces, parameters for data sources, and source control, so changes are reviewed and promoted instead of being edited live.
Yes. You can embed for your own employees, who sign in with their identities, or for customers, using a service identity and server-generated tokens, usually on a capacity purchased in Azure.
No. License names, capacity sizes, prices, viewing thresholds and available features change over time, especially with the evolution of Microsoft Fabric. Always confirm with the current official documentation before planning or buying.
25Summary and Key Takeaways
Power BI in Azure combines a cloud analytics service, a rich ecosystem of Azure data sources and Azure’s identity, networking and governance features. A successful solution starts with clean, well-shaped data and a star-schema semantic model, chooses the right storage mode, refreshes efficiently, and shares a small set of certified models for many reports. It protects data through groups, row-level security, sensitivity labels and, where needed, private connectivity. It treats reports as software with pipelines and source control, watches capacity and refresh health, and keeps costs aligned with usage. Because the product and its licensing keep evolving alongside Microsoft Fabric, the wise habit is to hold on to the stable ideas in this guide and verify the details in current documentation. With those habits, your organization can move from mountains of numbers to clear, trusted answers.
Key Takeaways
- The model matters most — a star schema semantic model with shared measures gives fast, consistent and trustworthy reports.
- Choose storage mode deliberately — default to Import, and use DirectQuery or Direct Lake only when freshness or scale demand it.
- Bridge private sources properly — use clustered gateways or virtual network gateways, and prefer service identities over personal accounts.
- Layer your security — combine Entra groups, workspace roles, row-level and object-level security, sensitivity labels and private connectivity.
- Govern for self-service — certify core models, limit risky tenant settings, track lineage and audit activity.
- Run it like software — use deployment pipelines, source control, monitoring, alerts and capacity planning.
- Verify the moving parts — licensing, capacity options and features are changing with Microsoft Fabric, so confirm current details before you design or budget.