<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Przemysław Kujda</title>
    <description>The latest articles on DEV Community by Przemysław Kujda (@przemq99).</description>
    <link>https://dev.to/przemq99</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032091%2F9ea4f491-56e1-4ebf-8b6a-5f1cb60bb72c.jpg</url>
      <title>DEV Community: Przemysław Kujda</title>
      <link>https://dev.to/przemq99</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/przemq99"/>
    <language>en</language>
    <item>
      <title>What Microsoft Fabric Apps unlocked for me (and why I am writing about it)</title>
      <dc:creator>Przemysław Kujda</dc:creator>
      <pubDate>Thu, 16 Jul 2026 13:05:30 +0000</pubDate>
      <link>https://dev.to/przemq99/what-microsoft-fabric-apps-unlocked-for-me-and-why-i-am-writing-about-it-4nge</link>
      <guid>https://dev.to/przemq99/what-microsoft-fabric-apps-unlocked-for-me-and-why-i-am-writing-about-it-4nge</guid>
      <description>&lt;p&gt;The latest wave of Microsoft Fabric updates made a strong impression on me. Not because of another feature checkbox on a roadmap, but because it became clear that Fabric is no longer "just" a platform for warehouses, pipelines, and notebooks.&lt;/p&gt;

&lt;p&gt;It is becoming a place where you can ship &lt;strong&gt;real analytical applications&lt;/strong&gt; that feel like products, not only reports.&lt;br&gt;
That realization is why I decided to write this article, and why I started building my first &lt;strong&gt;Fabric App&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is still an early version of the work. I am learning the surface area of Fabric Apps as I go, and I am sure that with deeper exploration we will be able to build even stronger solutions. Even at this stage, though, the pattern already feels powerful enough to share.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Fabric Apps give us
&lt;/h2&gt;

&lt;p&gt;For a long time, if you wanted a custom analytics experience (not only Power BI pages, but also your own UI, navigation, workflows, and AI copilots), you often ended up designing a full-stack product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend&lt;/li&gt;
&lt;li&gt;backend&lt;/li&gt;
&lt;li&gt;authentication&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;hosting&lt;/li&gt;
&lt;li&gt;permission plumbing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That path still works. It is also heavy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fabric Apps change the trade-off.&lt;/strong&gt;&lt;br&gt;
Because the experience lives on Fabric and can talk to your &lt;strong&gt;semantic model&lt;/strong&gt; (and other Fabric capabilities) through the platform, you can focus much more on the &lt;strong&gt;frontend layer&lt;/strong&gt;: the product surface your users actually touch. You do not need to reinvent an entire backend just to answer a business question.&lt;/p&gt;

&lt;p&gt;In practice, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one shared &lt;strong&gt;semantic model&lt;/strong&gt; as the source of truth&lt;/li&gt;
&lt;li&gt;the ability to combine &lt;strong&gt;native Power BI visuals&lt;/strong&gt; with &lt;strong&gt;custom React interfaces&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;room for UX patterns that classic report pages do not express well: guided navigation, AI chat, storytelling, interactive showcases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feels less like "publishing a report" and more like delivering a product: one connected experience, built on a single source of truth, tailored to the business case.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why this matters for reporting
&lt;/h2&gt;

&lt;p&gt;To make that concrete, here is how I think about the split:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Situation&lt;/th&gt;
&lt;th&gt;Recommended surface&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing Power BI report already works well&lt;/td&gt;
&lt;td&gt;Embed native report inside the app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Users need guided navigation or onboarding&lt;/td&gt;
&lt;td&gt;Build a custom React page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Q&amp;amp;A or conversational interface&lt;/td&gt;
&lt;td&gt;Custom page with semantic model queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational briefing for non-analyst users&lt;/td&gt;
&lt;td&gt;Custom page with curated KPIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ad-hoc exploration by analysts&lt;/td&gt;
&lt;td&gt;Native Power BI report&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The interesting part is the mix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where Power BI is already excellent → &lt;strong&gt;embed the native report&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;where the experience needs to feel more like a product → &lt;strong&gt;build a custom page&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;and everywhere → keep both sides connected to the &lt;strong&gt;same semantic model&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the business case, you choose the right surface, without splitting the truth across multiple disconnected systems.&lt;br&gt;
That is what excited me most: Fabric Apps make this hybrid model feel natural.&lt;/p&gt;


&lt;h2&gt;
  
  
  What I built (first version)
&lt;/h2&gt;

&lt;p&gt;I built a multi-page Fabric App around a Sales &amp;amp; Logistics semantic model.&lt;br&gt;
Below is a walkthrough of the modules. I will keep this high-level for now. If useful, I can go deeper on specific capabilities in follow-up posts.&lt;/p&gt;
&lt;h3&gt;
  
  
  1) Home: the entry point
&lt;/h3&gt;

&lt;p&gt;A launchpad that introduces the experience and routes users into each module.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fin9okzuu2ew951syshxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fin9okzuu2ew951syshxf.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2) Custom Dashboard: live semantic-model analytics
&lt;/h3&gt;

&lt;p&gt;A custom React dashboard that queries the Fabric semantic model directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KPI cards&lt;/li&gt;
&lt;li&gt;monthly trends&lt;/li&gt;
&lt;li&gt;customer ranking with cross-filtering&lt;/li&gt;
&lt;li&gt;logistics views&lt;/li&gt;
&lt;li&gt;CSV export&lt;/li&gt;
&lt;li&gt;auto-generated "quick insights"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpxkfsr1a1m3y6f2pa4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpxkfsr1a1m3y6f2pa4b.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnksta1b5elzsa2jqt6uo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnksta1b5elzsa2jqt6uo.gif" alt=" " width="719" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the hand-built product UI side of Fabric Apps — a custom React layer querying the semantic model directly via the Fabric REST API, but sharing the same business logic as the native reports. No duplicated measures, no separate data source.&lt;/p&gt;

&lt;p&gt;Implementation note: querying the semantic model&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getFabricClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;semanticModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bypassCache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;KPIs and charts are driven by live queries against the Fabric semantic model.&lt;/p&gt;




&lt;h3&gt;
  
  
  3) Native Power BI Reports: chromeless Power BI inside the app
&lt;/h3&gt;

&lt;p&gt;A native Power BI report embedded inside the app (without the usual chrome), with page selection for the pages we want users to see.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0vma7pqex9dz3qzmiccn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0vma7pqex9dz3qzmiccn.gif" alt=" " width="759" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This shows the complementary pattern: keep strong Power BI work where it already shines, and deliver it inside the same app shell.&lt;/p&gt;




&lt;h3&gt;
  
  
  4) AI Assistant: questions against real numbers
&lt;/h3&gt;

&lt;p&gt;An AI analyst that answers questions about KPIs and trends using results computed from the semantic model.&lt;br&gt;
It also adapts to the language of the question (English or Polish).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ihaecsa7ljc70dz7gyy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9ihaecsa7ljc70dz7gyy.gif" alt=" " width="759" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One design choice that shaped the whole assistant: the AI does not freely generate DAX for every question.&lt;/p&gt;

&lt;p&gt;The pattern I used instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A set of pre-defined, safe queries covers the core KPIs and trends&lt;/li&gt;
&lt;li&gt;The language model receives the computed results (not raw data) and interprets them in natural language&lt;/li&gt;
&lt;li&gt;Only for questions outside that scope does the assistant fall back to a templated response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why does this matter? Letting an LLM generate arbitrary DAX looks impressive in a demo and breaks in production. Computed metrics first, language last — that order makes the assistant actually usable outside a controlled environment.&lt;/p&gt;

&lt;p&gt;Implementation note: keeping AI grounded in real numbers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metrics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchCoreMetrics&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;generateGeminiText&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;buildPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Safe queries first, language model only for the answer.&lt;/p&gt;




&lt;h3&gt;
  
  
  5) Product Showcase and Visual Lab: what custom UX can feel like
&lt;/h3&gt;

&lt;p&gt;Two showcase pages focused on interaction and visualization (mock data on purpose):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product drill-down panels&lt;/li&gt;
&lt;li&gt;animated charts&lt;/li&gt;
&lt;li&gt;KPI rings&lt;/li&gt;
&lt;li&gt;heatmaps&lt;/li&gt;
&lt;li&gt;other custom visuals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjov1x17qbv2epz3cnmf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjov1x17qbv2epz3cnmf.gif" alt=" " width="719" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These pages are a proof of concept for one idea: the UI ceiling in Fabric Apps is much higher than in classic Power BI. Animated charts, KPI rings, drill-down panels — all of it is standard React, which means you are not limited to what the Power BI visual marketplace offers.&lt;/p&gt;




&lt;h2&gt;
  
  
  A note on tools (and Cursor)
&lt;/h2&gt;

&lt;p&gt;Even with React experience, building this kind of app still involves a lot of moving parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;layout and navigation&lt;/li&gt;
&lt;li&gt;embedding and tokens&lt;/li&gt;
&lt;li&gt;semantic-model querying&lt;/li&gt;
&lt;li&gt;UX polish&lt;/li&gt;
&lt;li&gt;iteration speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cursor made a huge difference.&lt;/strong&gt;&lt;br&gt;
From shaping the report layout and page structure to implementing features and debugging edge cases, it significantly accelerated the work.&lt;br&gt;
The areas where it helped most: scaffolding the React component structure, debugging token and embedding errors, and iterating on layout without losing context across files.&lt;br&gt;
For me, it is not a replacement for understanding the stack — it is a force multiplier, especially when the platform itself is still evolving fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  This is only the beginning
&lt;/h2&gt;

&lt;p&gt;Everything above is a &lt;strong&gt;first version&lt;/strong&gt;. The more I dig into Fabric Apps, the clearer it becomes that this is a foundation for richer solutions — still with the same core idea: &lt;strong&gt;frontend-first delivery on top of Fabric&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is still an early build. The next post will go deeper on one specific capability — most likely the semantic model querying pattern from the React side.&lt;br&gt;
If you are exploring Fabric Apps, Power BI embedding, or AI copilots on top of a semantic model — drop a comment. I would love to hear what you are building.&lt;/p&gt;

&lt;p&gt;💻 GitHub repository: &lt;a href="https://github.com/przemq99/first-fabric-app" rel="noopener noreferrer"&gt;https://github.com/przemq99/first-fabric-app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microsoftfabric</category>
      <category>powerbi</category>
      <category>react</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
