top of page

The Dashboard Migration Button Won't Save Your Snowflake Credits

  • Writer: Digital Hive
    Digital Hive
  • May 6
  • 3 min read
DataBricks Certified Data Engineer Associate Exam


Snowflake has made it official. On April 20, 2026, the creation of new Snowsight dashboards was permanently disabled across all accounts. On June 22, 2026, weeks from now, Legacy Dashboards will be fully removed from Snowsight. No access. No fallback. Gone.


If you are still running legacy dashboards, you are not in a grey area. You are on a hard deadline with no exceptions.






The obvious escape hatch is Snowflake's built-in "Generate Streamlit app" button: open your dashboard, click once, done. But at best it produces equal compute to what you had. At worst, with multiple concurrent users, it can cost you more. The default warehouse runtime spins up a separate app instance per viewer, where a legacy dashboard would have served them from a shared result. This post looks at what that means in practice and what to write instead.


What the Button Produces 

The conversion tool does a 1-to-1 translation. Every dashboard tile becomes its own session.sql().to_pandas() call. The SQL is preserved verbatim. There is no caching, no in-memory filtering. A five-tile dashboard becomes five separate warehouse queries on every single page load and on every filter change.


# What the button generates 

session = get_active_session() 

df1 = session.sql("SELECT region, SUM(sales_amount) ... GROUP BY region").to_pandas() 

st.bar_chart(df1)  # warehouse hit #1 

df2 = session.sql("SELECT COUNT(DISTINCT customer_id) ...").to_pandas() 

st.metric("Customers", df2['UNIQUE_CUSTOMERS'][0])  # warehouse hit #2 

df3 = session.sql("SELECT DATE_TRUNC('month', order_date), SUM(sales_amount) ... GROUP BY 1").to_pandas() 

st.line_chart(df3)  # warehouse hit #3 


Three tiles. Three warehouse spin-ups on load. Three more on every filter interaction. You have migrated the format, not the problem.


The Right Approach: One Query, Everything in Memory

Write one broader query, cache it with @st.cache_data, and build all your charts from that single DataFrame. Filter interactions operate on the cached data in memory with zero additional warehouse invocations.


# The efficient approach 

session = get_active_session() 

@st.cache_data(ttl=3600)  # warehouse hit once per hour 

def load_data(): 

    return session.sql(""" 

        SELECT order_date, region, sales_amount, customer_id 

        FROM production.sales.fct_orders 

        WHERE order_date >= DATEADD(year, -1, CURRENT_DATE()) 

    """).to_pandas() 

df = load_data() 

# In-memory filter — no warehouse cost 

selected_region = st.sidebar.selectbox("Region", ["All"] + df['REGION'].unique().tolist()) 

filtered = df[df['REGION'] == selected_region] if selected_region != "All" else df 

# All visuals from the same cached DataFrame 

col1, col2 = st.columns(2) 

col1.metric("Total Sales", f"${filtered['SALES_AMOUNT'].sum():,.2f}") 

col2.metric("Active Customers", f"{filtered['CUSTOMER_ID'].nunique():,}") 

trend = filtered.groupby(filtered['ORDER_DATE'].dt.to_period('M'))['SALES_AMOUNT'].sum().reset_index() 

trend['ORDER_DATE'] = trend['ORDER_DATE'].dt.to_timestamp() 

st.line_chart(trend, x='ORDER_DATE', y='SALES_AMOUNT') 

Same three visuals. One warehouse query per hour. Every filter is instant and free.


The ttl=3600 parameter is the key control lever. It determines how long the DataFrame lives in memory before the warehouse is queried again. Match it to your pipeline's update frequency: overnight batch jobs can tolerate a longer TTL, operational dashboards may need a shorter one.


Button vs. Manual 

 

Generate Streamlit App 

Manual Approach 

Warehouse hits on load 

One per tile 

One total 

Warehouse hits on filter 

One per tile, every time 

Zero 

Caching 

None 

@st.cache_data 

Time to migrate 

Minutes 

Hours 

Credit efficiency 

Same as legacy 

Significantly reduced 


Which Path Should You Take?

The two approaches are not mutually exclusive. If June 22 is bearing down on you, we suggest you approach the transition to Streamlit in to phases:


  • Phase 1: Use the button to meet the deadline. Convert everything before June 22. The generated apps will work and your data stays accessible.

  • Phase 2: Refactor what matters. After the deadline, audit your converted apps. Dashboards with the most tiles, the highest traffic, or the heaviest SQL are your refactoring priorities. For each one, consolidate the tile queries into a single cached base query. Not every dashboard is worth the effort. A low-traffic internal report with two simple tiles is not. A customer-facing dashboard with daily active users is.


Conclusion

Snowflake's migration button solves one problem: keeping you off a deprecated feature before June 22. It does not fix the compute inefficiency that will make your legacy dashboards expensive.

For the full technical reference, see the official Snowflake Streamlit documentation.



Daan Vandenreyt, Data Engineer at Digital Hive.


Written by Aslan Hattukai

Data Engineer




 
 
 

2 Comments


Henry Carter
Jul 31

I spend a lot of time working with geometry problems, and having a reliable Volume Calculator has made things much easier. Instead of looking up different formulas every time, I can quickly verify my answers and move on to the next question without worrying about simple mistakes.

Like

Nancy Wheeler
Nancy Wheeler
Jun 10

The post explains that the “dashboard migration button” in Snowflake does not actually reduce costs, even though it may appear to do so. While it helps convert traditional dashboards into Streamlit apps, each visual element can still trigger separate warehouse queries, which may increase credit usage instead of saving it. I remember working on a similar data project where I thought switching tools would automatically improve efficiency but later realized optimization depends more on how queries are designed. I had used Engineering Assignment Service UK during that period while managing multiple technical tasks and deadlines, which helped me stay organized. It reminds me that real efficiency comes from understanding the system deeply rather than relying on surface-level changes.

Like
bottom of page