Snowflake in Power BI: Should You Use DirectQuery or Import?
- nitin rungta
- Apr 23
- 5 min read
Updated: Apr 24
Part A - Understanding Snowflake Pricing Model
Snowflake uses a pay-as-you-go pricing model based on consumption of credits, which are charged for:
1. Compute usage (via Virtual Warehouses)
2. Cloud services (minimal unless metadata load is very high)
3. Storage (separately billed)
For Power BI use cases, Virtual Warehouse compute cost is the main area of focus.
Let's first quickly talk about Storage and Cloud Services
Cloud Services Cost (Minimal)
This is charged in addition to compute but is usually a small % of your total.
It covers:
Query parsing and optimization
Transaction coordination
Metadata services (SHOW commands, etc.)
Authentication and security operations
It’s not charged per warehouse, but per account, and only when it exceeds 10% of total compute cost. So it’s typically negligible for normal users.
Storage Cost (Monthly, pay-per-usage)
This is charged based on the volume of data stored, not credits.
You’re billed per terabyte per month — typically ~$23/TB/month (varies by region/cloud provider)
Types of storage:
Active storage – your tables, views, staging areas
Time Travel storage – snapshots of data (if enabled)
Fail-safe – 7-day read-only retention, not user-configurable
Storage is NOT tied to warehouse size — it's flat-rate pricing.
There are some other costs if you use more features, but we won’t get into it now.
Compute Cost (Virtual Warehouses) – the main one
This is what most people think of when they say “Snowflake costs money.”
Every query you run (manually, through Power BI, dbt, etc.) runs on a virtual warehouse
Warehouses come in sizes: X-Small, Small, Medium, Large...
Each size consumes credits per hour
The default credit cost is $3 per credit (unless you have custom/discounted pricing)
Power BI DirectQuery consumes from here for every click.
Import only consumes from here during scheduled refreshes or Loading Data in Development stages.
Summary Table
Layer | What It Covers | Billed As | Approx Cost |
---|---|---|---|
Compute | Query execution (e.g. Power BI) | Credits/hour | $3/credit |
Cloud Services | Metadata, auth, query planning | Credits (if >10%) | Usually negligible |
Storage | Data at rest (including time travel) | $/TB/month | ~$23/TB |
Optional Extras | Clustering, Snowpipe, Tasks | Credits or per event | Varies |
Understanding Compute Cost in More Detail
What is a “Credit” in Snowflake?
A credit is Snowflake’s basic billing unit for compute. You don’t pay per query, per second, or per user — you pay based on how long a warehouse runs, and how large that warehouse is.
Credit Usage = Warehouse Size × Time
Each warehouse size consumes a different number of credits per hour:
Please Note - The below table values might change. Please refer to your actual agreement with Snowflake for correct calculations.
Some places the cost for X-Small shows 0.5 credits per hour and some places show 1 credit per hour. Please use your actual bills for better Judgement.
We have taken 1 credit per hour as per the Official Documentation of Snowflake Pricing.
Warehouse Size | Hours | Credits per Hour | $ Cost (at $3/credit) |
---|---|---|---|
X-Small | 1 | 1 | $3.00/hour |
Small | 1 | 2 | $6.00/hour |
Medium | 1 | 4 | $12.00/hour |
Large | 1 | 8 | $24.00/hour |
You only pay for the warehouse while it's running — and Snowflake bills per second, with a 60-second minimum.
Example 1 – Cost of a 5-Minute Query
Here’s a breakdown of the cost of running a single 5-minute query across all main Snowflake warehouse sizes, assuming standard pricing of $3 per credit.
Warehouse Size | Credits per Hour | Time (hrs) | Credits Used | Cost per Credit | Total Cost |
---|---|---|---|---|---|
X-Small | 1 | 0.0833 | 0.0833 | $3 | $0.25 |
Small | 2 | 0.0833 | 0.1666 | $3 | $0.50 |
Medium | 4 | 0.0833 | 0.3332 | $3 | $1.00 |
Large | 8 | 0.0833 | 0.6664 | $3 | $2.00 |
Summary:
X-Small = Cheapest, but slowest
Small = Best balance for small workloads
Medium+ = Fast, but expensive for just one query
Large and X-Large = Overkill unless handling many concurrent users or heavy joins
Part B - Understanding Snowflake Pricing Model in context to Power Bi
Let’s start with the obvious — Snowflake is powerful, fast, and cloud-native. But when it comes to integrating Snowflake with Power BI, many people fall into one of two extremes:
Option 1: DirectQuery — real-time queries on live Snowflake data
Option 2: Import — snapshot the data once and refresh it periodically
So which one should you actually use?
Let’s go deeper.
DirectQuery vs Import Mode – What’s the Difference?
DirectQuery means every time a user clicks a visual in Power BI, a live SQL query is sent to Snowflake.
Import means the data is loaded from Snowflake into Power BI ahead of time. Visuals work off that snapshot — fast and local.
Here’s a side-by-side view for client education:
Feature | DirectQuery | Import |
---|---|---|
Speed for user | Depends on warehouse size; usually slower | Very fast (local cache) |
Cost impact | High — each click = Snowflake query | Minimal — only during refresh |
Max flexibility | Always live data | Data refresh needed |
Power BI functionality | Limited (some DAX/PQ not supported) | Full functionality |
Performance tuning | Depends on warehouse + modeling | Modeling only |
Now let’s apply this to a real-world scenario.
Scenario Assumptions
Direct Query -
500 end users
Each runs 5 queries per day
Each query takes ~3 seconds
That’s roughly 63 hours of Snowflake runtime per month if using DirectQuery.
Using DirectQuery (63 hrs/month)
Warehouse Size | Monthly Runtime | Monthly Cost |
---|---|---|
X-Small | 63 hrs | $189.00 |
Small | 63 hrs | $378.00 |
Medium | 63 hrs | $756.00 |
Large | 63 hrs | $1512.00 |
Import -
Lets assume it takes 1 minute for the refresh to run
You have switched on Schedule Refrsh for once per day
It means 30 minutes per month or 0.5 hrs
Using Import Mode (0.5 hrs/month)
Warehouse Size | Monthly Runtime | Monthly Cost |
---|---|---|
X-Small | 0.5 hrs | $1.50 |
Small | 0.5 hrs | $3.00 |
Medium | 0.5 hrs | $6.00 |
Large | 0.5hrs | $12.00 |
Cost Comparison (Snowflake Pricing)
Warehouse Size | DirectQuery Cost | Import Mode Cost |
---|---|---|
X-Small | $189.00 | $1.50 |
Small | $378.00 | $3.00 |
Medium | $756.00 | $6.00 |
Large | $1512.00 | $12.00 |
So... Use Import Mode?
Yes — in most cases, Import mode is the obvious winner:
Huge cost savings
Faster user experience
More Power BI features available - Like Power Query, Advance Dax, Dynamic Filter functions
But there are things to watch for.
⚠️ When Import Might Cause You Problems
Your dataset is too large to fit in memory
You need true real-time data (stock prices, logistics feeds)
You’re handling event-based streaming data that changes every few seconds
If any of these apply, then DirectQuery with a Medium or Large warehouse may be justified.
Please Note – Power BI also compresses data.
It uses an in-memory engine called VertiPaq, which reduces file size through columnar storage, dictionary encoding, and smart data typing. It also applies query folding, auto relationships, and caching to boost performance. We won’t get into more detail on this here.
These optimizations make Import mode highly efficient for analytical workloads.
In conclusion, your 1 GB of data in Excel or Snowflake might shrink to just a few hundred MB once loaded into Power BI.
Our Recommendation
Start with Import mode.
Test performance.
Only consider DirectQuery if you know:
You need real-time data, and
You’re okay with higher Snowflake compute charges
For 95% of reporting scenarios, Import Mode gives better control, better speed, and massively lower Snowflake costs.
If your Snowflake bill is growing — and you’re using Power BI DirectQuery — now you know why.
Let’s talk about optimizing it together.
Comments