{"id":833480,"date":"2026-01-19T10:56:09","date_gmt":"2026-01-19T09:56:09","guid":{"rendered":"https:\/\/www.devoteam.com\/expert-view\/power-apps-to-streamlit-in-snowflake\/"},"modified":"2026-01-19T10:56:09","modified_gmt":"2026-01-19T09:56:09","slug":"power-apps-to-streamlit-in-snowflake","status":"publish","type":"expert-view","link":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/","title":{"rendered":"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">When our team set out to rebuild our supplier data management and carbon rate calculation tool, we had two clear goals: maintain feature parity with our existing Power Apps solution while dramatically improving performance and debuggability. Our Power Apps implementation was functional but suffered from slow performance and debugging difficulties that slowed development and frustrated users. After evaluating options, we chose Streamlit with Snowflake as our backend, and the results exceeded our expectations.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This article shares the lessons I learned migrating a production application from Power Apps to Streamlit in Snowflake, focusing on practical insights that might help others considering a similar move.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-context-why-we-migrated-nbsp\">The Context: Why We Migrated&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our application handles Excel files from multiple suppliers, each containing product data that we need to validate, process, and analyse for carbon footprint calculations. The workflow includes:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Reading and parsing supplier Excel files&nbsp;<\/li>\n\n\n\n<li>Running comprehensive data quality checks&nbsp;<\/li>\n\n\n\n<li>Calculating carbon rates for each product&nbsp;<\/li>\n\n\n\n<li>Loading validated data into our data warehouse&nbsp;<\/li>\n\n\n\n<li>Visualising statistics on historical data&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-we-chose-streamlit-nbsp\">Why We Chose Streamlit&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After evaluating options, Streamlit stood out for three reasons. First, the technical team already knew Python and the client were on Snowflake, so the learning curve would be manageable. Second, Streamlit is built specifically for data applications and featured in Snowflake, which aligned perfectly with our use case. Third, it would give us access to proper development tools, the kind software engineers take for granted but that were frustratingly absent in Power Apps.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While Power Apps served us initially, two critical issues drove the migration decision:&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Performance: <\/strong>Processing times were becoming unacceptable as our data volume grew, creating bottlenecks in daily operations. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Debugging challenges: <\/strong>When issues arose, troubleshooting Power Apps was difficult and time-consuming. The lack of traditional debugging tools made it hard to identify root causes quickly.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The mandate was clear: rebuild with the same features, but make it faster and easier to debug and maintain.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-key-lessons-learned-nbsp\">Key Lessons Learned&nbsp;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-performance-gains-were-immediate-and-dramatic-nbsp\">Performance Gains Were Immediate and Dramatic&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The most striking difference was speed. <\/strong>What took minutes in Power Apps now takes seconds in Streamlit. This wasn&#8217;t about optimisation or clever coding, Streamlit paired with Snowflake is simply fast out of the box.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>If performance is your primary pain point, Streamlit delivers without requiring extensive optimisation. Python&#8217;s mature data processing ecosystem (Pandas, NumPy) combined with Streamlit&#8217;s efficient rendering and Snowflake data processing makes it naturally suited for data-heavy applications.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-debugging-went-from-painful-to-pleasant-nbsp\">Debugging Went from Painful to Pleasant&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In Power Apps, debugging meant clicking through screens, checking formulas in various places, and often resorting to trial-and-error. With Streamlit and Python, I had access to proper debugging tools: breakpoints, print statements, stack traces, and logging.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>The ability to use standard development tools is invaluable. When something breaks, you can see exactly where and why. Stack traces, VS Code debugging, and even simple print statements make troubleshooting exponentially faster.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Example:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import logging\n# Set up logging\nlogging.basicConfig(level=logging.DEBUG)\nlogger = logging.getLogger(__name__)\ndef calculate_carbon_rate(product_data):\n           logger.debug(f\"Calculating carbon rate for: {product_data&#91;'product_id']}\")\n           try:\n                   rate = (product_data&#91;'emissions'] \/ product_data&#91;'weight']) * 100\n                   logger.info(f\"Carbon rate calculated: {rate}\")\n                   return rate\n           except KeyError as e:\n                   logger.error(f\"Missing required field: {e}\")\n                   raise\n           except ZeroDivisionError:\n                   logger.error(f\"Zero weight for product: {product_data&#91;'product_id']}\")\n                   return None<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This level of visibility into what&#8217;s happening was nearly impossible in Power Apps.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-data-quality-checks-are-easier-to-implement-and-maintain-nbsp\">Data Quality Checks Are Easier to Implement and Maintain&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In Power Apps, implementing complex validation logic required working across multiple screens and formulas. In Streamlit with Python, data quality checks became straightforward functions.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>When your application is fundamentally about data validation and transformation, using a general-purpose programming language gives you flexibility that visual builders can&#8217;t match.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pattern that worked well:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def run_data_quality_checks(df):\n      \"\"\"Run all validation checks and return results\"\"\"\n      checks = {\n           'missing_values': check_missing_values(df),\n           'data_types': validate_data_types(df),\n           'range_validation': check_value_ranges(df),\n           'business_rules': validate_business_rules(df)\n      }\n      return checks\n# Display results with clear visual feedback\nresults = run_data_quality_checks(df)\nfor check_name, check_result in results.items():\n    if check_result&#91;'passed']:\n       st.success(f\"\u2713 {check_name}\")\n    else:\n       st.error(f\"\u2717 {check_name}: {check_result&#91;'errors']}\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-snowflake-integration-was-seamless-nbsp\">Snowflake Integration Was Seamless&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Connecting to Snowflake from Streamlit was simple because it came with Snowflake 3 years ago. Loading validated data to tables became a few lines of code.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Streamlit works beautifully with modern data stacks. If you&#8217;re already using Snowflake (or similar cloud data warehouses), the integration is natural and well-documented.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-session-state-management-requires-thought-nbsp\">Session State Management Requires Thought&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One area where Power Apps had an advantage was automatic state management. In Streamlit, you need to explicitly manage state using st.session_state .&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Plan your session state strategy early. Decide what needs to persist across reruns (uploaded files, user selections, calculation results) and what can be recomputed.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Useful pattern:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Initialize session state\nif 'processed_data' not in st.session_state:\n    st.session_state.processed_data = None\nif 'quality_check_results' not in st.session_state:\n    st.session_state.quality_check_results = None\n\n# Use it throughout your app\nif st.button(\"Process File\"):\n    st.session_state.processed_data = process_excel(uploaded_file)\n    st.session_state.quality_check_results = run_checks(st.session_state.processed_data)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-visualisation-capabilities-are-superior-nbsp\">Visualisation Capabilities Are Superior&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">While Power Apps has charting capabilities, Streamlit&#8217;s access to the entire Python visualisation ecosystem (Plotly, Matplotlib, Altair) gave us much more flexibility for our statistics dashboard.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>If data visualisation is important to your application, Streamlit&#8217;s integration with Python&#8217;s visualisation libraries provides professional-grade charts with minimal code.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-deployment-and-version-control-are-developer-friendly-nbsp\">Deployment and Version Control Are Developer-Friendly&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">With Power Apps, version control and deployment were managed through Microsoft&#8217;s platform. With Streamlit, we used Azure DevOps for code deployment so we gained:&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Git-based version control (standard software development practices)&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Easy rollbacks and feature branching&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CI\/CD integration possibilities&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Treating your application as code rather than a low-code configuration makes team collaboration and deployment much smoother for technical teams.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-caching-is-your-friend-nbsp\">Caching Is Your Friend&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Streamlit&#8217;s caching decorators ( @st.cache_data and @st.cache_resource ) were crucial for maintaining performance, especially for expensive operations like file parsing and database connections.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Learn Streamlit&#8217;s caching mechanisms early. They&#8217;re powerful but require understanding when to cache and when not to.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Key caching pattern:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@st.cache_data\ndef load_and_parse_excel(file):\n    \"\"\"Cache expensive file parsing\"\"\"\n    return pd.read_excel(file)\n@st.cache_data(ttl=3600) # Cache for 1 hour\ndef get_historical_statistics():\n    \"\"\"Cache database queries with TTL\"\"\"\n    return query_snowflake_for_stats()\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-error-handling-needs-to-be-explicit-nbsp\">Error Handling Needs to Be Explicit&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Power Apps provided built-in error handling UI. In Streamlit, you need to handle exceptions and display user friendly messages yourself.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Wrap operations in try-except blocks and use Streamlit&#8217;s message containers ( st.error , st.warning , st.info ) to communicate with users effectively.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pattern:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try:\n     df = pd.read_excel(uploaded_file)\n     validate_excel_structure(df)\n     st.success(\"File loaded successfully!\")\nexcept Exception as e:\n     st.error(f\"Error processing file: {str(e)}\")\n     st.info(\"Please check that your file matches the required format.\")\n     st.stop()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-user-feedback-loops-are-important-nbsp\">User Feedback Loops Are Important&nbsp;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Without Power Apps&#8217; native notification systems, we had to be more intentional about user feedback (progress bars, status messages, confirmation dialogs).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lesson: <\/strong>Use Streamlit&#8217;s feedback components liberally. Users need to know what&#8217;s happening, especially during long-running operations.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Useful components:&nbsp;<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Progress bars for long operations\nprogress_bar = st.progress(0)\nfor i, row in enumerate(df.iterrows()):\n     process_row(row)\n     progress_bar.progress((i + 1) \/ len(df))\n# Status containers for multi-step processes\nwith st.status(\"Processing supplier data...\", expanded=True) as status:\n      st.write(\"Loading file...\")\n      df = load_file()\n      st.write(\"Running quality checks...\")\n      results = run_checks(df)\n      st.write(\"Calculating carbon rates...\")\n      df = calculate_rates(df)\n      status.update(label=\"Complete!\", state=\"complete\")\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-architecture-overview-nbsp\">Architecture Overview&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our final architecture is straightforward:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Frontend: <\/strong>Streamlit application&nbsp;<\/li>\n\n\n\n<li><strong>Processing: <\/strong>Python (Pandas for data manipulation)&nbsp;<\/li>\n\n\n\n<li><strong>Storage: <\/strong>Snowflake (validated data, historical records)&nbsp;<\/li>\n\n\n\n<li><strong>Deployment: <\/strong>Azure DevOps&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Data flow:&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. User uploads supplier Excel file&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">2. Application parses and validates data&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">3. Quality checks run on the dataset&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">4. Passing records have carbon rates calculated&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">5. Validated data loads to Snowflake&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">6. Dashboard displays statistics from historical data&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-i-d-do-differently-nbsp\">What I&#8217;d Do Differently&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Start with a clear data model: <\/strong>While Streamlit is flexible, I wish I&#8217;d spent more time upfront designing our data structure in Snowflake. We made several schema adjustments that required data migration.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Implement logging earlier: <\/strong>For production applications, proper logging is essential. We added comprehensive logging after encountering issues that were hard to debug without it.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Create reusable components sooner: <\/strong>After building several pages, I noticed patterns that could have been abstracted into reusable functions earlier, saving development time.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-when-should-you-choose-streamlit-over-power-apps-nbsp\">When Should You Choose Streamlit Over Power Apps?&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Based on this experience, consider Streamlit if:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Your team has Python developers or is comfortable learning Python&nbsp;<\/li>\n\n\n\n<li>Performance is critical (especially for data processing)&nbsp;<\/li>\n\n\n\n<li>You need complex data transformations or calculations&nbsp;<\/li>\n\n\n\n<li>You want standard version control and CI\/CD practices&nbsp;<\/li>\n\n\n\n<li>Your use case involves heavy integration with data tools (Snowflake, databases, APIs)&nbsp;<\/li>\n\n\n\n<li>Power Apps might still be better if:&nbsp;<\/li>\n\n\n\n<li>Your team is non-technical and prefers visual builders&nbsp;<\/li>\n\n\n\n<li>You&#8217;re deeply embedded in the <a href=\"https:\/\/devoteam.info\/expert-view\/microsoft-environment-which-ai-tools-for-which-uses\/\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft ecosystem<\/a>&nbsp;<\/li>\n\n\n\n<li>You need tight integration with Microsoft 365 tools&nbsp;<\/li>\n\n\n\n<li>Your application is workflow-heavy rather than data-heavy&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion-nbsp\">Conclusion&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Migrating from Power Apps to Streamlit transformed our application from a functional but sluggish tool into a fast, maintainable solution that our team actually enjoys using. The performance improvement alone justified the migration, but the gains in developer experience and maintainability were equally valuable.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For technical teams working with data-intensive applications, Streamlit offers a compelling alternative to low-code platforms. The learning curve is gentle if you know Python, and the results can be production-ready surprisingly quickly.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The best part? Our users immediately noticed the difference. When your application responds in seconds instead of minutes, it changes how people work with it.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-resources-nbsp\">Resources&nbsp;<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.streamlit.io\" target=\"_blank\" rel=\"noreferrer noopener\">Streamlit Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.snowflake.com\/en\/user-guide\/python-connector.html\" target=\"_blank\" rel=\"noreferrer noopener\">Snowflake Connector for Python<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.streamlit.io\/library\/advanced-features\/session-state\" target=\"_blank\" rel=\"noreferrer noopener\">Streamlit Session State Guide<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.streamlit.io\/library\/advanced-features\/caching\" target=\"_blank\" rel=\"noreferrer noopener\">Streamlit Caching Best Practices<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>When our team set out to rebuild our supplier data management and carbon rate calculation tool, we had two clear goals: maintain feature parity with our existing Power Apps solution while dramatically improving performance and debuggability. Our Power Apps implementation was functional but suffered from slow performance and debugging difficulties that slowed development and frustrated [&hellip;]<\/p>\n","protected":false},"featured_media":81798,"template":"","categories":[986,4607],"tags":[],"industry":[],"class_list":["post-833480","expert-view","type-expert-view","status-publish","has-post-thumbnail","hentry","category-data-en-nl","category-snowflake-en-nl"],"acf":[],"cards":"\n\t<div class=\"single-post-card\">\n\n\t\t<figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/\" target=\"_self\" ><img width=\"1920\" height=\"1080\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator\" style=\"aspect-ratio:4\/3;width:100%;object-fit:cover;\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg 1920w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-300x169.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-1024x576.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-768x432.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-1536x864.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\t\t\n\t\t<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-43282307 wp-block-group-is-layout-flex\">\n\t<p style=\"font-style:normal;font-weight:700\" class=\"has-link-color wp-elements-1 wp-block-lp-post-type has-text-color has-primary-color has-small-font-size\">Expert View<\/p>\n\n\t\t\n\t\t<h3 style=\"font-style:normal;font-weight:400\" class=\"wp-block-post-title has-base-font-size\"><a href=\"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/\" target=\"_self\" >Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator<\/a><\/h3><\/div>\n\t\t\n\t<\/div>\n\n","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator | Devoteam<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator\" \/>\n<meta property=\"og:description\" content=\"When our team set out to rebuild our supplier data management and carbon rate calculation tool, we had two clear goals: maintain feature parity with our existing Power Apps solution while dramatically improving performance and debuggability. Our Power Apps implementation was functional but suffered from slow performance and debugging difficulties that slowed development and frustrated [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/\" \/>\n<meta property=\"og:site_name\" content=\"Devoteam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/\",\"url\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/\",\"name\":\"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator | Devoteam\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/GettyImages-1345491010_Edited.jpg\",\"datePublished\":\"2026-01-19T09:56:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/#breadcrumb\"},\"inLanguage\":\"en-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NL\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/#primaryimage\",\"url\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/GettyImages-1345491010_Edited.jpg\",\"contentUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/GettyImages-1345491010_Edited.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/power-apps-to-streamlit-in-snowflake\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Expert View\",\"item\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/expert-view\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/#website\",\"url\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/\",\"name\":\"Devoteam\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/devoteam.info\\\/en-nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator | Devoteam","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/","og_locale":"en_US","og_type":"article","og_title":"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator","og_description":"When our team set out to rebuild our supplier data management and carbon rate calculation tool, we had two clear goals: maintain feature parity with our existing Power Apps solution while dramatically improving performance and debuggability. Our Power Apps implementation was functional but suffered from slow performance and debugging difficulties that slowed development and frustrated [&hellip;]","og_url":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/","og_site_name":"Devoteam","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/","url":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/","name":"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator | Devoteam","isPartOf":{"@id":"https:\/\/devoteam.info\/en-nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/#primaryimage"},"image":{"@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/#primaryimage"},"thumbnailUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg","datePublished":"2026-01-19T09:56:09+00:00","breadcrumb":{"@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/#breadcrumb"},"inLanguage":"en-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/"]}]},{"@type":"ImageObject","inLanguage":"en-NL","@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/#primaryimage","url":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg","contentUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/devoteam.info\/en-nl\/expert-view\/power-apps-to-streamlit-in-snowflake\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devoteam.info\/en-nl\/"},{"@type":"ListItem","position":2,"name":"Expert View","item":"https:\/\/devoteam.info\/en-nl\/expert-view\/"},{"@type":"ListItem","position":3,"name":"Migrating from Power Apps to Streamlit in Snowflake: Lessons Learned Building a Carbon Rate Calculator"}]},{"@type":"WebSite","@id":"https:\/\/devoteam.info\/en-nl\/#website","url":"https:\/\/devoteam.info\/en-nl\/","name":"Devoteam","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devoteam.info\/en-nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-NL"}]}},"uagb_featured_image_src":{"full":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg",1920,1080,false],"thumbnail":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-150x150.jpg",150,150,true],"medium":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-300x169.jpg",300,169,true],"medium_large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-768x432.jpg",768,432,true],"large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited-1536x864.jpg",1536,864,true],"2048x2048":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/11\/GettyImages-1345491010_Edited.jpg",1920,1080,false]},"uagb_author_info":{"display_name":"julien.lemarchal","author_link":"https:\/\/devoteam.info\/en-nl\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"When our team set out to rebuild our supplier data management and carbon rate calculation tool, we had two clear goals: maintain feature parity with our existing Power Apps solution while dramatically improving performance and debuggability. Our Power Apps implementation was functional but suffered from slow performance and debugging difficulties that slowed development and frustrated&hellip;","_links":{"self":[{"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/expert-view\/833480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/expert-view"}],"about":[{"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/types\/expert-view"}],"version-history":[{"count":0,"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/expert-view\/833480\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/media\/81798"}],"wp:attachment":[{"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/media?parent=833480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/categories?post=833480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/tags?post=833480"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/devoteam.info\/en-nl\/wp-json\/wp\/v2\/industry?post=833480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}