top of page

Power BI Storage Modes Explained: Import, DirectQuery, Dual, Hybrid, Direct Lake & Live Connection

Sep 11
22 min read

When connecting data in Power BI, you may come across terms like Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection.

At first, they can sound like six different ways of doing the same thing. But they actually solve different problems.

Some determine how Power BI stores or accesses data. Some combine multiple storage behaviors. And Live Connection is slightly different again—it describes how a report connects to an existing semantic model.

So how do you know which one to use?

In this article, we’ll break down each option, compare how they work, and look at when you might choose one over another in a real Power BI project.


First, Understand What These Terms Actually Describe

Before comparing Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection, it helps to understand that they are not all the same type of option.

Some describe how Power BI stores or accesses table data, while others describe how different storage behaviors are combined or how a report connects to an existing semantic model.

A simple way to group them is:

1. How Power BI accesses table data

  • Import

  • DirectQuery

  • Direct Lake

2. Modes that combine storage behaviors

  • Dual

  • Hybrid

3. How a report connects to an existing semantic model

  • Live Connection

This distinction is important because, for example, DirectQuery and Live Connection may both seem like Power BI is “connecting to something remotely,” but they work at different levels.

With DirectQuery, the semantic model queries the underlying data source.

With Live Connection, the report connects to an already-existing semantic model.

We’ll come back to this distinction later.

For now, let’s start with the simplest and most common storage mode: Import.


Import Mode

Import mode means Power BI copies data from the source into the Power BI semantic model.

For example, imagine that your company has a SQL database containing sales transactions.

When you use Import mode, the process looks roughly like this:

Diagram showing source data being imported and refreshed into a Power BI semantic model before being used in a report.

Instead of asking the SQL database for data every time someone interacts with the report, Power BI works with the copy of the data that has already been loaded into the semantic model.

So if a user selects:

Region = North

Power BI can usually answer that query using the imported data stored in the semantic model.

It does not normally need to send another query back to the SQL database just because someone clicked a slicer.


Why Import Mode Is Usually Fast

Imported data is stored in Power BI's in-memory analytical engine, VertiPaq.

VertiPaq is designed to compress columnar data and perform analytical queries very efficiently.

That means interactions such as:

  • filtering

  • slicing

  • calculating measures

  • grouping data

  • displaying charts

can often be performed very quickly.

This is one of the biggest advantages of Import mode.

For many normal Power BI projects, Import should therefore be the first option you consider.


The Trade-Off: Data Freshness

The main limitation is that the imported data is only a snapshot of the source at the time of the last refresh.

Imagine your semantic model refreshed at 8:00 AM.

New sales transactions are added to the source database at 10:00 AM.

Your Power BI report will not automatically contain those new transactions until another refresh occurs.

Conceptually:

Source Database          Power BI Model

10:00 AM data             8:00 AM snapshot
     ↑                         ↑
 latest                    last refresh

So Import gives you excellent interactive performance, but data freshness depends on your refresh strategy.


Does a Large Dataset Automatically Mean You Should Avoid Import?

No.

This is an important misconception.

You should not use a simple rule such as:

“If I have more than 10 million rows, I should use DirectQuery.”

Power BI can handle datasets containing millions of rows very efficiently, especially when the model is well designed and the data compresses well.

What matters is not only the number of rows.

You also need to consider:

  • the number of columns

  • column cardinality

  • data types

  • model size after compression

  • refresh duration

  • available Power BI capacity

  • relationships

  • calculated columns

  • how the report will be queried

For example, a table containing 50 million rows with several low-cardinality columns may compress very well.

Another table containing significantly fewer rows but many high-cardinality text columns may consume much more memory.

So the better question is:

“Can this model be imported, refreshed, and queried efficiently within my requirements?”

When Import Mode Is a Good Choice

Import mode is usually a strong choice when:

  • the data can fit comfortably within your model and capacity

  • refreshing the data at scheduled intervals is acceptable

  • users do not require second-by-second source data

  • fast report interaction is important

  • you want maximum modeling flexibility

  • you want to reduce the number of queries hitting the source system

For example, imagine a management dashboard that reviews yesterday's completed sales.

The data only needs to refresh every morning.

There would probably be little benefit in querying the operational database every time someone clicks a chart.

Import mode would likely be the simpler and faster solution.


Import Mode in One Sentence

A useful way to remember Import mode is:

Bring the data to Power BI.

The data is copied into Power BI, and report queries are mainly answered from that imported copy.


DirectQuery Mode

DirectQuery works very differently from Import mode.

Instead of copying the source data into the Power BI semantic model, DirectQuery leaves the data in the original source and sends queries back to that source when the report needs information.

Conceptually:

Diagram showing a Power BI report sending queries through the semantic model to the source database and returning results.

For example, imagine a report contains a measure such as:

Total Sales = SUM(Sales[Revenue])

A user then selects:

Year = 2026
Region = North

With DirectQuery, Power BI may translate the request into a query that the source system understands.

For a relational database, the logic could conceptually look something like:

SELECT SUM(Revenue)
FROM Sales
WHERE Year = 2026
AND Region = 'North'

The exact query generated by Power BI may be different, but this is the important idea:

Power BI asks the source system to calculate or return the data needed for the visual.

Why Use DirectQuery?

There are several situations where importing the data may not be the best option.

1. The Dataset Is Very Large

Imagine your source contains billions of transaction rows.

Importing the entire dataset may require significant memory, refresh time, and capacity.

DirectQuery lets you leave the data in the source rather than loading the entire table into the semantic model.

However, this does not mean:

“Large dataset = automatically use DirectQuery.”

A large Import model may still perform very well if it compresses efficiently and fits comfortably within your capacity.

Dataset size is only one factor.

2. You Need Fresher Data

Suppose new transactions are continuously being added to your database.

With Import mode:

Database changes
      ↓
Wait for next refresh
      ↓
Power BI sees new data

With DirectQuery:

Database changes
      ↓
Next report query
      ↓
Power BI can query newer source data

This can make DirectQuery useful when users need data that is much closer to real time.

However, DirectQuery does not automatically mean that every visual always shows perfectly real-time data.

Caching, source-system behavior, report settings, and architecture can still affect freshness.

So it is better to think of DirectQuery as:

Querying the current source rather than relying on an imported snapshot.

The Main Trade-Off: Performance

DirectQuery avoids importing the full dataset, but the report now depends much more heavily on the source system.

When someone clicks a slicer, the process may look like this:

User clicks Region = North
          ↓
Power BI generates query
          ↓
Query travels to source
          ↓
Source processes query
          ↓
Result returns to Power BI
          ↓
Visual updates

That means report performance can depend on:

  • database performance

  • indexes

  • network latency

  • query complexity

  • data volume

  • concurrent users

  • relationships

  • DAX calculations

  • the number of visuals on a report page

If the source database is slow, the Power BI report can also feel slow.

This is very different from Import mode, where the report normally queries Power BI's optimized in-memory storage.


DirectQuery Also Creates Source-System Workload

This is another important consideration.

Imagine a report has 10 visuals.

Hundreds of users open the report and start interacting with slicers.

Those interactions can generate many queries against the underlying source.

Conceptually:

User 1 ─┐
User 2 ─┤
User 3 ─┤
...     ├── Power BI ─── Queries ─── Source Database
User 500┘

The database now needs to support both its normal workload and Power BI's interactive analytical queries.

This is why DirectQuery should not be chosen simply because it sounds more live or more advanced.

The source system must be designed to handle the additional workload.


When DirectQuery Is a Good Choice

DirectQuery can be a strong option when:

  • the dataset is too large or impractical to import

  • data freshness requirements are stricter than scheduled Import refresh can comfortably support

  • the source system is powerful enough to handle interactive analytical queries

  • governance or security requirements require data to remain in the source

  • the architecture is already designed around a high-performance analytical warehouse

For example, imagine a company has a very large cloud data warehouse containing continuously updated transactions.

Users need to monitor recent activity throughout the day.

The warehouse is designed to support heavy analytical workloads.

In that situation, DirectQuery may be a reasonable choice.


When DirectQuery May Be a Poor Choice

DirectQuery may not be ideal when:

  • the source database is slow

  • network latency is high

  • the report contains many complex visuals

  • users expect extremely fast interactions

  • the source cannot support many concurrent queries

  • scheduled refresh would already meet the business requirement

  • the data can comfortably be imported

For example, if management only needs yesterday's sales every morning, DirectQuery may add complexity without solving a real business problem.

Import could be simpler and faster.


DirectQuery in One Sentence

A useful way to remember DirectQuery is:

Leave the data at the source and ask the source for the answer.
Report
  ↓
Power BI
  ↓
Query the source
  ↓
Return the result

Dual Mode

Dual mode makes the most sense after you understand composite models.

A composite model is a semantic model that uses more than one storage mode.

For example:

Sales       = DirectQuery
Product     = Import
Customer    = Import
Date        = Import

In this model, Power BI is combining:

  • a DirectQuery fact table

  • Import dimension tables

That can work, but it can also create performance and relationship challenges when the imported dimension tables need to interact with the DirectQuery fact table.

This is where Dual mode becomes useful.


What Is Dual Mode?

A table set to Dual can behave as either:

  • Import

  • DirectQuery

depending on what the query needs.

Conceptually:

Diagram showing a Dual dimension table using cached Import behavior or DirectQuery behavior with a DirectQuery fact table.

This does not mean Power BI creates two completely separate versions of the table.

Instead, the table has imported data available in memory, but Power BI can also treat it as part of the DirectQuery path when necessary.

A useful way to remember Dual is:

Use the cached table when possible, but behave like DirectQuery when needed.

A Typical Dual Model

Imagine this star schema:

              Date
               │
               │
Product ───── Sales ───── Customer

Suppose Sales contains hundreds of millions of rows and uses DirectQuery.

The dimension tables are much smaller.

A common design might be:

Sales       = DirectQuery
Product     = Dual
Customer    = Dual
Date        = Dual

The large fact table stays at the source.

The smaller dimension tables are cached in Power BI, but they can still participate efficiently in DirectQuery operations.


Why Not Just Keep the Dimensions as Import?

Suppose a visual only needs to display a list of product categories.

Power BI may be able to answer that using the cached Product table:

Product [Dual]
      ↓
Cached data
      ↓
Visual

That is fast.

Now suppose another visual needs:

Total Revenue by Product Category

This requires Product to work together with the DirectQuery Sales table.

Conceptually:

Product [Dual]
       │
       ▼
Sales [DirectQuery]
       │
       ▼
Source database

In this situation, Power BI can treat the Dual dimension as part of the DirectQuery path.

That flexibility can make queries more efficient than having a strictly Import dimension interacting with a DirectQuery fact table.


Dual Is Usually Used for Dimension Tables

Dual is especially common for tables such as:

  • Date

  • Product

  • Customer

  • Region

  • Salesperson

  • Store

These are typically dimension tables.

A large transaction table such as Sales is more likely to remain DirectQuery, while the related dimensions can use Dual.

For example:

                 Date [Dual]
                     │
                     │
Product [Dual] ─ Sales [DirectQuery] ─ Customer [Dual]
                     │
                     │
                Region [Dual]

This lets Power BI use the fast in-memory copies of the dimensions when possible while still allowing those tables to participate efficiently in DirectQuery operations.


Dual Is Not Usually Your Starting Decision

This is an important distinction.

When starting a project, you normally ask questions such as:

  • Can I use Import?

  • Do I need DirectQuery?

  • Is the data in OneLake?

  • Do I need very fresh data?

You usually do not begin with:

“Should I use Dual?”

Dual tends to appear after you have already decided to build a model involving DirectQuery or Hybrid tables.

It is mainly a way to optimize how related tables behave inside that composite model.


When Dual Mode Is a Good Choice

Dual is often useful when:

  • you have a DirectQuery fact table

  • you have smaller dimension tables related to that fact table

  • those tables come from the same source

  • you want faster slicers and dimension-only queries

  • you want to improve performance in a composite model

For example:

Sales       DirectQuery
Product     Dual
Customer    Dual
Date        Dual

This is a much more realistic use of Dual than setting random tables to Dual without a modeling reason.


Dual Mode in One Sentence

A useful way to remember Dual is:

A Dual table can act like Import or DirectQuery depending on the query.
            Import
              ↑
              │
            Dual
              │
              ↓
         DirectQuery


Hybrid Mode

Diagram showing a Hybrid sales table with historical data stored in Import mode and the latest data using DirectQuery.

Hybrid mode combines Import and DirectQuery within the same table.

It is mainly used when most of your data is historical and relatively stable, but the newest data needs to stay much fresher.

A simple way to remember Hybrid is:

Import the past, DirectQuery the present.

How Hybrid Mode Works

Imagine your Sales table contains several years of transactions.

Sales

2022
2023
2024
2025
2026

Most historical sales records are no longer changing.

But today's transactions are still being added continuously.

Instead of using Import for the entire table or DirectQuery for the entire table, Hybrid lets Power BI split the table into different partitions.

For example:

Sales [Hybrid]

2022            → Import
2023            → Import
2024            → Import
2025            → Import
Jan-Aug 2026    → Import
Latest data     → DirectQuery

So the same logical Sales table contains both:

  • imported historical partitions

  • a DirectQuery partition for the newest data


What Is a Partition?

A partition is simply a portion of a table that Power BI manages separately.

You still see one table:

Sales

But internally, Power BI may store different sections of that table differently.

Conceptually:

Sales
│
├── Historical partition → Import
├── Historical partition → Import
├── Historical partition → Import
└── Latest partition     → DirectQuery

This is what makes Hybrid different from Dual.

Hybrid combines storage modes at the partition level.


Why Is Hybrid Useful?

Suppose management wants a dashboard containing five years of historical sales.

They also want to see transactions from the current day with minimal delay.

Using pure Import would give fast performance, but the latest transactions would only appear after a refresh.

Import only

Source changes
     ↓
Wait for refresh
     ↓
Power BI sees new data

Using pure DirectQuery would provide fresher access to the source, but now every query — including queries about old historical data — may need to hit the source system.

DirectQuery only

2022 query ──→ Source
2023 query ──→ Source
2024 query ──→ Source
Today query ─→ Source

That may be unnecessary.

Historical data from 2022 probably does not need to be queried live.

Hybrid gives you a middle ground:

Historical data
      ↓
Import cache
      ↓
Fast

Latest data
      ↓
DirectQuery
      ↓
Fresher source data

Hybrid Is Commonly Created with Incremental Refresh

Hybrid mode is closely related to incremental refresh.

Incremental refresh allows Power BI to refresh only recent partitions rather than refreshing the entire historical dataset every time.

For example:

Keep:
5 years of data

Refresh:
Last 7 days

Power BI can then manage historical partitions efficiently.

If the real-time DirectQuery option is enabled, Power BI can add a DirectQuery partition for the newest data.

Conceptually:

Incremental Refresh

Older data
   ↓
Import partitions

Recent imported data
   ↓
Refresh regularly

Newest data
   ↓
DirectQuery

This is how Hybrid models are commonly created in practice.


Why Not Just Refresh Import More Often?

That is a very good question.

Sometimes, you should.

If your Import model can refresh frequently enough to meet the business requirement, Hybrid may add unnecessary complexity.

For example, if users only need data updated every hour and your Import model can comfortably refresh every hour, Import may still be simpler.

Hybrid becomes more useful when:

  • the historical dataset is very large

  • historical data rarely changes

  • only a small recent portion needs frequent updates

  • users need fresher access to the newest records

  • repeatedly refreshing the entire model would be inefficient

So Hybrid is not automatically better than Import.

It solves a specific problem.


Hybrid vs Dual

This distinction is especially important.

Dual

The same table can behave as Import or DirectQuery depending on the query.

Product [Dual]

Same table
├── Import behavior
└── DirectQuery behavior

Hybrid

The same table contains different partitions using different storage modes.

Sales [Hybrid]

Older partitions → Import
Newest partition → DirectQuery

So remember:

Dual changes behavior at the table/query level.
Hybrid combines storage modes at the partition level.

When Hybrid Mode Is a Good Choice

Hybrid is a strong option when:

  • you have a large fact table

  • most historical data is stable

  • only recent data changes frequently

  • users need near-real-time access to the newest data

  • importing all historical data still provides strong performance

  • pure DirectQuery would create unnecessary source workload

A common example is:

Transaction History
2019-2025        → Import

Recent 2026 data → Import partitions

Very latest data → DirectQuery

When Hybrid May Be Unnecessary

Hybrid may be overkill when:

  • the dataset is small

  • scheduled refresh already meets the freshness requirement

  • the source cannot handle DirectQuery

  • near-real-time data is not required

  • the additional model complexity provides little benefit

In those situations, plain Import may still be the better choice.


Hybrid Mode in One Sentence

A useful way to remember Hybrid is:

Use Import for historical data and DirectQuery for the latest data within the same table.
Past                     Present
│                           │
▼                           ▼
Import                 DirectQuery
 \                       /
  \                     /
   └──── Sales Table ───┘

Direct Lake Mode

Direct Lake is a storage mode designed for Microsoft Fabric and OneLake.

It is useful when your analytical data already lives in OneLake and you want Power BI to work with that data without performing a traditional full Import process.

A useful way to remember Direct Lake is:

Keep the data in OneLake and let Power BI access the required columns directly.

Conceptually:

Diagram showing a Power BI semantic model accessing Delta and Parquet data directly from Microsoft Fabric OneLake.

This makes Direct Lake quite different from both Import and DirectQuery.


First, What Is OneLake?

OneLake is Microsoft Fabric's unified data lake.

It acts as a central storage layer for analytics data across Fabric.

Data in OneLake can be stored in open table formats such as Delta, with the underlying data stored in columnar Parquet files.

For example:

OneLake

├── Sales
├── Customer
├── Product
└── Date

These tables can then be used by different Fabric workloads, including Power BI semantic models.

The important point is that the data already exists in OneLake.

Direct Lake allows Power BI to work with that data without first copying the full table into a traditional Import model.


How Direct Lake Loads Data

Suppose your Sales table contains:

Date
Product
Customer
Region
Quantity
Revenue
Discount
Salesperson
Channel

A report visual asks only for:

Revenue by Region

Power BI does not necessarily need every column in the Sales table.

It may need only:

Region
Revenue

plus any additional columns required by relationships or measures.

Direct Lake can load those required columns from OneLake into memory.

Conceptually:

Sales table in OneLake

Date
Product
Customer
Region      ──────┐
Quantity           │
Revenue     ──────┤
Discount           │
Salesperson        │
Channel            │
                   ↓
        Required columns loaded
                   ↓
             Power BI query

Microsoft calls this on-demand column-loading process transcoding.

Once a column has been loaded into memory, later queries can reuse it while it remains resident in memory.

That is one of the reasons Direct Lake can provide very fast analytical performance.


Direct Lake vs DirectQuery

This distinction is extremely important.

At first glance, both seem to leave the data outside the semantic model.

But the query path is different.


DirectQuery

With DirectQuery:

Report
  ↓
Semantic Model
  ↓
Query
  ↓
Database / Warehouse Engine
  ↓
Results
  ↓
Report

Power BI sends a query to the source system.

The source engine processes that query and returns the result.


Direct Lake

With Direct Lake:

Report
  ↓
Semantic Model
  ↓
Required columns
  ↓
OneLake

Power BI can load the required column data directly from the underlying OneLake storage into memory.

It does not need to send every analytical query through a traditional relational database engine.

So a useful distinction is:

DirectQuery asks the source engine for an answer.
Direct Lake loads the required OneLake columns so the semantic model can answer the query efficiently.

This is why Direct Lake should not simply be described as:

“DirectQuery for a data lake.”

They are different architectures.


Does Direct Lake Require Refresh?

This is where Direct Lake becomes slightly more nuanced.

Direct Lake does not use refresh in exactly the same way as traditional Import.

Instead, it uses a process called framing.

Framing updates the semantic model's view of the Delta tables in OneLake.

Conceptually:

OneLake table changes
      ↓
New Delta / Parquet files
      ↓
Framing operation
      ↓
Semantic model recognizes latest table state

The framing operation is normally much lighter than importing the entire table again.

However, this means Direct Lake should not simply be described as:

“It always sees every new row instantly.”

The semantic model queries the table state associated with its latest framing operation.

So data freshness still needs to be managed.


Direct Lake Can Also Be Used in Composite Models

Direct Lake does not necessarily mean every table in the semantic model must use Direct Lake.

Direct Lake on OneLake can participate in composite models.

For example:

Sales          = Direct Lake
Product        = Import
Budget         = Import
External Data  = DirectQuery

This can be useful when a very large fact table lives in OneLake but smaller supporting tables come from other sources.

So Direct Lake can also coexist with other storage modes.



When Direct Lake Is a Good Choice

Direct Lake is especially worth considering when:

  • your data is already stored in Microsoft Fabric / OneLake

  • you have very large Delta tables

  • traditional Import refresh would be expensive or difficult

  • you want strong interactive performance

  • you want to avoid repeatedly querying a relational source engine

  • your organization is already using Fabric as its analytical platform

For example:

Fabric Lakehouse
      ↓
2 billion-row Sales table
      ↓
Direct Lake
      ↓
Power BI report

This is a much more natural Direct Lake scenario than trying to introduce Direct Lake into a project that does not use Fabric.


When Direct Lake May Not Be Relevant

Direct Lake is probably not your first choice when:

  • your data does not live in Fabric / OneLake

  • your project uses a normal Excel, CSV, SQL Server, or other traditional source

  • Import already meets your performance and freshness requirements

  • your organization is not using Fabric

For example, if your data source is:

Excel workbook

you would not simply choose Direct Lake instead of Import.

Direct Lake belongs to the Fabric / OneLake architecture.


Direct Lake in One Sentence

A useful way to remember Direct Lake is:

Keep the data in OneLake and let Power BI load the required columns directly for analytical queries.
OneLake
   ↑
   │ required columns
   │
Semantic Model
   ↑
   │
Report

Live Connection

Live Connection is different from the storage modes we have discussed so far.

Import, DirectQuery, Dual, Hybrid, and Direct Lake describe how tables inside a semantic model store or access data.

Live Connection asks a different question:

Do I need to build another semantic model at all?

With Live Connection, your Power BI report connects to an already-existing semantic model instead of creating its own local semantic model.

Conceptually:

Diagram showing a Power BI report using a Live Connection to an existing semantic model.

The report reuses the tables, relationships, measures, business logic, and security already defined in the existing semantic model.


A Simple Example

Imagine your company's BI team has already created a Sales semantic model.

It contains:

Sales Semantic Model

├── Sales
├── Product
├── Customer
├── Date
│
├── Relationships
│
├── Measures
│   ├── Total Sales
│   ├── Profit Margin
│   └── Average Order Value
│
└── Security Rules

The model has already been tested and published to the Power BI service.

Now you are asked to create:

A regional sales dashboard for management.

You could build another semantic model from scratch:

SQL Database
     ↓
New Semantic Model
     ↓
Regional Sales Report

But this could mean recreating:

  • tables

  • relationships

  • measures

  • business logic

  • security rules

  • refresh processes

Instead, you can connect your report directly to the existing Sales semantic model:

Existing Sales Semantic Model
             ↑
             │ Live Connection
             │
Regional Sales Report

You can then build different visualizations while continuing to use the centralized model.


Live Connection and Import Can Exist Together

This is a very important distinction.

Suppose the centralized semantic model uses Import:

SQL Database
     ↓
   Import
     ↓
Sales Semantic Model
     ↑
     │ Live Connection
     │
Management Report

There is no contradiction here.

The semantic model uses Import to access its source data.

The report uses Live Connection to access the semantic model.

So we are describing two different layers.

SOURCE → SEMANTIC MODEL → REPORT
           ↑                ↑
         Import        Live Connection

This is why Live Connection should not simply be placed beside Import and DirectQuery as though they are equivalent storage choices.


DirectQuery vs Live Connection

These two are especially easy to confuse because both involve querying something remotely.

But they operate at different levels.


DirectQuery

DirectQuery connects a semantic model to a data source.

Database
    ↑
    │ DirectQuery
    │
Semantic Model
    ↑
    │
Report

Power BI's semantic model sends queries to the source database.


Live Connection

Live Connection connects a report to an existing semantic model.

Existing Semantic Model
          ↑
          │ Live Connection
          │
        Report

A simple way to remember this is:

DirectQuery = model → data source
Live Connection = report → semantic model

That distinction is one of the most important concepts in this entire article.


What Can You Connect to Using Live Connection?

In Power BI, Live Connection can be used with existing analytical models such as:

  • a Power BI semantic model in the Power BI service

  • Azure Analysis Services

  • SQL Server Analysis Services

For many modern Power BI users, the most common scenario will be connecting to another Power BI semantic model.

In Power BI Desktop, you can do this by choosing:

Get Data
   ↓
Power BI semantic models
   ↓
Select a published semantic model
   ↓
Connect

Power BI then loads the fields from that semantic model so you can start building your report.


What Is a Thin Report?

A report that uses a Live Connection to an existing semantic model is often called a thin report.

Why "thin"?

Because the report mainly contains the reporting layer:

Pages
Visuals
Filters
Formatting
Report-level calculations

while the main semantic model exists somewhere else.

Conceptually:

        CENTRAL SEMANTIC MODEL
        ┌─────────────────────┐
        │ Tables              │
        │ Relationships       │
        │ Measures            │
        │ Business logic      │
        │ Security            │
        └──────────┬──────────┘
                   │
          ┌────────┼────────┐
          │        │        │
          ▼        ▼        ▼
       Report A Report B Report C
       "thin"   "thin"   "thin"

Multiple reports can therefore reuse the same trusted semantic model.


Why Is This Useful?

Imagine ten analysts all need Sales data.

Without a shared model:

Analyst 1 → Sales Model 1
Analyst 2 → Sales Model 2
Analyst 3 → Sales Model 3
Analyst 4 → Sales Model 4
...

Each analyst may create slightly different measures.

One defines Revenue as:

SUM(Sales[Revenue])

Another removes refunds.

Another excludes cancelled orders.

Another uses Gross Sales instead.

You could end up with several reports showing different answers to the same question.

With a centralized semantic model:

                  Sales Semantic Model
                         │
        ┌────────────────┼────────────────┐
        │                │                │
        ▼                ▼                ▼
 Finance Report     Sales Report    Executive Report

Everyone uses the same:

  • Revenue definition

  • relationships

  • calendar logic

  • customer definitions

  • security rules

  • business measures

This helps create a single source of truth.


What Happens When the Semantic Model Is Updated?

Because the reports connect to the centralized semantic model, changes to that model can affect all reports that use it.

For example, suppose the BI team updates:

Profit Margin

or adds:

Year-to-Date Sales

Reports connected to that semantic model can use the updated model without each report creator rebuilding the same logic independently.

This is powerful, but it also means the semantic model should be managed carefully.

Removing or renaming fields that existing reports depend on can break those reports.

So centralized semantic models introduce both:

consistency

and

dependency

What Can You Change in a Live-Connected Report?

With a pure Live Connection, you primarily work at the report layer.

You can build:

  • visuals

  • pages

  • filters

  • slicers

  • formatting

  • report-level calculations supported by the connection

But you do not have the same freedom to redesign the underlying remote model as if you owned a normal local Import model.

For example, you cannot simply change the remote model's tables and relationships from your thin report.

That model is controlled separately.

This is actually part of the purpose of Live Connection:

One team can manage the data model while other users concentrate on report design and analysis.

What If I Need to Add My Own Data?

This is where Power BI becomes more interesting.

Imagine you are connected live to:

Corporate Sales Semantic Model

but you also want to add:

Local Excel Targets

A pure Live Connection would normally mean your report relies on the remote semantic model.

However, Power BI allows you to select:

Make changes to this model

When you do this, Power BI creates a local semantic model and converts the connection to the remote Power BI semantic model into a DirectQuery connection.

You can then build a composite model.

Conceptually:

Remote Sales Semantic Model
            ↑
       DirectQuery
            │
      Local Semantic Model
            │
      ┌─────┴─────┐
      │           │
Remote data   Excel Targets
                  │
                Import

Your report can now combine:

  • tables from the remote semantic model

  • your own local tables

  • local relationships

  • additional modeling logic

At this point, however, it is no longer a pure Live-connected thin report.

You now have a local composite semantic model.


Pure Live Connection vs Composite Model


Pure Live Connection

Remote Semantic Model
         ↑
         │
       Report

No local semantic model.

Simple.

Centralized.


After "Make changes to this model"

Remote Semantic Model
         ↑
     DirectQuery
         │
Local Semantic Model
         │
    Local Tables
         │
       Report

Now you have a composite model and more modeling flexibility.

This distinction becomes important when working with enterprise semantic models.


Does Live Connection Determine Data Freshness?

No.

This is another important misconception.

Suppose your Live-connected report uses this semantic model:

SQL Database
     ↓
Import
     ↓
Sales Semantic Model
     ↑
Live Connection
     ↓
Report

If the Sales semantic model was last refreshed at 8:00 AM, your Live-connected report is still working with that 8:00 AM snapshot.

Live Connection does not magically turn imported data into real-time data.

Another semantic model could instead use:

Database
    ↑
DirectQuery
    │
Semantic Model
    ↑
Live Connection
    │
Report

Now the underlying model has different freshness characteristics.

So remember:

Live Connection determines how the report accesses the semantic model—not how the semantic model accesses its original data.

When Live Connection Is a Good Choice

Live Connection is especially useful when:

  • a trusted semantic model already exists

  • multiple reports need to use the same data model

  • business measures should be defined consistently

  • you want centralized governance

  • you want to avoid duplicating semantic models

  • different report creators need the same underlying data

  • one team manages data modeling while other teams build reports

For example:

Enterprise Finance Semantic Model
               │
       ┌───────┼────────┐
       ▼       ▼        ▼
CFO Report  Budget   Regional
            Report   Report

There is little reason for each report creator to rebuild the Finance model separately.


When Live Connection May Not Be the Best Choice

Live Connection may not be appropriate when:

  • no suitable semantic model already exists

  • you need significant control over the underlying model

  • you need to combine many additional local data sources

  • the existing semantic model does not contain the data or logic you need

In those situations, you may need to:

  • build your own semantic model

  • create a composite model

  • or work with the model owner to extend the centralized semantic model


Live Connection in One Sentence

A useful way to remember Live Connection is:

Build a report on top of an existing semantic model instead of building another model.
Existing Semantic Model
          ↑
          │
    Live Connection
          │
          ↑
        Report

Live Connection vs the Five Storage Modes

We can now make an important distinction.

These describe how tables in a semantic model access or store data:

Import
DirectQuery
Dual
Hybrid
Direct Lake

This describes how a report connects to a semantic model:

Live Connection

So the complete architecture might look like this:

Original Data Source
        │
        │
        ▼
┌──────────────────────┐
│   Semantic Model     │
│                      │
│ Import               │
│ DirectQuery          │
│ Dual                 │
│ Hybrid               │
│ Direct Lake          │
└──────────┬───────────┘
           │
           │ Live Connection
           ▼
┌──────────────────────┐
│       Report         │
└──────────────────────┘

This is why Live Connection should not be treated as simply a sixth storage mode.

It operates at a different layer.


Which One Should You Actually Use in a Real Power BI Project?

The answer depends on more than just dataset size.

You also need to consider:

  • how fresh the data needs to be

  • whether the source can handle interactive queries

  • how quickly the model can refresh

  • how important report performance is

  • whether your data already lives in Microsoft Fabric / OneLake

  • whether a trusted semantic model already exists

A good rule of thumb is to start with Import unless you have a clear reason not to.

Import is often the simplest option and usually provides strong interactive performance. Other modes become useful when you have specific requirements around scale, freshness, Fabric architecture, or semantic-model reuse.


Power BI Storage Modes: Quick Comparison

The table below summarizes the main differences between Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection.

Comparison table of Power BI Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection, including use cases and trade-offs.

Decision Guide

If you are still unsure which option to consider, the decision tree below provides a practical starting point.

Decision tree for choosing between Power BI Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection in a real project.

The decision is not about choosing the most advanced option.

It is about choosing the simplest architecture that meets the requirements of the project.

If Import can handle your data size, refresh frequency, and performance needs, there may be no reason to introduce DirectQuery or Hybrid.

If your data is already in OneLake, Direct Lake may be a more natural fit.

And if your organization already has a trusted semantic model, a Live Connection may allow you to build the report without creating another model at all.


Final Takeaway

The easiest way to remember these concepts is:

Import — bring the data to Power BI.
DirectQuery — query the source when data is needed.
Dual — allow a table to behave as Import or DirectQuery.
Hybrid — import historical data and DirectQuery the latest data.
Direct Lake — work directly with data stored in OneLake.
Live Connection — build a report on top of an existing semantic model.

You do not need to use the most complex storage mode to build a good Power BI solution.

Choose the option that best balances performance, freshness, scale, source workload, architecture, and maintainability.

In many projects, that still means starting with Import and moving to another approach only when the business requirements justify it.


Test Your Understanding

You’ve now seen how Import, DirectQuery, Dual, Hybrid, Direct Lake, and Live Connection differ.

Try these five scenario-based questions to see whether you can choose the right option for different Power BI situations.


Comments


bottom of page