<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Power BI Community Blog articles</title>
    <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/bg-p/community_blog</link>
    <description>Power BI Community Blog articles</description>
    <pubDate>Sun, 25 Oct 2026 17:14:50 GMT</pubDate>
    <dc:creator>community_blog</dc:creator>
    <dc:date>2026-10-25T17:14:50Z</dc:date>
    <item>
      <title>Why To Move All Fabric Connections to Service Principal Authentication</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Why-To-Move-All-Fabric-Connections-to-Service-Principal/ba-p/5376078</link>
      <description>&lt;P&gt;&lt;STRONG&gt;The Problem with Personal Account Dependencies &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Many organizations start with data connections created using developer or analyst accounts because it is quick and convenient.&lt;/P&gt;
&lt;P&gt;Over time, this creates several challenges:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Report refreshes depend on a specific employee account.&lt;/LI&gt;
&lt;LI&gt;Password changes can break connections.&lt;/LI&gt;
&lt;LI&gt;Employee transfers or resignations create operational risks.&lt;/LI&gt;
&lt;LI&gt;Troubleshooting ownership becomes difficult.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In short, critical business reporting ends up depending on an individual's credentials.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Why Service Principal?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A Service Principal acts as a non-human identity that can authenticate securely against Fabric resources.&lt;/P&gt;
&lt;P&gt;Instead of:&lt;/P&gt;
&lt;P&gt;Report → User Account → Data Source&lt;/P&gt;
&lt;P&gt;The architecture becomes:&lt;/P&gt;
&lt;P&gt;Report → Service Principal → Data Source&lt;/P&gt;
&lt;P&gt;This means the connection belongs to the organization rather than to a specific user.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;No dependency on user accounts&lt;/LI&gt;
&lt;LI&gt;Easier onboarding and offboarding&lt;/LI&gt;
&lt;LI&gt;Better governance and security&lt;/LI&gt;
&lt;LI&gt;Reduced refresh failures caused by credential changes&lt;/LI&gt;
&lt;LI&gt;Centralized ownership of reporting assets&lt;/LI&gt;
&lt;LI&gt;Improved business continuity&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;U&gt;&lt;STRONG&gt;Implementation Approach&lt;/STRONG&gt;&lt;/U&gt;&lt;/H3&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 1: Create a Service Principal&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Create a Service Principal through Azure App Registration in Azure Portal.&lt;/P&gt;
&lt;P&gt;This will generate:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Client ID&lt;/LI&gt;
&lt;LI&gt;Tenant ID&lt;/LI&gt;
&lt;LI&gt;Client Secret&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;These credentials would later be used for authentication.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Copy the secret&amp;nbsp;&lt;STRONG&gt;Value&lt;/STRONG&gt;, not its Secret ID, and store it in your approved secret store. The value cannot be retrieved after leaving the screen&lt;/P&gt;
&lt;P&gt;Please refer this great article for setting up your Service Principal : &lt;A class="lia-external-url" href="https://help.datagaps.com/articles/#!dataops-suite/set-up-service-principal-connection" data-lia-auto-title-active="0" data-lia-auto-title="Articles" target="_blank"&gt;Link&lt;/A&gt;&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 2: Create a Security Group&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Instead of granting permissions directly to the Service Principal, add it to a dedicated security group.&lt;/P&gt;
&lt;P&gt;Create a security group in Azure Portal and and add this service principal in this se.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Benefits:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Easier permission management&lt;/LI&gt;
&lt;LI&gt;Better governance&lt;/LI&gt;
&lt;LI&gt;Future scalability&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If additional Service Principals are needed later, they can simply be added to the same group.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 3: Grant Workspace Access&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Add the security group as a member of the required Fabric workspaces.&lt;/P&gt;
&lt;P&gt;This will ensure that the Service Principal is having sufficient permissions to access workspace artifacts and related resources.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 4: Create New Connections Using the Service Principal&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Power BI Admin need to enable below 2 settings in the Admin portal for the security group we created:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Service principals can access read-only admin APIs&lt;/LI&gt;
&lt;LI&gt;Service principals can call Fabric public APIs&lt;/LI&gt;
&lt;/UL&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 5: Create New Connections Using the Service Principal&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;For each report and semantic model connection:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a new Fabric connection.&lt;/LI&gt;
&lt;LI&gt;Select Service Principal authentication.&lt;/LI&gt;
&lt;LI&gt;Provide:&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Tenant ID&lt;/LI&gt;
&lt;LI&gt;Client ID&lt;/LI&gt;
&lt;LI&gt;Client Secret (value)&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI&gt;Save and validate the connection.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;If configured correctly, the connection should authenticate successfully.&lt;/P&gt;
&lt;H6&gt;&lt;STRONG&gt;Step 6: Rebind Semantic Models&lt;/STRONG&gt;&lt;/H6&gt;
&lt;P&gt;Existing semantic models can be updated to use the newly created Service Principal connection instead of personal credentials.&lt;/P&gt;
&lt;P&gt;This is the step where ownership effectively moves away from individual users.&lt;/P&gt;
&lt;H4&gt;&lt;U&gt;&lt;STRONG&gt;How To Validate:&lt;/STRONG&gt;&lt;/U&gt;&lt;/H4&gt;
&lt;P&gt;Simply saving the connection is not enough, multiple validation checks are required to ensure the configuration success.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Validation 1: Connection Test&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The connection was created successfully and authenticated without errors.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Validation 2: Semantic Model Refresh&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Trigger a manual refresh using the Service Principal-based connection. The refresh should complete successfully.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Validation 3: Refresh History&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Refresh history will show successful execution after the migration. This confirms that the authentication was working end-to-end.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Validation 4: Cross-Workspace Testing&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The same approach can be repeated in another workspace and semantic model. The refresh must complete successfully there as well. This eliminats the possibility that the first success was due to a workspace-specific configuration.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Validation 5: User Independence Check&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The biggest test:&lt;/P&gt;
&lt;P&gt;The connection no longer depended on the creator's account.&lt;/P&gt;
&lt;P&gt;The reporting solution could continue functioning even if the original developer was unavailable.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Lessons Learned:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;A few observations:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN style="color: rgb(50, 49, 48);"&gt;Using a security group makes permission management cleaner than assigning permissions directly.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Test with a non-production semantic model first.&lt;/LI&gt;
&lt;LI&gt;Validate refreshes after every change.&lt;/LI&gt;
&lt;LI&gt;Document Tenant ID, Client ID, and ownership information securely.&lt;/LI&gt;
&lt;LI&gt;Standardize this approach for all future reporting projects to avoid technical debt.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Final Thoughts&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Service Principal authentication is one of those improvements that users never notice, but administrators will appreciate for years.&lt;/P&gt;
&lt;P&gt;The migration does not change report functionality, visuals, or user experience. What it does change is reliability, governance, and supportability behind the scenes.&lt;/P&gt;
&lt;P&gt;If your Fabric environment still relies on personal accounts for report connections, now is a good time to review your architecture. Moving to Service Principal authentication can significantly reduce operational risk and ensure that critical business reports continue running regardless of personnel changes.&lt;/P&gt;
&lt;P&gt;The best infrastructure is often the infrastructure nobody notices. After this migration, our reports simply kept working, and that was exactly the outcome we want!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 21 Oct 2026 13:37:07 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Why-To-Move-All-Fabric-Connections-to-Service-Principal/ba-p/5376078</guid>
      <dc:creator>InsightsByV</dc:creator>
      <dc:date>2026-10-21T13:37:07Z</dc:date>
    </item>
    <item>
      <title>Turn Your Fears into Data: Join Our Halloween Data Visualization Contest!</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Turn-Your-Fears-into-Data-Join-Our-Halloween-Data-Visualization/ba-p/5374146</link>
      <description>&lt;P&gt;Turn your fears into data! Join our Halloween data visualization contest and transform a community-sourced dataset of fears into a creative, single-page A4 Power BI poster. The contest opens October 12, submissions close October 21, and the winner will be revealed October 31.&lt;/P&gt;</description>
      <pubDate>Mon, 12 Oct 2026 19:18:56 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Turn-Your-Fears-into-Data-Join-Our-Halloween-Data-Visualization/ba-p/5374146</guid>
      <dc:creator>slindsay</dc:creator>
      <dc:date>2026-10-12T19:18:56Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Git Integration: New Ways to Compare, Commit, and Branch</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Git-Integration-New-Ways-to-Compare-Commit-and/ba-p/5372146</link>
      <description>&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Git integration in Microsoft Fabric has come a long way. What started as a way to connect Fabric workspaces with source control has gradually evolved into a more complete development workflow with better synchronization, branching, comparison, and now more granular control over what gets committed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="margin: 0px; padding: 0px;"&gt;The&amp;nbsp;&lt;STRONG&gt;September 2026 Fabric updates&lt;/STRONG&gt;&amp;nbsp;introduce several preview capabilities that make Git-based development more practical, especially for teams with multiple developers, long-running changes, and shared Fabric workspaces.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;In this article, I’ll walk through the Git workflow from the beginning and highlight additions that caught my attention: &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;enhanced compare and conflict resolution, file-level commits, selective branching, branch workspaces, bulk import/export APIs, and the new Branch workspace admin profile.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;If you have already worked with Git integration in Power BI and Fabric, the basic workflow will look familiar. For a Power BI report, first save the project as a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Power BI Project (.pbip)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;. Once the project is ready, you can connect your Fabric workspace to Git.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Connecting a Fabric Workspace to GitHub&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;In Microsoft Fabric, create or open the workspace you want to connect.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Go to:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Workspace settings → Git integration&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Select &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;GitHub&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; as the Git provider and choose &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Add account&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Fabric will ask for information such as:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;GitHub account/name&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Personal access token&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Repository URL&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Branch&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN data-preserver-spaces="true"&gt;Creating the GitHub access token&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For GitHub, the access token can be created from:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;When creating the token, select the appropriate repository and configure the required repository permissions.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For the Git integration scenario, the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Contents&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; permission needs to allow the required read/write operations.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Copy the generated token for Git integration in Fabric.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Working with a Feature Branch&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;After connecting Git, create a feature branch instead of changing the main branch directly.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;git checkout -b feature/dashboard&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;This creates and switches to a new branch called &lt;/SPAN&gt;&lt;SPAN data-preserver-spaces="true"&gt;feature/dashboard&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You can then connect and synchronize this branch with the Fabric workspace.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;After the initial setup, the familiar Git workflow continues.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;git push origin feature/dashboard&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;After pushing the project, you can view its structure under the relevant branch on GitHub.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;At the same time, the connected Fabric workspace contains the corresponding Fabric items, such as the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;report and semantic model&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For example, suppose I remove the &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Partner&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; slicer from the report.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The Fabric workspace changes; the Git branch updates its version.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;This is where the enhanced &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;compare&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; experience becomes particularly useful.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Instead of syncing and assuming alignment, check the differences between your workspace and the Git branch.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Enhanced Compare and Conflict Resolution&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The September update features an enhanced comparison experience.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Before committing changes, updating the workspace, or resolving conflicts, you can inspect what has actually changed between the workspace and the connected Git branch.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The comparison experience provides clearer context around changes, allowing you to understand the differences before taking action.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-preserver-spaces="true"&gt;File-Level Commit — Preview&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;This is one of the additions I find particularly interesting.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;With &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;file-level commit&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;, you can select specific files within a supported Fabric item and commit only those changes.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The remaining changes stay in the workspace until you are ready to commit them.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-preserver-spaces="true"&gt;Selective Branching and Branch Workspaces&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Workspace-level branching is another key topic for September updates.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;When using Fabric, developers need a suitable workspace to build and test changes. Branch workspaces provide isolated environments linked to specific Git branches, making them ideal for teams working on independent features.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN data-preserver-spaces="true"&gt;Branch Workspace Admin Profile — Preview&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;One notable addition is the new Branch workspace admin profile.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;This feature addresses an important governance challenge.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Developers can create branch workspaces using the configured profile without needing the same elevated permissions.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The benefits include:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Developers can create branch workspaces without broad workspace-creation permissions.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Capacity assignment can remain centrally governed.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Branch workspaces can follow a consistent configuration.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Development environments remain more isolated.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Administrators retain control over the underlying setup.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;This creates an interesting balance between &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;developer flexibility and platform governance&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN data-preserver-spaces="true"&gt;What About Changes Made Directly in Git?&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The workflow also works in the other direction.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Suppose you make a change directly in the project files through &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;VS Code&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;For example, you modify the title or another supported definition in the project.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You can then synchronize the change through Git.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;A typical Git workflow could look like:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;git pull --rebase origin feature/dashboard&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;followed by:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;git push origin feature/dashboard&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Changes pushed to GitHub trigger detection in the Fabric workspace.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You can then review the changes and choose to &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;update&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; the workspace.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN data-preserver-spaces="true"&gt;Bulk Import/Export APIs&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Another addition worth watching is the availability of &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;bulk import/export APIs&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt; Bulk APIs can streamline these processes, particularly when integrated with Git-based development, CI/CD, and deployment automation, aligning Fabric with modern software engineering practices.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The important shift is that Git integration is becoming more than a simple &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;connect → commit → sync&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; experience.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;We now have more control over:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;What changed → What to commit → What to update → Where to develop → How development is governed&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The September 2026 Fabric updates show an interesting evolution in &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Git integration for Microsoft Fabric&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;It combines multiple capabilities to create a more controlled development workflow.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2026 16:14:56 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Git-Integration-New-Ways-to-Compare-Commit-and/ba-p/5372146</guid>
      <dc:creator>techies</dc:creator>
      <dc:date>2026-10-05T16:14:56Z</dc:date>
    </item>
    <item>
      <title>Skills for Fabric in practice: tune them, write your own, close the synonyms gap (Part 2 of 2)</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Skills-for-Fabric-in-practice-tune-them-write-your-own-close-the/ba-p/5369513</link>
      <description>&lt;P&gt;How to use Microsoft’s Skills for Fabric day to day, tune them to your team’s standards without forking them, and write your own. Then a full walkthrough of a new skill that adds Q&amp;amp;A and data-agent synonyms to a Power BI semantic model, the one AI-readiness setting that neither the Power BI MCP server nor the official skills will touch. Tested end to end in Power BI Desktop.&lt;/P&gt;</description>
      <pubDate>Thu, 01 Oct 2026 15:00:00 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Skills-for-Fabric-in-practice-tune-them-write-your-own-close-the/ba-p/5369513</guid>
      <dc:creator>Natarajan_M</dc:creator>
      <dc:date>2026-10-01T15:00:00Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Data Agent Governance: From POC to Production</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Data-Agent-Governance-From-POC-to-Production/ba-p/5369525</link>
      <description>&lt;P&gt;In Part 1, we discussed — Who can access what? &lt;A class="lia-external-url" href="https://community.fabric.microsoft.com/blog/community_blog/microsoft-fabric-data-agent-security-what-actually-protects-your-data" target="_blank" rel="noopener"&gt;Click Here to read Part 1&lt;/A&gt;&lt;/P&gt;&lt;P&gt;We looked at identity, source permissions, RLS, CLS, OLS, query-path security, and why AI instructions should never become the authorization layer.&lt;/P&gt;&lt;P&gt;But a Data Agent can be perfectly secure and still be poorly governed. Once we move from a POC into production, a different set of questions appears:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Who can modify the agent?&lt;/LI&gt;&lt;LI&gt;Which identity is used when the agent is called from another application?&lt;/LI&gt;&lt;LI&gt;How do we test an instruction change before releasing it?&lt;/LI&gt;&lt;LI&gt;What changes when Code Interpreter is enabled?&lt;/LI&gt;&lt;LI&gt;Where does conversation history live?&lt;/LI&gt;&lt;LI&gt;What happens when the Data Agent leaves Fabric?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;That is where the conversation moves from &lt;STRONG&gt;security&lt;/STRONG&gt; into &lt;STRONG&gt;governance&lt;/STRONG&gt;.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Security and Governance Are Not the Same Thing&lt;/H2&gt;&lt;PRE&gt;SECURITY
Who can access the agent and the data?
What rows, columns, or objects can they see?

GOVERNANCE
Who can change the agent?
How are changes tested and quality measured?
Which runtime is used?
Where is conversation data stored?
How is the agent consumed outside Fabric?&lt;/PRE&gt;&lt;P&gt;Security defines the boundary. Governance controls how the system is operated inside that boundary. Both are required for production.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;Fig. Security Vs Governance&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Code Interpreter Introduces Another Execution Surface&lt;/H2&gt;&lt;P&gt;The normal Data Agent source-query path (SQL, DAX, KQL) is read-oriented, so a prompt like "Delete all customers with zero revenue" doesn't turn the agent into a database administrator. But there is a nuance: Fabric Data Agent can optionally use &lt;STRONG&gt;Code Interpreter&lt;/STRONG&gt;, which generates and executes Python in a Microsoft-managed sandbox for statistics, transformations, and charts.&lt;/P&gt;&lt;PRE&gt;Underlying source
      │ Governed retrieval
      ▼
Fabric Data Agent
      │
      ▼
Sandboxed Python execution
      │
      ▼
Calculated / transformed / visualized result&lt;/PRE&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;The source-query path remains governed and read-oriented, while Code Interpreter introduces an additional analytical execution environment.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Rather than treating the word "sandbox" as sufficient evidence, we tested the execution path directly.&lt;/P&gt;&lt;H2&gt;What We Observed in Our POC&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Governed data was retrieved before Python executed.&lt;/STRONG&gt; For "Total Sales by Region", the Run Steps showed the semantic model queried with DAX first. The authorized result was saved as a local JSON file under /mnt/data and then read by pandas. Code Interpreter was not independently querying the model.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;The sandbox could create local artifacts.&lt;/STRONG&gt; Generated Python wrote files such as CSV and TXT into /mnt/data, and the Run Steps exposed the code used.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Artifacts persisted across chats for the same user.&lt;/STRONG&gt; A file created in one chat was still visible in a new chat. We do not infer a retention period from this; the lifetime remains unknown.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;A second user did not see the first user's artifact.&lt;/STRONG&gt; User B enumerated files and found only their own test file. This is POC evidence consistent with user-level isolation in our environment, not a universal guarantee.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Runtime details were visible, but sensitive introspection was constrained.&lt;/STRONG&gt; Python version, OS, and package versions were exposed, but a request for environment-variable names was refused before execution.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Outbound internet was treated as disabled.&lt;/STRONG&gt; A requested HTTPS call was not issued and the environment reported internet access as disabled. Since no connection was attempted, this is not packet-level verification of a network block.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;A controlled Python error exposed nothing sensitive.&lt;/STRONG&gt; Referencing a nonexistent column returned only a KeyError, with no credentials, connection strings, or unrelated file contents.&lt;/LI&gt;&lt;/OL&gt;&lt;img /&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Run Step showing the DAX query and generated Python reading the result file&lt;/EM&gt;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Same-user artifact persistence across chats&lt;/EM&gt;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. New chat shows file exists.&lt;/EM&gt;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. In our test, User B could enumerate their own isolation artifact but not User A’s artifact.&lt;/EM&gt;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Area of observations&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;These are&amp;nbsp;&lt;STRONG&gt;POC observations&lt;/STRONG&gt;, not universal guarantees. For production, treat Code Interpreter as its own governed execution surface and ask: What data reaches Python? What code is generated? What artifacts persist, and for how long? Are users isolated? What can the environment reach? What appears in errors?&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Read-only source access does not mean there is only one execution surface.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;HR /&gt;&lt;H2&gt;The Calling Identity Becomes Critical Outside Fabric&lt;/H2&gt;&lt;P&gt;Inside Fabric, identity is easy to reason about. A published Data Agent can also be called by custom applications, MCP clients, and automation, each with a different identity path. One architecture question should always be documented:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Whose identity ultimately reaches Fabric?&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Service principals suit automation, CI/CD, and background processing, but they carry their &lt;STRONG&gt;own permissions&lt;/STRONG&gt;. If User A, B, and C all reach the agent through one shared service principal, the platform evaluates that single identity, not each user's entitlements. For interactive apps where per-user entitlements matter, a delegated (on-behalf-of) identity is usually easier to reason about. Neither is universally better:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;The identity model must be intentional.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Calling Identity&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Governance Starts Before the Agent Is Published&lt;/H2&gt;&lt;P&gt;Who can change the Data Agent is almost as important as who can use it. Creators work in a draft version (schema, instructions, examples, sources); consumers use the published version. A normal consumer shouldn't need edit rights to a definition like "Revenue means Net Revenue excluding intercompany" just to ask "What was revenue last month?" Separate four responsibilities: &lt;STRONG&gt;consume, inspect, edit, publish.&lt;/STRONG&gt;&lt;/P&gt;&lt;H2&gt;Treat Data Agent Configuration Like Code&lt;/H2&gt;&lt;P&gt;Once instructions define business behavior, changing them is a production change. "Change instruction, save, hope nothing broke" is not a governance process. A stronger lifecycle:&lt;/P&gt;&lt;PRE&gt;Development → Source control → Peer review
→ Test workspace → Regression validation
→ Production → Publish&lt;/PRE&gt;&lt;P&gt;You should be able to answer who changed an instruction, what changed, which version was tested, and which version is running in production.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Lifecycle&lt;/EM&gt;&lt;/P&gt;&lt;H2&gt;Standard vs. Preview Runtime Is a Governance Decision&lt;/H2&gt;&lt;P&gt;A POC may use Preview capabilities for newer functionality; production may prefer the stable path. But even a standard runtime doesn't mean the underlying AI stack stays frozen. "We tested it once" is not a strategy, so regression testing has to become part of normal operation.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Security Is Not the Same as Accuracy&lt;/H2&gt;&lt;P&gt;A response can be perfectly secure and still wrong. For "What did we spend on marketing last quarter?", an authorized user still depends on the agent interpreting "spend", "last quarter", which accounts count as marketing, and which source is authoritative. Production governance needs two questions: &lt;STRONG&gt;Was this user allowed to see the answer?&lt;/STRONG&gt; and &lt;STRONG&gt;Was the answer actually correct?&lt;/STRONG&gt;&lt;/P&gt;&lt;H2&gt;Native Evaluation Should Be Part of the Release Process&lt;/H2&gt;&lt;P&gt;"We asked five questions and the answers looked okay" is not a release gate. Maintain expected-answer test cases and run them on every change. A good set includes core KPIs, time-intelligence questions, synonym variations, ambiguous prompts, cross-source questions, restricted-data questions, expected failures, and known edge cases.&lt;/P&gt;&lt;P&gt;When something fails, Run Steps help locate the divergence: wrong source, wrong query, wrong business interpretation, or a misleading explanation. Instead of "the AI got it wrong", ask &lt;STRONG&gt;where did the execution path diverge from what we expected?&lt;/STRONG&gt;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Security vs. Quality Evaluation&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Conversation History, Residency, and Networking&lt;/H2&gt;&lt;P&gt;&lt;STRONG&gt;Conversation history is part of the data estate.&lt;/STRONG&gt; A prompt like "Why is revenue falling for Customer ABC while we negotiate their confidential renewal?" may be more sensitive than the result. Decide what users may enter, how long context persists, and who can investigate interactions.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Data residency needs an explicit decision.&lt;/STRONG&gt; Document more than where the capacity lives: where AI processing occurs, where conversation history and telemetry are stored, and where downstream applications process the response.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Networking must be evaluated per source.&lt;/STRONG&gt; Private Link (how do we privately reach a resource?) and Outbound Access Protection (which destinations may this workspace call?) solve different problems, and not every source follows the same path. As in Part 1: validate the actual path, not just the existence of a security feature.&lt;/P&gt;&lt;img /&gt;&lt;img /&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Conversation History, Data Residency, Networking&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;What Happens When the Data Agent Leaves Fabric?&lt;/H2&gt;&lt;P&gt;A Data Agent can be used through Microsoft Foundry, Copilot Studio, Microsoft 365 Copilot, MCP clients, and custom applications. Once the response leaves Fabric, the receiving service brings its own identity model, retention policy, logging, compliance boundary, and geography. "Secure inside Fabric" does not mean "secure everywhere downstream."&lt;/P&gt;&lt;P&gt;The same applies to identity. If the application calls Fabric as the &lt;STRONG&gt;user&lt;/STRONG&gt;, the user's permissions apply. If it calls as a &lt;STRONG&gt;shared or maker identity&lt;/STRONG&gt;, answers reflect that identity's permissions instead. The second pattern may be intentional, but it must be documented as a security and governance decision.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. When the Data Agent Leaves Fabric&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Production Governance Model&lt;/H2&gt;&lt;PRE&gt;IDENTITY → AUTHORIZATION → DATA SECURITY
→ QUERY-PATH SECURITY → AI SCOPE
→ SEMANTIC GOVERNANCE → EXECUTION GOVERNANCE
→ QUALITY GOVERNANCE → LIFECYCLE GOVERNANCE
→ FABRIC DATA AGENT&lt;/PRE&gt;&lt;P&gt;Part 1 covered the upper security layers. Part 2 adds the controls needed to operate the agent as a production analytical product.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Data Agent Ready for Production&lt;/EM&gt;&lt;/P&gt;&lt;H2&gt;Before Production, I Would Review These Areas&lt;/H2&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Identity:&lt;/STRONG&gt; confirm which identity reaches Fabric; document user, delegated, and service-principal paths separately.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Data security and scope:&lt;/STRONG&gt; validate RLS/CLS/OLS with real restricted identities on every query path; expose only the sources and fields required.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Execution:&lt;/STRONG&gt; document the runtime; review Code Interpreter separately (data passed to Python, artifact persistence, isolation, network limits).&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Quality:&lt;/STRONG&gt; maintain expected-answer tests; regression-test critical questions.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Lifecycle:&lt;/STRONG&gt; separate consumers from creators; use draft and published versions; promote through Dev, Test, and Production; version instructions.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Privacy, residency, network:&lt;/STRONG&gt; define prompt rules, document AI processing and telemetry locations, review Private Link per source.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;External consumption:&lt;/STRONG&gt; re-run the review for every channel and confirm the effective identity for each.&lt;/LI&gt;&lt;/UL&gt;&lt;HR /&gt;&lt;H2&gt;Governance Still Does Not Tell Us What Happened&lt;/H2&gt;&lt;P&gt;The agent may now be secure and well governed, but production still raises questions: Who asked what? What did the agent answer? Which source did it choose? Where did execution fail? Can compliance investigate an interaction? These map to three disciplines: &lt;STRONG&gt;Audit&lt;/STRONG&gt; (who asked what, and what was answered), &lt;STRONG&gt;Trace&lt;/STRONG&gt; (how a request executed), and &lt;STRONG&gt;Observe&lt;/STRONG&gt; (whether the agent is healthy in production).&lt;/P&gt;&lt;H2&gt;Next: Part 3 — Auditing, Tracing and Observing Microsoft Fabric Data Agents in Production&lt;/H2&gt;&lt;P&gt;Part 3 will combine Microsoft Purview, DSPM for AI, Microsoft Foundry, Application Insights, Fabric diagnostics, capacity telemetry, and MCP/application telemetry to answer not just what the Data Agent is allowed to do, but &lt;STRONG&gt;what it actually did&lt;/STRONG&gt;. That is where security and governance turn into operational accountability.&lt;/P&gt;&lt;HR /&gt;&lt;H3&gt;Related Reading&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/microsoft-fabric-data-agent-security-what-actually-protects-your-data/5369524" target="_blank" rel="noopener" data-lia-auto-title="Part 1 — Microsoft Fabric Data Agent Security: What Actually Protects Your Data?" data-lia-auto-title-active="0"&gt;Part 1 — Microsoft Fabric Data Agent Security: What Actually Protects Your Data?&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/building-a-better-microsoft-fabric-data-agent-instructions-visual-policy-and-cos/5364431" target="_blank" rel="noopener" data-lia-auto-title="Building a Better Microsoft Fabric Data Agent: Instructions, Visual Policy, and Cost-Aware Design" data-lia-auto-title-active="0"&gt;Building a Better Microsoft Fabric Data Agent: Instructions, Visual Policy, and Cost-Aware Design&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/building-and-enriching-a-microsoft-fabric-data-agent-on-a-power-bi-semantic-mode/5364459" target="_blank" rel="noopener" data-lia-auto-title="Building and Enriching a Microsoft Fabric Data Agent on a Power BI Semantic Model" data-lia-auto-title-active="0"&gt;Building and Enriching a Microsoft Fabric Data Agent on a Power BI Semantic Model&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Wed, 30 Sep 2026 17:00:00 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Data-Agent-Governance-From-POC-to-Production/ba-p/5369525</guid>
      <dc:creator>Natarajan_M</dc:creator>
      <dc:date>2026-09-30T17:00:00Z</dc:date>
    </item>
    <item>
      <title>Power BI MCP, Fabric MCP and Skills for Fabric in VS Code: setup and limits (Part 1 of 2)</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Power-BI-MCP-Fabric-MCP-and-Skills-for-Fabric-in-VS-Code-setup/ba-p/5369512</link>
      <description>&lt;P&gt;A practical setup guide for Power BI and Fabric MCP servers and Microsoft’s Skills for Fabric in VS Code, covering the extension route, the remote servers, all four ways to install the skills (including the ZIP download and the trap that comes with it), and an honest list of what these tools can and can’t do. Checked against Skills for Fabric v0.3.18.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Sep 2026 14:58:25 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Power-BI-MCP-Fabric-MCP-and-Skills-for-Fabric-in-VS-Code-setup/ba-p/5369512</guid>
      <dc:creator>Natarajan_M</dc:creator>
      <dc:date>2026-09-29T14:58:25Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Data Agent Security: What Actually Protects Your Data?</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Data-Agent-Security-What-Actually-Protects-Your/ba-p/5369524</link>
      <description>&lt;P&gt;Most Microsoft Fabric Data Agent demos begin the same way: connect a semantic model, Lakehouse, or Warehouse, add some instructions, ask a natural-language question, and get an answer.&lt;/P&gt;&lt;P&gt;That's the exciting part. But the moment we move from a demo to a real enterprise implementation, the questions change:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Whose identity is actually querying the data?&lt;/LI&gt;&lt;LI&gt;Does sharing the Data Agent also share the underlying data?&lt;/LI&gt;&lt;LI&gt;Can the agent bypass RLS or CLS?&lt;/LI&gt;&lt;LI&gt;Does Object-Level Security still protect metadata?&lt;/LI&gt;&lt;LI&gt;What happens if the same data is reachable through multiple query paths?&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;These are the questions we set out to answer during our Fabric Data Agent POC. The most important principle that came out of it was surprisingly simple:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;The Fabric Data Agent should not be your security layer. Your data platform should be.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That one principle makes the rest of the architecture much easier to reason about.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;A Data Agent Does Not Get Unlimited Access to Fabric&lt;/H2&gt;&lt;P&gt;When someone uses a Fabric Data Agent directly in Fabric, the interaction normally runs in the context of the authenticated &lt;STRONG&gt;Microsoft Entra ID&lt;/STRONG&gt; user.&lt;/P&gt;&lt;P&gt;Fabric manages the underlying Azure OpenAI service, so users don't need to supply an OpenAI API key, and the Data Agent doesn't suddenly receive unrestricted access to every table in the workspace. When the agent needs data, it generates the appropriate SQL, DAX, or KQL and queries the underlying source &lt;STRONG&gt;using the permissions available to the calling identity&lt;/STRONG&gt;.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Security Path&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;The important part is the middle: the agent &lt;EM&gt;generates&lt;/EM&gt; the query, but &lt;STRONG&gt;the data platform decides whether that query can return the requested data.&lt;/STRONG&gt; That is exactly where enterprise security should live.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Sharing a Data Agent Does Not Mean Sharing the Data&lt;/H2&gt;&lt;P&gt;There are effectively &lt;STRONG&gt;two authorization checks&lt;/STRONG&gt;:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Can the user access the Data Agent itself?&lt;/LI&gt;&lt;LI&gt;Can the user access the underlying data source?&lt;/LI&gt;&lt;/OL&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Two Authorization Checks&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;Fabric doesn't elevate a user's access just because a Data Agent has been shared with them. Users still need the applicable permissions on the underlying source. Queries that touch data they can't access can fail authorization or return no data, depending on the source and its security model.&lt;/P&gt;&lt;P&gt;This separation is critical for enterprise deployments: you can distribute one common analytical assistant while still preserving different data entitlements for Finance, Sales, Operations, or regional teams.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Semantic Models Have an Interesting Permission Model&lt;/H2&gt;&lt;P&gt;Power BI semantic models are especially interesting here. Microsoft documents that a consumer can query a semantic model through a Data Agent with &lt;STRONG&gt;Read permission&lt;/STRONG&gt;. They don't need:&lt;/P&gt;&lt;PRE&gt;Workspace Member
Workspace Contributor
Build permission
Write permission&lt;/PRE&gt;&lt;P&gt;simply to ask questions through the Data Agent. &lt;EM&gt;(Build or Write permissions remain relevant when someone needs to modify the model or use capabilities that change its AI configuration, such as Prep for AI.)&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;From a least-privilege perspective, this is a very useful improvement. Instead of granting broad workspace or semantic-model permissions just because somebody needs conversational analytics, you can grant only the narrower access required for consumption.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;What Happens to RLS and CLS?&lt;/H2&gt;&lt;P&gt;This is probably the security question that comes up most often around conversational analytics:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;"If the AI generates the query, can it somehow bypass RLS?"&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;For supported Data Agent interactions, Microsoft explicitly documents that existing user permissions continue to apply, including &lt;STRONG&gt;Row-Level Security (RLS)&lt;/STRONG&gt; and &lt;STRONG&gt;Column-Level Security (CLS)&lt;/STRONG&gt;.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. RLS — One Agent Three Users&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;All three users can use the same published Data Agent, yet the semantic model can return different populations because the security context belongs to the&amp;nbsp;&lt;EM&gt;user&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;The agent doesn't need instructions like:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;PRE&gt;If User = John, only show Europe.&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;In fact, that would be the wrong way to implement security. &lt;STRONG&gt;The model should enforce the rule. The Data Agent should operate inside it.&lt;/STRONG&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;What About OLS?&lt;/H2&gt;&lt;P&gt;We tested &lt;STRONG&gt;Object-Level Security (OLS)&lt;/STRONG&gt; rather than assuming how the Data Agent would behave. In our model, we applied OLS to &lt;STRONG&gt;Customer[Company Name]&lt;/STRONG&gt; in the Power BI semantic model and tested the Data Agent using the restricted identity. We then asked:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;EM&gt;"Show Total Sales by Company Name."&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Data Agent does not expose the OLS-protected Company Name field.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;The Data Agent responded that the model&amp;nbsp;&lt;STRONG&gt;does not contain a Company Name field&lt;/STRONG&gt; and suggested &lt;STRONG&gt;Customer Name&lt;/STRONG&gt; instead.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Run Steps show the semantic model was analyzed, but the protected field was unavailable to the agent.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;That was the key result. &lt;STRONG&gt;Company Name&lt;/STRONG&gt; still physically exists in the semantic model, but for the OLS-restricted user, the Data Agent behaved as though the field didn't exist. In our tested path, OLS protected not only the data but also the object's &lt;STRONG&gt;metadata&lt;/STRONG&gt;.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;Our test confirmed OLS enforcement for the tested &lt;STRONG&gt;Fabric Data Agent → Power BI semantic model&lt;/STRONG&gt; path, including metadata hiding.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;There's an important qualification: this remains &lt;STRONG&gt;query-path specific&lt;/STRONG&gt;. If the same underlying data is also exposed through a Lakehouse, Warehouse, SQL endpoint, or another source, that route needs its own security controls.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. OLS security&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Security Is Specific to the Query Path&lt;/H2&gt;&lt;P&gt;This is one of the broader lessons from our POC. Imagine the same business data can be reached through:&lt;/P&gt;&lt;PRE&gt;Power BI Semantic Model
        │
        └── RLS / CLS / OLS

Lakehouse
        │
        └── OneLake / item security

Warehouse
        │
        └── SQL / OneLake permissions&lt;/PRE&gt;&lt;P&gt;Securing one route doesn't automatically prove that all the others are equally secure. The semantic model could correctly restrict a user's data through RLS or OLS while the same user has broader access to the underlying Lakehouse. If both are available to the Data Agent, the overall architecture may still be over-permissioned.&lt;/P&gt;&lt;P&gt;So the enterprise question isn't simply &lt;EM&gt;"Does my semantic model have RLS?"&lt;/EM&gt; It's:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Is every query path available to this Data Agent secured for this identity?&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Security Is Specific to the Query Path&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;AI Instructions Are Not Security Policies&lt;/H2&gt;&lt;P&gt;Consider an instruction like:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;PRE&gt;Never display employee salary information.&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That may be useful behavioral guidance, but it is &lt;STRONG&gt;not an authorization boundary&lt;/STRONG&gt;. A user could phrase the question differently. The orchestration could change. A future runtime could interpret an instruction differently. The instruction could be accidentally edited or removed.&lt;/P&gt;&lt;P&gt;The secure implementation puts the control in the data platform (RLS/CLS/OLS and source permissions), with instructions layered on top for behavior.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. AI Instructions Are Not Security Policies&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;The distinction is simple:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Instructions determine how the agent should behave. Permissions determine what the agent is allowed to see.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Never reverse those responsibilities.&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Reduce the Agent's Data Surface&lt;/H2&gt;&lt;P&gt;Security isn't only about identity — it's also about &lt;STRONG&gt;how much data you expose to the agent in the first place&lt;/STRONG&gt;. When configuring a Data Agent, creators select relevant sources, tables, and schema context. For an enterprise Finance Data Agent, exposing:&lt;/P&gt;&lt;PRE&gt;Dim Date
Dim Account
Dim Cost Center
Fact Actuals
Fact Forecast&lt;/PRE&gt;&lt;P&gt;is usually better than exposing hundreds of unrelated HR, customer, and operational tables. It helps in two ways: it reduces unnecessary exposure, and it improves query generation because the agent has fewer irrelevant paths to reason through.&lt;/P&gt;&lt;P&gt;But schema selection still isn't &lt;STRONG&gt;authorization&lt;/STRONG&gt;.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Three Boundaries&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Data Agent Querying Is Read-Oriented — With an Important Nuance&lt;/H2&gt;&lt;P&gt;The normal Data Agent source-query path is designed for analytical retrieval. Its SQL, DAX, and KQL tools retrieve and analyze data rather than modify the underlying source. So a prompt like:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;PRE&gt;Delete all customers with zero revenue.&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;doesn't turn the Data Agent into a transactional database administrator. That lowers risk significantly compared with giving an autonomous agent unrestricted write-capable database tools.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;But there's a nuance.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;H3&gt;Code Interpreter Changes the Execution Surface&lt;/H3&gt;&lt;P&gt;Fabric Data Agent can optionally use &lt;STRONG&gt;Code Interpreter&lt;/STRONG&gt; (currently in Preview), which generates and executes Python in a Microsoft-managed sandbox for tasks such as statistics, advanced calculations, data transformation, visualization, and analytical processing.&lt;/P&gt;&lt;P&gt;That does &lt;STRONG&gt;not&lt;/STRONG&gt; make the underlying source write-enabled. A better mental model:&lt;/P&gt;&lt;PRE&gt;Underlying Source
       │
       │ Governed read
       ▼
Fabric Data Agent
       │
       ▼
Sandboxed Python
       │
       ▼
Calculated / visualized result&lt;/PRE&gt;&lt;P&gt;&lt;EM&gt;Fig. Code Interpreter Surface&lt;/EM&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Source querying remains governed and read-oriented, while Code Interpreter adds an additional analytical execution environment.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;That extra execution surface should be reviewed deliberately, especially when considering Preview capabilities for sensitive production workloads.&lt;/P&gt;&lt;P&gt;Discussed in Part 2 with detailed analysis. Check Out.&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;What We Took Away From the Security POC&lt;/H2&gt;&lt;P&gt;The cleanest security model for us became:&lt;/P&gt;&lt;PRE&gt;IDENTITY
Microsoft Entra ID
        ↓
AUTHORIZATION
Fabric item + source permissions
        ↓
DATA SECURITY
RLS / CLS / OLS / OneLake / SQL
        ↓
QUERY-PATH SECURITY
Validate each available source
        ↓
AI SCOPE
Selected schema
        ↓
FABRIC DATA AGENT&lt;/PRE&gt;&lt;P&gt;The Data Agent sits &lt;STRONG&gt;on top of&lt;/STRONG&gt; the security architecture. It should not replace it. That's the difference between building an impressive AI demo and building an enterprise analytical agent.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-align-center"&gt;&lt;EM&gt;Fig. Security Architecture&lt;/EM&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H2&gt;Security Is Only the First Layer&lt;/H2&gt;&lt;P&gt;Once the basic security model is in place, a new set of questions appears:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Who can modify the agent?&lt;/LI&gt;&lt;LI&gt;Which runtime should production use?&lt;/LI&gt;&lt;LI&gt;How do we test changes?&lt;/LI&gt;&lt;LI&gt;What happens with Code Interpreter?&lt;/LI&gt;&lt;LI&gt;How should service principals be handled?&lt;/LI&gt;&lt;LI&gt;Where is conversation history stored?&lt;/LI&gt;&lt;LI&gt;What happens when the agent is used from Copilot Studio, Foundry, MCP, or a custom application?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Those are no longer just security questions — they're &lt;STRONG&gt;governance questions&lt;/STRONG&gt;.&lt;/P&gt;&lt;H2&gt;Next: Part 2 — Governance, From POC to Production&lt;/H2&gt;&lt;P&gt;Part 2 focuses on how a production Data Agent should be &lt;STRONG&gt;changed, tested, released, consumed, and governed&lt;/STRONG&gt; — including identity models, lifecycle management, evaluation, privacy, data residency, networking, and external consumption: Microsoft Fabric Data Agent Governance: From POC to Production.&lt;/P&gt;&lt;P&gt;The central idea remains the same:&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;STRONG&gt;Do not make the AI responsible for protecting the data. Make the data platform responsible for protecting&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;the data, and make the AI operate inside those boundaries.&lt;/STRONG&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/microsoft-fabric-data-agent-governance-from-poc-to-production/5369525" target="_blank" rel="noopener" data-lia-auto-title="Click Here to go to Part 2" data-lia-auto-title-active="0"&gt;Click Here to go to Part 2&lt;/A&gt;&lt;/P&gt;&lt;HR /&gt;&lt;H3&gt;Related Reading&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/building-a-better-microsoft-fabric-data-agent-instructions-visual-policy-and-cos/5364431" target="_blank" rel="noopener" data-lia-auto-title="Building a Better Microsoft Fabric Data Agent: Instructions, Visual Policy, and Cost-Aware Design" data-lia-auto-title-active="0"&gt;Building a Better Microsoft Fabric Data Agent: Instructions, Visual Policy, and Cost-Aware Design&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;&lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/community_blog/building-and-enriching-a-microsoft-fabric-data-agent-on-a-power-bi-semantic-mode/5364459" target="_blank" rel="noopener" data-lia-auto-title="Building and Enriching a Microsoft Fabric Data Agent on a Power BI Semantic Model" data-lia-auto-title-active="0"&gt;Building and Enriching a Microsoft Fabric Data Agent on a Power BI Semantic Model&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Mon, 28 Sep 2026 18:56:28 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Microsoft-Fabric-Data-Agent-Security-What-Actually-Protects-Your/ba-p/5369524</guid>
      <dc:creator>Natarajan_M</dc:creator>
      <dc:date>2026-09-28T18:56:28Z</dc:date>
    </item>
    <item>
      <title>From Chaos to Clarity: How the Manufacturing Dashboard Helps Everyone Understand the Business</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/From-Chaos-to-Clarity-How-the-Manufacturing-Dashboard-Helps/ba-p/5369173</link>
      <description>&lt;P&gt;Let's walk through what each page actually shows, and why it matters.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Page 1: Customer Insights — "Who are we selling to, and are they happy?"&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Every business lives or dies by its customers, but it's surprisingly hard to keep track of hundreds of relationships in your head. This page acts like a customer relationship "scoreboard."&lt;/P&gt;&lt;P&gt;It shows things like:&lt;/P&gt;&lt;P&gt;* How many active customers the business currently has&lt;/P&gt;&lt;P&gt;* Which customers are considered healthy (buying regularly, paying on time) versus at risk (going quiet, showing warning signs)&lt;/P&gt;&lt;P&gt;* How revenue is spread across different customers and regions — are we relying too heavily on just a few big accounts?&lt;/P&gt;&lt;P&gt;Think of it like a doctor's checkup, but for relationships instead of health. If ten customers suddenly go from "healthy" to "at risk," that's a signal to act before they walk away for good — not after the revenue has already dropped and everyone's asking why.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Page 2: Production &amp;amp; Supply — "Are we making enough, and can we deliver it?"&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;This is the page for anyone who cares about what's actually happening on the factory floor and getting product out the door. It's less about money and more about operations.&lt;/P&gt;&lt;P&gt;Key questions it answers:&lt;/P&gt;&lt;P&gt;* How much did we produce this month, and is that on target?&lt;/P&gt;&lt;P&gt;* Are shipments going out on time, or are we falling behind on delivery promises?&lt;/P&gt;&lt;P&gt;* Is one particular plant underperforming compared to the others?&lt;/P&gt;&lt;P&gt;If you're a plant manager, this is likely the first thing you check every morning — before coffee, even. It tells you at a glance whether today is a "business as usual" day or a "we need to fix something now" day.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Page 3: Overview — "How's the whole business doing, in 30 seconds?"&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;This is the page built for someone with almost no time to spare — a CEO, an investor, or anyone who just needs the headline numbers without digging through details.&lt;/P&gt;&lt;P&gt;At the top sit eight simple cards, each showing one important number and whether it went up or down compared to last month:&lt;/P&gt;&lt;P&gt;* Total Revenue — how much money came in&lt;/P&gt;&lt;P&gt;* Total Production — how much product was made&lt;/P&gt;&lt;P&gt;* Capacity Utilization — how much of the factories' potential is actually being used&lt;/P&gt;&lt;P&gt;* Gross Profit — how much money is left after production costs&lt;/P&gt;&lt;P&gt;* Supply Fulfillment — how reliably orders are being delivered&lt;/P&gt;&lt;P&gt;* Inventory Value — how much stock is sitting in the warehouse&lt;/P&gt;&lt;P&gt;* Active Customers — how many customers are currently buying&lt;/P&gt;&lt;P&gt;* Overall Operational Efficiency — a single score summarizing how smoothly everything is running&lt;/P&gt;&lt;P&gt;Below that, charts break revenue and production down by month, by plant, and by region — so if a number drops, you don't just see that it dropped, you can immediately see where. Was it one plant having a bad month, or a slowdown across an entire region?&lt;/P&gt;&lt;P&gt;There's also a simple "Alerts &amp;amp; Insights" section that puts the numbers into plain words — things like "Supply on track: fulfillment is 94% and improving" — so nobody has to guess what a chart is trying to tell them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Page 4: Inventory &amp;amp; Working Capital — "Do we have too much stock, or too little?"&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;This page tackles a balancing act every manufacturing business faces. Keep too much inventory sitting around, and you're tying up cash and warehouse space that could be used elsewhere. Keep too little, and you risk running out of product right when a customer needs it — losing sales and trust.&lt;/P&gt;&lt;P&gt;This page shows:&lt;/P&gt;&lt;P&gt;* Total Inventory Value — how much money is currently tied up in stock&lt;/P&gt;&lt;P&gt;* Inventory Turnover — how quickly that stock is being sold and replaced (a higher number generally means things are moving efficiently)&lt;/P&gt;&lt;P&gt;* Days Inventory Outstanding — roughly how many days' worth of stock is sitting around unused&lt;/P&gt;&lt;P&gt;* Raw Material vs. Finished Goods Stock — how much is still waiting to be turned into product versus ready to ship&lt;/P&gt;&lt;P&gt;* Slow-Moving Inventory — stock that isn't selling and may need attention&lt;/P&gt;&lt;P&gt;* Stockout Risk — a warning flag for items at risk of running out&lt;/P&gt;&lt;P&gt;* Inventory Accuracy — how well the recorded stock counts match what's physically in the warehouse&lt;/P&gt;&lt;P&gt;There's even a detailed table listing specific materials by name, plant, and status (like "Slow-Moving" or "Healthy"), so instead of a vague warning, someone gets a precise to-do list of exactly what needs a closer look.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Why This Approach Works for Everyone&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The real magic of this dashboard isn't any single chart — it's the consistency. Every page follows the same basic structure:&lt;/P&gt;&lt;P&gt;1. Filters at the top (date range, region, plant, product category) so anyone can narrow the view to exactly what matters to them&lt;/P&gt;&lt;P&gt;2. A handful of key numbers, shown as simple cards with an up or down arrow — no complicated formulas to interpret&lt;/P&gt;&lt;P&gt;3. A plain-language "Alerts &amp;amp; Insights" section that explains, in a sentence or two, what changed and why it matters&lt;/P&gt;&lt;P&gt;That means a machine operator, a plant manager, a customer success rep, and a CEO can all open the same dashboard and immediately find what's relevant to them — no translation needed, no waiting for someone else to "run the numbers."&lt;/P&gt;&lt;P&gt;In a business with as many moving parts as manufacturing, that kind of shared clarity isn't a luxury. It's what keeps everyone — from the shop floor to the boardroom — pointed in the same direction.&lt;/P&gt;</description>
      <pubDate>Mon, 28 Sep 2026 14:22:31 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/From-Chaos-to-Clarity-How-the-Manufacturing-Dashboard-Helps/ba-p/5369173</guid>
      <dc:creator>AnalyticPulse</dc:creator>
      <dc:date>2026-09-28T14:22:31Z</dc:date>
    </item>
    <item>
      <title>How to Use Verified Answers in Power BI Visuals</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/How-to-Use-Verified-Answers-in-Power-BI-Visuals/ba-p/5368648</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;div data-video-id="https://youtu.be/tjqr5imHGRs" data-video-remote-vid="https://youtu.be/tjqr5imHGRs" class="lia-video-container lia-media-is-right lia-media-size-large"&gt;&lt;iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Ftjqr5imHGRs%3Ffeature%3Doembed&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dtjqr5imHGRs&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Ftjqr5imHGRs%2Fhqdefault.jpg&amp;amp;type=text%2Fhtml&amp;amp;schema=youtube" allowfullscreen="" style="max-width: 100%"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3 aria-labelledby=":r77:"&gt;Step-by-Step Walkthrough&lt;/H3&gt;
&lt;P&gt;Start by opening Power BI Desktop. If you prefer to work in the Cloud, you can enable the Large Semantic Model setting to proceed in a similar way. In the Desktop interface, navigate to the section labeled "3.3" (a UI navigation point within the verified answers setup) and select "Verified Answers." This opens a set of optional choices where you can select which visuals should serve as verified answers for specific questions.&lt;/P&gt;
&lt;P&gt;If your goal is to generate a specific visual as a complete answer for a particular question, add that visual as a verified answer along with an example question. Once configured, click the Apply button to save your selection.&lt;/P&gt;
&lt;P&gt;From there, move on to additional visuals and repeat the same process. For example, you can ask a question related to revenues and configure a trend graph to appear as the answer whenever that question is prompted. You can also use your own custom input when setting up verified answers, giving you flexibility beyond the default options.&lt;/P&gt;
&lt;P&gt;In a full demo scenario, three questions were configured — each mapped to a specific visual. When those questions were entered as prompts in Fabric Corporate, the corresponding visuals appeared as output exactly as configured.&lt;/P&gt;
&lt;H3 aria-labelledby=":r78:"&gt;What to Take Away&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Targeted Responses:&lt;/STRONG&gt; Verified answers ensure Power BI returns only the visuals you have specifically approved, making your reports more focused and relevant.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Flexible Setup:&lt;/STRONG&gt; You can configure this feature in both Power BI Desktop and the Cloud, with the option to enable the Large Semantic Model on the Cloud side.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Language Support:&lt;/STRONG&gt; The feature was tested in both English and Turkish, confirming that verified answers work across languages.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3 aria-labelledby=":r79:"&gt;Tools and Concepts Used&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Power BI Desktop&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Power BI Cloud (with optional Large Semantic Model)&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Verified Answers Feature&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Prompting and Question-Based Visuals&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Language Support (English and Turkish)&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 aria-labelledby=":r7a:"&gt;Frequently Asked Questions&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Can I use verified answers in Power BI Cloud as well as Desktop?&lt;/STRONG&gt; A: Yes, verified answers work in both environments. If you are working on the Cloud side, you have the option to enable the Large Semantic Model setting to proceed in a similar way to Desktop.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Q: Does verified answers support languages other than English?&lt;/STRONG&gt; A: Yes. The feature was tested with Turkish and produced the expected results, confirming multi-language support.&lt;/P&gt;
&lt;H2 aria-labelledby=":r7b:"&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;Verified answers in Power BI offer a practical way to ensure that only the visuals you want are shown in response to specific prompts. Whether you are working in Power BI Desktop or through Microsoft Fabric on the Cloud, this feature helps streamline your reports and improves relevance for your audience. Try configuring verified answers in your next Power BI project to see the benefits firsthand.&lt;/P&gt;
&lt;P&gt;If you have questions or comments, feel free to share them below. See you in the next post!&lt;/P&gt;</description>
      <pubDate>Thu, 24 Sep 2026 16:01:06 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/How-to-Use-Verified-Answers-in-Power-BI-Visuals/ba-p/5368648</guid>
      <dc:creator>uzuntasgokberk</dc:creator>
      <dc:date>2026-09-24T16:01:06Z</dc:date>
    </item>
    <item>
      <title>Lakehouse vs. Warehouse in Microsoft Fabric: Which One Should You Actually Use?</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Lakehouse-vs-Warehouse-in-Microsoft-Fabric-Which-One-Should-You/ba-p/5367618</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;If you're new to Microsoft Fabric, you've probably hit this wall already: &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;you go to create an item, and Fabric hands you two very similar-sounding options - Lakehouse and Warehouse. Both store tabular data in Delta format in OneLake and provide SQL access, but they offer different development and transactional experiences. Both let you query with SQL.Fabric presents both as analytical data-store options, and their capabilities overlap enough that the choice is not always obvious. So which one do you pick?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Short answer:&lt;/STRONG&gt; it depends on who's writing the queries and what shape your data is in. Long answer: keep reading — and try the quick self-check below before you scroll to the recommendation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;60-Second Self-Check&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Answer these three questions honestly before you create your next Fabric item:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Who will write the transformation logic?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- A) Python/Spark notebooks, data engineers comfortable with PySpark&lt;/P&gt;
&lt;P&gt;- B) SQL analysts and BI developers who live in T-SQL&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. What does your source data look like?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- A) Mixed — JSON, Parquet, CSV, streaming events, semi-structured&lt;/P&gt;
&lt;P&gt;- B) Mostly clean, structured, relational-shaped data&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. What's the end consumption pattern?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- A) A mix of ML, notebooks, ad-hoc exploration, and reporting&lt;/P&gt;
&lt;P&gt;- B) Primarily Power BI reports and governed semantic models&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Mostly A's → Lean Lakehouse.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Mostly B's → Lean Warehouse.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Mixed bag? → You're not alone — see the "Can I use both?" section below.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Lakehouse: The Flexible One&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A Lakehouse stores data as files (Delta Parquet) in OneLake, and gives you two ways to work with it:&lt;/P&gt;
&lt;P&gt;- Notebooks (PySpark, Spark SQL) for engineers who want full control&lt;/P&gt;
&lt;P&gt;- A SQL analytics endpoint that auto-generates so SQL folks can still query the same tables&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pick Lakehouse when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- Your data arrives messy, semi-structured, or in large volumes that benefit from Spark's distributed processing&lt;/P&gt;
&lt;P&gt;- Your team already thinks in notebooks and data science workflows&lt;/P&gt;
&lt;P&gt;- You want schema flexibility - Delta tables support schema enforcement and controlled schema evolution, offering flexibility while preserving data reliability.&lt;/P&gt;
&lt;P&gt;- You're building a medallion architecture (bronze → silver → gold) and need engineering muscle at the bronze/silver layers&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Watch out for:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- The &lt;STRONG&gt;SQL endpoint is read-only&lt;/STRONG&gt; - The SQL analytics endpoint is read-only for Lakehouse table data, so it does not support INSERT, UPDATE, or DELETE against those Delta tables. Modify or load the data through Spark or another supported ingestion and transformation experience. You can still create supported SQL objects such as views, functions, and stored procedures in the endpoint.&lt;/P&gt;
&lt;P&gt;- Fabric provides automatic Delta table optimizations, but advanced workloads may still benefit from deliberate file sizing, data layout, partitioning, or optimization strategies. (OPTIMIZE, V-Order, partitioning)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;python&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;#Typical Lakehouse bronze-to-silver pattern in a notebook&lt;/P&gt;
&lt;P&gt;df = spark.read.format("json").load("Files/raw/events/")&lt;/P&gt;
&lt;P&gt;df_clean = df.dropDuplicates().withColumn("load_date", current_date())&lt;/P&gt;
&lt;P&gt;df_clean.write.format("delta").mode("overwrite").saveAsTable("silver_events")&lt;/P&gt;
&lt;P&gt;Python&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;from pyspark.sql.functions import current_date()&lt;/P&gt;
&lt;P&gt;df = spark.read.format("json").load("Files/raw/events/")&lt;/P&gt;
&lt;P&gt;df_clean = df.dropDuplicates().withColumn("load_date", current_date())&amp;nbsp;&lt;BR /&gt;df_clean.write.format("delta").mode("overwrite")&lt;/P&gt;
&lt;P&gt;saveAsTable("silver_events")&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Warehouse: The Familiar One&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Fabric Warehouse provides a rich T-SQL-first data warehousing experience. — think of it as a cloud data warehouse that happens to store data in OneLake under the hood.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pick Warehouse when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- Your team's primary skill is T-SQL, not Spark/Python&lt;/P&gt;
&lt;P&gt;- You need full DML (`INSERT`, `UPDATE`, `DELETE`, `MERGE`) with transactional guarantees&lt;/P&gt;
&lt;P&gt;- You're modeling a governed, relational structure — star schemas, stored procedures, views&lt;/P&gt;
&lt;P&gt;- You want a more traditional data-warehouse development experience (cross-database queries, You want a familiar relational warehouse development experience with T-SQL, views, stored procedures, and support for compatible SQL tools.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Watch out for:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- Less flexible with wildly semi-structured or streaming-first data — you'll typically land that in a Lakehouse first, then move it in&lt;/P&gt;
&lt;P&gt;Warehouse is designed primarily for T-SQL rather than Spark-native development. If Spark is central to your transformation logic, Lakehouse is usually the more natural starting point.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;sql&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;-- Typical Warehouse transformation pattern&lt;/P&gt;
&lt;P&gt;MERGE INTO dbo.DimCustomer AS target&lt;/P&gt;
&lt;P&gt;USING staging.CustomerUpdates AS source&lt;/P&gt;
&lt;P&gt;ON target.CustomerID = source.CustomerID&lt;/P&gt;
&lt;P&gt;WHEN MATCHED THEN UPDATE SET target.Email = source.Email&lt;/P&gt;
&lt;P&gt;WHEN NOT MATCHED THEN INSERT (CustomerID, Email) VALUES (source.CustomerID, source.Email);&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Can I Use Both?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Yes - &lt;/STRONG&gt;and honestly, A supported and commonly discussed architecture is to use a Lakehouse for engineering-oriented layers and a Warehouse for a curated relational serving layer. do exactly this:&lt;/P&gt;
&lt;P&gt;- Lakehouse for bronze/silver ingestion and heavy transformation (Spark does the messy work)&lt;/P&gt;
&lt;P&gt;- Warehouse for the polished gold layer that analysts and Power BI consume with familiar T-SQL&lt;/P&gt;
&lt;P&gt;Both use OneLake, and Fabric supports patterns such as shortcuts and cross-database queries that can reduce or avoid unnecessary data duplication. If you physically load curated data into separate Warehouse tables, however, that creates another stored representation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Try It Yourself&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Before your next project kickoff, run this checklist with your team:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;[&amp;nbsp; ] Who owns the transformation code - engineers or SQL analysts?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;[&amp;nbsp; ] Does the source data need Spark-level flexibility, or is it already relational?&lt;/P&gt;
&lt;P&gt;[ ] Do you need multi-table transactions and T-SQL DML, or can table changes be implemented through Spark and Delta operations?&lt;/P&gt;
&lt;P&gt;[&amp;nbsp; ] Could a hybrid (Lakehouse → Warehouse) actually be the real answer?&lt;/P&gt;
&lt;P&gt;No data to test with yet? A quick way to practice both patterns above is to grab a free sample dataset (or a ready-made dashboard layout to reverse-engineer) from a site like&lt;STRONG&gt; Docynx.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Over to you&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;I'd love to hear how your team decided:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Did you go Lakehouse, Warehouse, or both? What tipped the decision — team skill set, data shape, or something else entirely? Drop your setup in the comments — especially if you've got a &lt;STRONG&gt;"we picked wrong and had to migrate&lt;/STRONG&gt;" story, those are always the most useful ones.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Sep 2026 13:55:56 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Lakehouse-vs-Warehouse-in-Microsoft-Fabric-Which-One-Should-You/ba-p/5367618</guid>
      <dc:creator>AnalyticPulse</dc:creator>
      <dc:date>2026-09-23T13:55:56Z</dc:date>
    </item>
    <item>
      <title>Stop Hosting Report Images Publicly Just to Show Them in Power BI</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Stop-Hosting-Report-Images-Publicly-Just-to-Show-Them-in-Power/ba-p/5368078</link>
      <description>&lt;P&gt;&lt;STRONG&gt;The problem- showing an image meant making it public&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Say you're building a product catalog report, and you want each row in a table to show a small product photo next to its name and price. Power BI has always supported this through an image URL field you give it a web address, and it displays the image. Simple enough, until you think about where that image actually has to live.&lt;/P&gt;
&lt;P&gt;For Power BI to load an image from a URL, that URL generally needs to be publicly reachable on the internet. Which means product photos, employee headshots, or internal logos things that often shouldn't be sitting on a public website at all - ended up hosted somewhere publicly accessible anyway, purely so a report could display them. For a genuinely public product catalog, that might be fine. But for an internal HR dashboard showing employee photos, or an internal parts catalog with proprietary product images, publishing those images to a public URL just to satisfy a formatting requirement was never a comfortable trade-off.&lt;/P&gt;
&lt;P&gt;The alternative some people used embedding images as base64 text directly in the data - avoided the public hosting problem but came with its own cost =base64-encoded images are large blocks of text, and packing many of them into a semantic model bloats its size and slows things down, especially at any real scale.&lt;/P&gt;
&lt;P&gt;What changed&lt;/P&gt;
&lt;P&gt;In the August 2026 update, Power BI added support for using image files stored in OneLake directly as an image source - anywhere Power BI already accepts an image URL. This includes the image visual itself, table and matrix cells, the card visual, and button and list slicers.&lt;BR /&gt;OneLake is Fabric's underlying storage layer think of it as your organization's own secure file storage that lives inside your Fabric tenant, not on the public internet. The important shift here is that your images now stay inside that same secure boundary as the rest of your data. Nothing has to be exposed publicly, and nothing has to be crammed into your model as bloated encoded text.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A real example&lt;/STRONG&gt;&lt;BR /&gt;Picture that same product catalog report, but this time for an internal parts catalog your company doesn't want publicly visible - only your own staff should see these product images.&lt;/P&gt;
&lt;P&gt;1. Upload your product photos to a Lakehouse in your Fabric workspace, the same way you might upload any other file to OneLake storage.&lt;BR /&gt;2. In your semantic model, add a column that holds the OneLake path to each product's image, matched to the right row (similar to how you'd normally store a web image URL).&lt;BR /&gt;3. In your table or matrix visual, set that column's data category to Image URL, the same step you'd already take for a normal web-hosted image.&lt;BR /&gt;4. Power BI now loads each product's photo directly from OneLake, displayed right in the table - with no image ever needing to be publicly hosted, and no bloated encoded text sitting in your model.&lt;/P&gt;
&lt;P&gt;The report looks and behaves exactly the way it would with any other image URL - the only thing that's changed is where the image actually lives, and who can reach it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Where this helps the most&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;- Internal catalogs and HR-style reports, where showing a photo matter for usability, but the image itself shouldn't be public&lt;BR /&gt;- Organizations with strict data governance requirements, where "the image is on a public URL" was never going to pass an internal security review&lt;BR /&gt;- Reports with a lot of images, where base64 embedding was making the model uncomfortably large&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What to keep in mind&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This requires your images to actually be organized in a Lakehouse within your Fabric workspace first, so it's a bit more setup than just pasting a public URL - worth it specifically when keeping images private and secure actually matters for your use case. For a genuinely public-facing report where the images are meant to be seen by anyone anyway, a normal public image URL still works fine and doesn't need this extra step.&lt;/P&gt;
&lt;P&gt;If you've been quietly uncomfortable about hosting internal images publicly just so a report could display them, this is worth switching to the next time you build a report that needs pictures.&lt;/P&gt;
&lt;P&gt;Thanks for reading!&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Connect with me on:&lt;BR /&gt;&lt;A href="https://www.linkedin.com/in/pankajnamekar/" target="_blank"&gt;LinkedIn&lt;/A&gt; |&lt;BR /&gt;&lt;A href="https://www.youtube.com/@datawithpankaj_com" target="_blank"&gt;Data With Pankaj - YouTube&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Sep 2026 13:56:40 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Stop-Hosting-Report-Images-Publicly-Just-to-Show-Them-in-Power/ba-p/5368078</guid>
      <dc:creator>pankajnamekar25</dc:creator>
      <dc:date>2026-09-21T13:56:40Z</dc:date>
    </item>
    <item>
      <title>Dataflow Gen2 vs Copy Job vs Pipeline: Choosing by Workload, Not by Habit</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Dataflow-Gen2-vs-Copy-Job-vs-Pipeline-Choosing-by-Workload-Not/ba-p/5367375</link>
      <description>&lt;P&gt;Every Fabric team has a default tool. People who came from Azure Data Factory build a pipeline for everything. Power BI people open Dataflow Gen2 for everything. Newer teams might put every table into a Copy Job because the wizard is quick.&lt;/P&gt;
&lt;P&gt;Each tool does its own job very well. Problems start when it gets used for another tool's job: pipelines full of hand-built watermark logic, dataflows used only to copy tables, and Copy Jobs expected to handle transformations they were never built for.&lt;/P&gt;
&lt;P&gt;This post gives you a simple way to pick the right tool based on what the workload needs.&lt;/P&gt;
&lt;H3&gt;One sentence each&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Copy Job&lt;/STRONG&gt; moves data from A to B, including incremental loads, with as little setup as possible.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dataflow Gen2&lt;/STRONG&gt; shapes data. It cleans, merges, reshapes and applies business rules using Power Query.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pipeline&lt;/STRONG&gt; coordinates work. It runs steps in order, handles dependencies and failures, and ties everything together.&lt;/P&gt;
&lt;P&gt;If you remember only one thing, remember this: &lt;STRONG&gt;Copy Job moves, Dataflow shapes, Pipeline orchestrates.&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3&gt;Start with three questions about the workload&lt;/H3&gt;
&lt;P&gt;Ask these before you open any editor.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; Am I moving data or changing it?&lt;/STRONG&gt;&lt;BR /&gt;If the data arrives at the destination looking mostly like the source, with only column mapping or type changes, you are moving data. If you are joining, deduplicating, deriving columns or applying business logic, you are transforming it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; How does the source change?&lt;/STRONG&gt;&lt;BR /&gt;A one-time or full reload is a different problem from an ongoing incremental sync. Incremental loads based on change data capture (CDC) are different again.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; How many steps depend on each other?&lt;/STRONG&gt;&lt;BR /&gt;A single load on a schedule is one thing. "Load these, then validate, then transform, then run a stored procedure, then alert someone if it fails" is a workflow.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Your answers usually point clearly to one tool.&lt;/P&gt;
&lt;H3&gt;Copy Job: when the job is data movement&lt;/H3&gt;
&lt;P&gt;Copy Job is the newest of the three and the one most often overlooked by teams stuck in old habits. Microsoft's decision guide lists its main scenarios as incremental copy and replication (both watermark-based and native CDC), data lake and storage migration, medallion ingestion, and out-of-the-box multi-table copy. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The incremental support is the main reason to use it. In a pipeline, the Copy activity handles incremental copy through pipeline expressions and control tables, and only with watermarks. That means you build and maintain the control table, the lookup, the parameterized query and the watermark update yourself. Copy Job does this for you. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Copy Job when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You need to ingest many tables from a database into a lakehouse or warehouse.&lt;/LI&gt;
&lt;LI&gt;You want an initial full load followed by incremental updates, and you don't want to build watermark logic.&lt;/LI&gt;
&lt;LI&gt;The source supports CDC and you want inserts and updates merged into the destination automatically.&lt;/LI&gt;
&lt;LI&gt;The destination is outside Fabric. Copy Job supports 40+ destination connectors. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Microsoft's own example fits this well: an analyst who needs multi-table selection across regional SQL Server instances, a bulk initial load, and then CDC-based incremental merges picks Copy Job because it supports both watermark-based and native CDC incremental copying through a wizard, and automatically detects CDC-enabled tables. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose Copy Job when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You need real transformation. Its transformation support is rated low, and that is intentional. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The load is one step in a larger workflow with conditions, retries and downstream dependencies. That belongs in a pipeline.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Dataflow Gen2: when the job is shaping data&lt;/H3&gt;
&lt;P&gt;Dataflow Gen2 is Power Query running at Fabric scale. It is the right tool when the value lies in the transformation logic. It offers 170+ built-in connectors, 300+ transformation functions in a visual interface, and data profiling tools for checking data quality. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A common complaint is that dataflows are slow for large volumes. That used to be a fair criticism, but Fabric has added several performance features aimed at specific workloads:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Fast Copy&lt;/STRONG&gt; is for direct, high-throughput copies from a supported source with no transformations. It uses the same backend as the pipeline Copy activity. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;A href="https://blog.fabric.microsoft.com/vi-vn/blog/announcing-the-general-availability-of-fast-copy-in-dataflows-gen2?ft=All" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Modern Evaluator&lt;/STRONG&gt; helps when you are shaping data from connectors that don't fold, or only partly fold. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Partitioned Compute&lt;/STRONG&gt; is for large, partitioned or multi-file datasets that can be processed in parallel. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Staging&lt;/STRONG&gt; lets you land raw data first and transform it afterwards (ELT), so ingestion and transformation don't compete in one pass. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Dataflow Gen2 when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Business logic is the main work: cleansing, standardizing codes, merging sources, calculated columns.&lt;/LI&gt;
&lt;LI&gt;The people who own the logic know Power Query and would struggle to maintain Spark or SQL.&lt;/LI&gt;
&lt;LI&gt;You are combining files, APIs, SharePoint lists and databases into one clean dataset.&lt;/LI&gt;
&lt;LI&gt;You want visual data profiling while you build.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose Dataflow Gen2 when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You are only copying tables. Fast Copy makes this workable, but Copy Job is simpler, gives you incremental loads without extra work, and has less to maintain.&lt;/LI&gt;
&lt;LI&gt;Your destination isn't supported. Dataflow Gen2 lists around 7+ destination connectors, compared with 40+ for the copy tools. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The transformations are very complex or code-heavy. At that point a notebook is usually the better choice.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Pipeline: when the job is coordination&lt;/H3&gt;
&lt;P&gt;A pipeline is not mainly a data movement tool. It is the orchestrator. Microsoft describes it as low-code orchestration that groups several activities together to complete a task. The Copy activity inside it is powerful, and it remains a strong option for very large migrations. The guide describes it as the best low-code choice for moving petabytes of data into lakehouses and warehouses, either ad hoc or on a schedule. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/decision-guide-pipeline-dataflow-spark" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The real reason to use a pipeline is the control flow: dependencies, branching, retries, failure handling, parameters, and calling other items.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose a pipeline when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Several steps must run in a set order, where step B only runs if step A succeeds.&lt;/LI&gt;
&lt;LI&gt;You need logic such as If/Else, ForEach over a metadata list, or waiting on an external event.&lt;/LI&gt;
&lt;LI&gt;You are combining different item types, such as a Copy Job, a dataflow, a notebook, a stored procedure and a web call.&lt;/LI&gt;
&lt;LI&gt;You need error handling and notifications around the whole process.&lt;/LI&gt;
&lt;LI&gt;You are doing a large, custom migration where you want detailed control over the Copy activity.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Microsoft's scenario for pipelines describes a workflow that runs stored procedures, calls web APIs, moves files and executes other pipelines. That is orchestration, not simple ingestion. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose a pipeline when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It would contain a single activity that just runs one dataflow on a schedule. Dataflows can be scheduled on their own.&lt;/LI&gt;
&lt;LI&gt;You would be rebuilding incremental loading by hand when Copy Job already supports your source.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Side-by-side&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Copy Job&lt;/th&gt;&lt;th&gt;Dataflow Gen2&lt;/th&gt;&lt;th&gt;Pipeline&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Main job&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Move and replicate&lt;/td&gt;&lt;td&gt;Transform and shape&lt;/td&gt;&lt;td&gt;Orchestrate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Incremental loads&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Built in (watermark and CDC)&lt;/td&gt;&lt;td&gt;Possible, but not its strength&lt;/td&gt;&lt;td&gt;Manual (watermark and control tables)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Transformation&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;None itself (calls other items)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Destinations&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;40+&lt;/td&gt;&lt;td&gt;~7+&lt;/td&gt;&lt;td&gt;Depends on activities&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Authoring&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Wizard&lt;/td&gt;&lt;td&gt;Power Query&lt;/td&gt;&lt;td&gt;Visual canvas and expressions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Best owner&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Data integrator, analyst&lt;/td&gt;&lt;td&gt;Analyst, data engineer&lt;/td&gt;&lt;td&gt;Data engineer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Warning sign you picked wrong&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Adding transformation workarounds&lt;/td&gt;&lt;td&gt;Dataflow has no transformation steps&lt;/td&gt;&lt;td&gt;Pipeline has one activity&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;Common mistakes that come from habit&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;The "everything is a pipeline" team.&lt;/STRONG&gt; Every source table gets a Lookup, a ForEach, a parameterized Copy activity and a stored procedure to update the watermark. It works, but you now maintain a small custom framework that Copy Job gives you ready-made. Keep the pipeline and let it call the simpler pieces.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The "everything is a dataflow" team.&lt;/STRONG&gt; Dataflows with forty queries that just select a table and load it. Move the raw ingestion to Copy Job and keep dataflows for the layer where logic actually happens.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The "Copy Job does it all" team.&lt;/STRONG&gt; Trying to handle business rules with column mappings, then adding SQL views downstream to fix what should have been transformed properly. Once logic appears, add a Dataflow Gen2 or a notebook.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The single-activity pipeline.&lt;/STRONG&gt; A pipeline whose only purpose is to run one item on a schedule adds a layer to monitor without adding control. Use the item's own schedule until you really need dependencies.&lt;/P&gt;
&lt;H3&gt;The pattern that usually wins: use all three, each for its own job&lt;/H3&gt;
&lt;P&gt;For a typical medallion architecture, the tools fit together naturally:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Bronze with Copy Job.&lt;/STRONG&gt; Ingest source tables with built-in incremental or CDC loads. No custom watermark logic.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Silver and Gold with Dataflow Gen2&lt;/STRONG&gt; (or notebooks for heavy, code-first logic). Apply cleansing, conformance and business rules where they are visible and easy to maintain.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pipeline around everything.&lt;/STRONG&gt; Run ingestion, then transformation only if ingestion succeeded, then refresh or post-processing steps, and send an alert if anything fails.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Each tool does what it is best at, and each is simpler because it isn't doing another tool's job.&lt;/P&gt;
&lt;H3&gt;A 30-second decision checklist&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;No transformation, and data must stay in sync over time?&lt;/STRONG&gt; → Copy Job&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;One-off or very large custom migration needing fine control?&lt;/STRONG&gt; → Copy activity in a pipeline&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Transformation logic is the main work, and owners know Power Query?&lt;/STRONG&gt; → Dataflow Gen2&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Complex, code-first transformation at scale?&lt;/STRONG&gt; → Notebook&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Multiple steps, dependencies, branching or error handling?&lt;/STRONG&gt; → Pipeline, calling the tools above&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Closing thought&lt;/H3&gt;
&lt;P&gt;The right question isn't "which tool do we use?" It is "what does this workload need?" Movement, shaping and coordination are three different problems, and Fabric gives you a dedicated tool for each. Teams that choose by workload build less custom plumbing, find problems faster, and hand solutions over more easily, because each piece does one clear job.&lt;/P&gt;
&lt;P&gt;Next time you start a new load, answer the three questions first, then pick the tool.&lt;/P&gt;</description>
      <pubDate>Wed, 16 Sep 2026 19:35:15 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Dataflow-Gen2-vs-Copy-Job-vs-Pipeline-Choosing-by-Workload-Not/ba-p/5367375</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-16T19:35:15Z</dc:date>
    </item>
    <item>
      <title>Mouse over effects for buttons</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Mouse-over-effects-for-buttons/ba-p/5366763</link>
      <description>&lt;P&gt;Before we begin, I'd like to clarify a golden rule for creating a great button experience: users should always have a clear indication of which button is currently selected compared to the others. It may sound simple, and many will argue that the Navigator visual available today already solves this problem. However, when we want to go further with custom effects, we will need a bit of retro creativity with our old friends, bookmarks.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;NOTE: If you are not familiar with how to easily highlight a selected button by changing its background color, you can review that article first.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Next, we will look at two effects separately, although they could easily be combined.&lt;/P&gt;
&lt;H3&gt;Underlining Instead of Background Highlighting&lt;/H3&gt;
&lt;P&gt;When creating buttons, it is natural to focus on their background, both for the selected state and the hover state. However, if we pay attention to the web, we can see that a much lighter visual effect is often achieved with underlined titles.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;With a simple underline, I can quickly identify which button is currently selected. I can also use the same effect when the cursor hovers over the other measures.&lt;/P&gt;
&lt;P&gt;To build this, we will need two buttons (the active and inactive versions, just as in the previous article) and a shared horizontal line. The inactive button, in its normal state, has a solid background (0% transparency) that exactly matches the page background color, along with gray text. When the mouse hovers over it, the button changes to white text and a 100% transparent background, making the line behind it visible.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;When we click the active button, meaning the one that represents the currently displayed state, it remains hidden until the button is clicked. After the click, we will make it visible using bookmarks. This button is positioned exactly on top of the inactive one. While the active button is visible, we will hide the inactive button. The active button will have the same properties in its Default state as the On Hover state of the inactive button, making the horizontal line visible and displaying the text in white. Let's see how the complete setup looks:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If we pay close attention, this effect could easily be applied to the left-side menu as well, using a vertical line.&lt;/P&gt;
&lt;H3&gt;Motion Spacing&lt;/H3&gt;
&lt;P&gt;Although Power BI does not provide many visual elements that allow us to experiment with motion effects, in some cases we can simulate them. In this example, we will create the illusion of the text moving slightly to the right when the cursor is placed over the button. To achieve this, we will once again use three elements: two buttons and a vertical line. The difference this time is that instead of simply covering the line as we did before, we will hide and show it. Why make it more complicated this way? Simply because the background has a gradient. In those situations, we cannot have the button in its default state hide the line, because reproducing the exact background effect on the button would be very difficult. Therefore, we will keep the lines hidden until the button is pressed, at which point they will be displayed.&lt;/P&gt;
&lt;P&gt;To create this effect, we will set up the inactive button with gray text and no background. The trick will be in its On Hover state. In that state, we will add invisible characters.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;What is an invisible character?&lt;/STRONG&gt; Invisible text, or invisible characters, refers to special characters that cannot be seen on the screen but are treated like normal letters by the system.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When the mouse hovers over the text, it will begin with invisible characters, creating the effect that the text shifts slightly to the right. Something like this:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Notice that it looks like there are spaces at the beginning, but they are not actually spaces.&lt;/P&gt;
&lt;P&gt;Here are the characters if you'd like to copy them:‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎← after the arrow. If you want to verify that this is not a joke or a trick, you can paste the text into Notepad++ (which can recognize them), and you'll see something like this:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The movement effect is now in place. So, how do we continue enhancing the user experience? By following the golden rule. When the user clicks, we will hide the inactive button to reveal the vertical line and the active button, which in this case has its text colored the same as the line.&lt;/P&gt;
&lt;P&gt;Let's see the final result:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;That's all for this article. I hope it gives you some new ideas for creating user experiences that feel more modern, friendly, and similar to the web applications we interact with every day.&lt;/P&gt;
&lt;P&gt;Remember that these two effects can be combined. For example, you could have a vertical navigation menu that not only displays the vertical indicator line for the selected option, but also applies the movement effect when users hover over the items.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://blog.ladataweb.com.ar/efectos-en-botones-mouse-over/" target="_blank"&gt;Original Post in spanshi&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2026 18:34:29 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Mouse-over-effects-for-buttons/ba-p/5366763</guid>
      <dc:creator>ibarrau</dc:creator>
      <dc:date>2026-09-15T18:34:29Z</dc:date>
    </item>
    <item>
      <title>How to Connect SAP to Power BI Through SAP BTP</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/How-to-Connect-SAP-to-Power-BI-Through-SAP-BTP/ba-p/5366349</link>
      <description>&lt;P&gt;Learn how to connect SAP to Power BI through SAP BTP using Metrica Software’s connector. This step-by-step guide covers creating reusable OData data sources, managing access, and loading SAP data into Power BI.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:57:05 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/How-to-Connect-SAP-to-Power-BI-Through-SAP-BTP/ba-p/5366349</guid>
      <dc:creator>metrica</dc:creator>
      <dc:date>2026-09-14T13:57:05Z</dc:date>
    </item>
    <item>
      <title>Power BI Smart Table Visual: Excel style Column Filtering, Dynamic Column Headers, Grouping Columns</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Power-BI-Smart-Table-Visual-Excel-style-Column-Filtering-Dynamic/ba-p/5366517</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;For a smoother reading experience with clearer screenshots and easy code copying, I suggest [reading this article on my website](https://www.techietips.co.in/articles/powerbi-managed-6500measures-smartly). It’s free, ad-free, distraction-free, and dedicated solely to sharing knowledge.&lt;/P&gt;
&lt;P&gt;The Table is the most commonly used visual in Power BI. Anyone who has spent years in Excel expects to click a header and filter that column. They expect related columns to sit under a common heading. The native table visual does none of this.&lt;/P&gt;
&lt;P&gt;There are grid visuals in the Microsoft visual app source that do. Most developers never get to use them, for two reasons that have nothing to do with the features. The good ones are licensed per developers or user, and that cost has to be justified to someone. The free ones are usually not Microsoft certified, which means an uncertified third party script is running inside your report, and that is a fair thing for a security team to say no to.&lt;/P&gt;
&lt;P&gt;So I built one. It is called Smart Table, and I built it with Claude. This post walks through what it does.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Excel style column filtering&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Every column header carries a funnel button in its own divided cell. Click it and you get what you would expect from Excel: sort, a set of conditions appropriate to the column’s type, and a searchable checkbox list of that column’s values. The menu names the column it belongs to, counts what you have ticked, and stays open while you sort.&lt;/P&gt;
&lt;P&gt;The conditions follow the column type rather than offering one generic list:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Sync: does the filter stay in the grid or reach the report&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Sync is on by default. Filters applied in the header are pushed to the model, so every other visual on the page responds, exactly as if the user had used a slicer. Turn Sync off: Filtering then narrows this grid only.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Global search&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The toolbar has a search box with its own operator dropdown: contains, is exactly, starts with, ends with, does not contain. It searches across every column at once.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=biYBDeVU8xw" target="_blank"&gt;Power BI: Smart Table Excel Style Column Filtering&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Dynamic column headers, driven by a measure&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A column header name is normally a static label. Here it can be a DAX measure.&lt;/P&gt;
&lt;P&gt;Arrival Month is set to April, and the Key Metrics headers read Lead Time (Avg: 30.00), Room Nights (Avg: 1.00), ADR (Avg: 160.50). Change the month and they recompute.&lt;/P&gt;
&lt;P&gt;The header honors the filter context, including the filters applied inside the grid itself. Filter Property down to Resort Hotel with the funnel and the averages in the header follow.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=CRxdEWsqfzs" target="_blank"&gt;Power BI Smart Table: Measure Driven Column Headers (Dynamic Column names) - YouTube&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Column groups, without any extra tables&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Four groups across eleven columns: Reservation, Channel, Room Type, Key Metrics. Each one is a spanning header above its columns with its own colour.&lt;/P&gt;
&lt;P&gt;The thing to notice is what is not involved. No disconnected table. No field parameters. No two table visuals stacked on top of each other. No shapes placed in the background: which means your column groups move to the right along with your cursor.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=xFi8LUcKWig" target="_blank"&gt;Power BI Smart Table: Grouping columns in a table without using a static table and a matrix visual - YouTube&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Known limits&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;All of these come down to one idea: some filtering reaches the model and some is local to the grid.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;30,000 rows That is the Power BI cap for a table mapping with this data reduction algorithm. Header filters push a real model filter, so filtering down to a workable set works fine. Do not point it at an unfiltered fact table.&lt;/LI&gt;
&lt;LI&gt;Value lists cap at 2,000 distinct values per column**, built from the loaded rows. On a high cardinality column like a guest name, use the search box in the menu.&lt;/LI&gt;
&lt;LI&gt;Ends with, Does not end with, and blank selections filter the grid only.** Power BI’s advanced filter operators have `StartsWith` and `Contains` but no `EndsWith`, and a blank has no equivalent in a model side `In` list. The menu tells you when you pick one of these.&lt;/LI&gt;
&lt;LI&gt;Bookmarks restore the data but not the ticked checkboxes.** The model filter is persisted by Power BI, so the rows come back correctly. The header checkboxes just will not show as ticked.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I wrote this to make one point: the gaps in the built-in visuals are not permanent. Build your own, and with vibe coding that is no longer a months-long project.&lt;/P&gt;
&lt;P&gt;I am not sharing the .pbiviz file. It is an experiment, not tested for production grade reports. Feel free to checkout my [website](https://www.techietips.co.in) and reach out to me if you are interested to do these experiments along with me,&lt;/P&gt;
&lt;P&gt;I would like to continue developing this visual and will write detailed blogs in features explaining its features and implementations.&lt;/P&gt;
&lt;P&gt;I hope you learned something new. Feel free to share your thoughts in the comments section.&lt;/P&gt;
&lt;P&gt;Happy Learning!!!&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:55:10 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Power-BI-Smart-Table-Visual-Excel-style-Column-Filtering-Dynamic/ba-p/5366517</guid>
      <dc:creator>tharunkumarRTK</dc:creator>
      <dc:date>2026-09-14T13:55:10Z</dc:date>
    </item>
    <item>
      <title>My button &amp; slicer disappeared in Power BI Service. Here's why.</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/My-button-slicer-disappeared-in-Power-BI-Service-Here-s-why/ba-p/5366075</link>
      <description>&lt;P&gt;Imagine you have created a beautiful table in Power BI with a slicer and a button placed on top of it, overlapping the table area.&lt;/P&gt;
&lt;P&gt;The slicer is used to search for specific content. The button becomes clickable when exactly one row is selected and opens a detail page for that row.&lt;/P&gt;
&lt;P&gt;In Power BI Desktop, everything works perfectly.&lt;/P&gt;
&lt;P&gt;However, as soon as you publish your report to the Power BI service and start interacting with it, strange things may happen.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If you select one row, both the slicer and the button disappear.&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If you leave the table area, both reappear.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;However, as soon as you hover over them, they disappear again.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Even more strangely, if you move in and out of the table a few times, it may happen that the button is available again.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;As it turns out, this is documented behaviour, not a bug. In reading view, Power BI brings the selected visual to the front layer, above anything that overlaps it. Selecting a table row selects the table, so the button and the slicer, which actually sit in front of the table, end up behind it and disappear.&lt;/P&gt;
&lt;P&gt;What I can't explain is the button becoming available again after moving in and out a few times. I haven't found anything documented on that.&lt;/P&gt;
&lt;P&gt;The good news: this default behaviour can be changed.&lt;/P&gt;
&lt;P&gt;To change it, there is an option. It's called 'Maintain layer order' and can be found in a visuals format pane under Properties &amp;gt; Advanced options.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Switch it on for the visual that jumps to the front, in my case the table.&lt;/P&gt;
&lt;P&gt;Have you run into this one? And on which visual did you end up switching it on?&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 21:28:14 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/My-button-slicer-disappeared-in-Power-BI-Service-Here-s-why/ba-p/5366075</guid>
      <dc:creator>Hans-Georg_Puls</dc:creator>
      <dc:date>2026-09-10T21:28:14Z</dc:date>
    </item>
    <item>
      <title>Ask vs. Act: Fabric Data Agents and Fabric Operations Agents Explained (with Industry Scenarios)</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Ask-vs-Act-Fabric-Data-Agents-and-Fabric-Operations-Agents/ba-p/5366083</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Feature status (September 2026):&lt;/STRONG&gt; Fabric data agents and operations agents are both generally available. Investigator insights in operations agents is still in preview. Always check Microsoft Learn for the latest.&lt;/P&gt;
&lt;H2&gt;The core difference in one line&lt;/H2&gt;
&lt;P&gt;A &lt;STRONG&gt;Fabric data agent&lt;/STRONG&gt; waits for a question and answers it from governed data. A &lt;STRONG&gt;Fabric operations agent&lt;/STRONG&gt; doesn't wait for anyone: it continuously watches live data against business goals and raises its hand, or triggers an action, when a condition is met.&lt;/P&gt;
&lt;P&gt;A simple mental model: the data agent is the expert analyst you can message at any time; the operations agent is the control-room operator who never goes off shift.&lt;/P&gt;
&lt;H2&gt;Fabric data agent: conversational analytics on governed data&lt;/H2&gt;
&lt;P&gt;The data agent is a configurable Fabric item that lets anyone ask plain-English questions about data in OneLake. Behind the scenes, it decides which source can answer the question, then generates and runs a read-only query: SQL for lakehouses and warehouses, DAX for Power BI semantic models, and KQL for KQL databases (including Eventhouse). It can also work with ontologies and Microsoft Graph.&lt;/P&gt;
&lt;P&gt;One data agent can combine up to five sources. Authors improve accuracy by selecting relevant tables, writing agent instructions in business language (for example, "route revenue questions to the Finance semantic model"), and adding example question-and-query pairs, up to 100 per source (examples aren't currently supported for semantic models).&lt;/P&gt;
&lt;P&gt;Security is where the data agent is deliberately conservative. Every query runs with the &lt;STRONG&gt;asking user's own credentials&lt;/STRONG&gt;, so row-level and column-level security still apply, and Microsoft Purview controls such as DLP and access restriction policies are respected. It never creates, updates, or deletes data, and it doesn't trigger notebooks or other workflows.&lt;/P&gt;
&lt;P&gt;Once published, the agent can be consumed well beyond Fabric: in Microsoft 365 Copilot, Teams, Azure AI Foundry, or as a tool inside Microsoft Copilot Studio agents, where the integration is now generally available through the Fabric IQ Data MCP tool.&lt;/P&gt;
&lt;P&gt;It's built for conversational insight, not bulk extraction: responses are capped at 25 rows and 25 columns, and unstructured files like PDFs aren't supported.&lt;/P&gt;
&lt;H2&gt;Fabric operations agent: autonomous monitoring with human-in-the-loop action&lt;/H2&gt;
&lt;P&gt;The operations agent lives in the &lt;STRONG&gt;Real-Time Intelligence&lt;/STRONG&gt; workload. Instead of answering ad-hoc questions, you give it business goals, instructions, a knowledge source (an Eventhouse KQL database or an ontology), and the actions it's allowed to recommend.&lt;/P&gt;
&lt;P&gt;From that configuration, the agent generates a &lt;STRONG&gt;playbook&lt;/STRONG&gt;: the business entities and properties it will track and the rules that define what "needs attention" looks like. You can build this manually or describe your intent to the built-in Copilot chat ("monitor the turbines and alert me when motor temperature gets too high") and refine the proposed rules iteratively. Each rule is backed by an inspectable query that the agent evaluates every five minutes, using either &lt;STRONG&gt;state conditions&lt;/STRONG&gt; (such as &lt;EM&gt;is above&lt;/EM&gt; 80, which keeps signaling while true) or &lt;STRONG&gt;transition conditions&lt;/STRONG&gt; (such as &lt;EM&gt;crosses above&lt;/EM&gt; 80, which signals only on the change).&lt;/P&gt;
&lt;P&gt;When a rule is met, the agent sends a Teams message, to a person or a channel, through the Fabric Operations Agent Teams app, summarizing what it saw and what it recommends. Beyond messaging, you can configure actions that run a Fabric notebook or trigger a Power Automate flow, which opens the door to ServiceNow tickets, SAP work orders, emails, or any other Power Automate connector. For anomalies, Investigator insights (preview) adds correlated patterns and a likely root-cause summary directly in Teams.&lt;/P&gt;
&lt;P&gt;Two governance details matter. First, each operations agent gets its own &lt;STRONG&gt;Microsoft Entra Agent ID&lt;/STRONG&gt;, so its activity is auditable separately from human users. Second, it runs in delegated mode with its &lt;STRONG&gt;creator's permissions&lt;/STRONG&gt;: when a recipient approves a recommendation, the action executes with the creator's access. Choose agent owners deliberately.&lt;/P&gt;
&lt;H2&gt;Side-by-side comparison&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Fabric data agent&lt;/th&gt;&lt;th&gt;Fabric operations agent&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Core purpose&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Answer questions about data&lt;/td&gt;&lt;td&gt;Monitor data and drive action&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Interaction model&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Pull: a user asks&lt;/td&gt;&lt;td&gt;Push: the agent notifies&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Trigger&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;A human prompt&lt;/td&gt;&lt;td&gt;A rule condition being met&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Data sources&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Lakehouse, warehouse, semantic model, KQL database, mirrored database, ontology, Microsoft Graph (up to 5)&lt;/td&gt;&lt;td&gt;Eventhouse KQL database or ontology&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Configuration&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Tables, instructions, example queries&lt;/td&gt;&lt;td&gt;Goals, instructions, playbook rules, actions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Output&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Natural-language answers, small tables, summaries&lt;/td&gt;&lt;td&gt;Teams alerts with recommendations, notebook runs, Power Automate flows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Write / action capability&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Strictly read-only&lt;/td&gt;&lt;td&gt;Executes approved actions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Identity&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Asking user's credentials (RLS/CLS enforced)&lt;/td&gt;&lt;td&gt;Entra Agent ID using creator's delegated permissions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Time orientation&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;"What happened, and why?"&lt;/td&gt;&lt;td&gt;"What's happening now, and what should we do?"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Where users meet it&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Fabric, Teams, M365 Copilot, Copilot Studio, Foundry&lt;/td&gt;&lt;td&gt;Primarily Teams (alerts, approvals, investigations)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;Industry scenarios&lt;/H2&gt;
&lt;H3&gt;1. Manufacturing: from vibration spike to work order&lt;/H3&gt;
&lt;P&gt;A discrete manufacturer streams CNC machine telemetry (spindle vibration, motor temperature, cycle time) through Eventstream into an Eventhouse.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Its goal is to minimize unplanned downtime. A rule watches for vibration crossing above tolerance on any machine. When it fires, the maintenance supervisors' Teams channel receives an alert with the machine, recent readings, and a recommendation to schedule an inspection. On approval, a Power Automate flow creates a work order in the maintenance system.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; Preparing for a quarterly review, the plant manager asks: &lt;EM&gt;"Which lines had the most unplanned downtime last quarter, and how did OEE compare to target?"&lt;/EM&gt; The agent queries the production lakehouse and OEE semantic model and returns a ranked answer, with no report-building required.&lt;/P&gt;
&lt;H3&gt;2. Retail and CPG: protecting a flash promotion&lt;/H3&gt;
&lt;P&gt;During a weekend promotion, point-of-sale and inventory events land in Eventhouse in near real time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; It monitors store-level inventory for promoted SKUs and flags any item dropping below safety stock. The regional replenishment lead gets a Teams recommendation to trigger an emergency transfer from a nearby store or distribution center, executed through Power Automate after approval.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; On Monday, the category manager asks: &lt;EM&gt;"How did the promotion perform versus the same weekend last year, by region, and which stores ran out of stock?"&lt;/EM&gt; The agent blends the sales semantic model with lakehouse inventory history to answer in seconds.&lt;/P&gt;
&lt;H3&gt;3. Energy and utilities: pipeline pressure and grid load&lt;/H3&gt;
&lt;P&gt;An oil and gas operator ingests SCADA readings (pressure, flow rate, compressor status) from field assets; a utility does the same for substations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Rules detect pressure exiting its normal operating range at a pumping station, or transformer load crossing a critical threshold during a heatwave. The control room is alerted with context and a recommended response, such as dispatching a field technician via a flow. Human approval stays in the loop. Note that operations agents complement, and never replace, certified safety instrumented systems.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; An asset integrity engineer asks: &lt;EM&gt;"Which ten assets had the most pressure excursions in the last 12 months, and when were they last serviced?"&lt;/EM&gt;&lt;/P&gt;
&lt;H3&gt;4. Financial services: payment gateway degradation&lt;/H3&gt;
&lt;P&gt;A bank streams card authorization events by gateway, merchant category, and channel.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Its goal is protecting payment success rates. When a gateway's decline rate crosses above its threshold, the payments operations team gets an alert with a breakdown and a recommendation to reroute traffic to a secondary processor, an action that runs only after an engineer approves it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; A relationship manager asks: &lt;EM&gt;"Which of my corporate clients saw failed payments above 2% this month?"&lt;/EM&gt; Because the agent runs under the manager's own identity, row-level security ensures they only see their own portfolio.&lt;/P&gt;
&lt;H3&gt;5. Pharma logistics: cold-chain integrity&lt;/H3&gt;
&lt;P&gt;A logistics provider moving vaccines and biologics collects IoT temperature and GPS data from refrigerated containers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; A transition rule fires the moment a shipment's temperature exits the 2–8°C range. The control tower is notified with location and excursion details, a notebook action flags the batch for quality review, and a flow alerts the receiving site.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; A quality lead asks: &lt;EM&gt;"Which lanes and carriers had the highest excursion rates this year?"&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Better together: detect, decide, explain&lt;/H2&gt;
&lt;P&gt;The strongest architectures use both agents on the same data foundation. Picture an airport operations team. An operations agent watches baggage-system events in Eventhouse and alerts the duty manager when belt throughput drops below target during a peak arrival wave. The manager approves the recommended action: rerouting bags to an alternate belt via Power Automate.&lt;/P&gt;
&lt;P&gt;Then, without leaving Teams, the manager asks a Copilot Studio agent grounded by a Fabric data agent over the same Eventhouse and historical lakehouse: &lt;EM&gt;"How often has this belt degraded at this time of day over the past 90 days?"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The operations agent handles &lt;STRONG&gt;detection and response&lt;/STRONG&gt;. The data agent handles &lt;STRONG&gt;explanation and learning&lt;/STRONG&gt;. Because both point at the same governed data in OneLake, the alert and the analysis never disagree about the numbers.&lt;/P&gt;
&lt;H2&gt;How to choose&lt;/H2&gt;
&lt;P&gt;Choose a &lt;STRONG&gt;data agent&lt;/STRONG&gt; when the need is exploratory and question-driven: executive self-service, analyst acceleration, or bringing trusted data into Copilot experiences. Choose an &lt;STRONG&gt;operations agent&lt;/STRONG&gt; when you have a specific, repeatable business process with measurable conditions, where minutes matter and someone should be told (or something should happen) without anyone having to ask.&lt;/P&gt;
&lt;P&gt;A quick test: if you hear &lt;EM&gt;"someone should check this dashboard every hour,"&lt;/EM&gt; you need an operations agent. If you hear &lt;EM&gt;"I just need to know X before Friday's meeting,"&lt;/EM&gt; you need a data agent.&lt;/P&gt;
&lt;H2&gt;Practical tips before you build&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;For data agents:&lt;/STRONG&gt; curate tightly by selecting only the tables users need, write instructions in business terms, and invest in example queries, which are often the biggest accuracy lever. Use Git integration and deployment pipelines to promote agents from development to production.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;For operations agents:&lt;/STRONG&gt; scope one agent to one business process, flatten nested JSON columns in Eventhouse tables before configuring, and review each rule's generated query before starting the agent. Remember that approvals execute with the creator's permissions, trial capacities aren't supported, and agents consume capacity units, so track them in the Fabric Capacity Metrics app.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;For both:&lt;/STRONG&gt; confirm your tenant admin has enabled the required Copilot and Azure OpenAI settings, including cross-geo AI processing where your capacity region requires it.&lt;/P&gt;
&lt;H2&gt;Wrapping up&lt;/H2&gt;
&lt;P&gt;Fabric data agents and operations agents are two sides of the same coin. The data agent democratizes &lt;STRONG&gt;understanding&lt;/STRONG&gt;: anyone can ask a question and get a governed answer. The operations agent operationalizes &lt;STRONG&gt;response&lt;/STRONG&gt;: the business stops depending on people watching dashboards and starts reacting to events as they happen.&lt;/P&gt;
&lt;P&gt;Start with the scenario that hurts most today, build on a shared OneLake foundation, and grow from there.&lt;/P&gt;
&lt;P&gt;How are you using these agents in your industry? Share your scenarios in the comments!&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 21:26:37 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Ask-vs-Act-Fabric-Data-Agents-and-Fabric-Operations-Agents/ba-p/5366083</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-10T21:26:37Z</dc:date>
    </item>
    <item>
      <title>You Can Create Calculated DAX Columns in Direct Lake — But Should You?</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/You-Can-Create-Calculated-DAX-Columns-in-Direct-Lake-But-Should/ba-p/5365681</link>
      <description>&lt;P&gt;Adding calculated columns in DAX for Direct Lake gives a lot of flexibility and feels like an easy option... BUT.....&lt;/P&gt;</description>
      <pubDate>Wed, 09 Sep 2026 14:03:44 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/You-Can-Create-Calculated-DAX-Columns-in-Direct-Lake-But-Should/ba-p/5365681</guid>
      <dc:creator>amitchandak</dc:creator>
      <dc:date>2026-09-09T14:03:44Z</dc:date>
    </item>
    <item>
      <title>Building and Enriching a Microsoft Fabric Data Agent on a Power BI Semantic Model</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Building-and-Enriching-a-Microsoft-Fabric-Data-Agent-on-a-Power/ba-p/5364459</link>
      <description>&lt;P&gt;Microsoft Fabric’s Data Agents are one of the most exciting additions to the Fabric ecosystem for Power BI practitioners. They let business users ask questions in plain English and receive grounded answers directly from a governed semantic model, without needing to write DAX or SQL.&lt;BR /&gt;&lt;BR /&gt;In this post, I’ll explain why you might place a Data Agent on top of a Power BI semantic model, how to set one up, and, most importantly, how to enrich it so it provides high-quality, trustworthy answers.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;The big idea:&lt;/STRONG&gt; Business users ask questions in plain English. The agent reasons over a curated semantic layer and returns grounded, governed answers rather than invented results.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;1. What Are Data Agents, and Why Use Them?&lt;/H2&gt;&lt;P&gt;Data Agents let people ask plain-English questions about their data and receive context-rich answers. Under the hood, they use Azure OpenAI models to interpret the question, determine which data source is most relevant, and generate an appropriate query: SQL for a warehouse or lakehouse, DAX for a semantic model, and KQL for event data.&lt;BR /&gt;&lt;BR /&gt;The result is presented as a readable response containing tables, summaries, or insights while respecting the user’s existing security permissions. Because Data Agents connect directly to governed data in OneLake, they make analytics accessible to users who may never open Power BI Desktop or write a query.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;1.1 What Is the Difference Between Copilot and a Data Agent?&lt;/H3&gt;&lt;P&gt;Both Fabric Copilot and Fabric Data Agents use generative AI, but they are designed for different scenarios.&lt;BR /&gt;&lt;BR /&gt;Copilot is embedded within the current Fabric experience, such as a Power BI report, and helps users complete context-specific tasks such as creating visuals or writing DAX. A Data Agent is a standalone conversational analytics experience that can connect to as many as five data sources and can be integrated with experiences such as Microsoft Teams, Microsoft 365 Copilot, Copilot Studio, and custom applications.&lt;BR /&gt;&lt;BR /&gt;Data Agents support custom instructions, business terminology, verified answers, and reusable integrations. They are read-only and honor existing security. This makes them suitable for domain-specific, governed self-service analytics, while Copilot remains useful for assistance within the current Fabric item.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;2. Prerequisites and Setup&lt;/H2&gt;&lt;P&gt;To create a Data Agent, you need Fabric capacity and at least one supported data source containing data, such as a lakehouse, warehouse, Power BI semantic model, KQL database, mirrored database, or ontology.&lt;BR /&gt;&lt;BR /&gt;You should also have a well-designed Power BI semantic model with governed measures, meaningful relationships, clear naming, and appropriate security. Cross-geo processing must be enabled when your data is stored in a different region. Read permission on the semantic model is sufficient; Build permission is not required.&lt;/P&gt;&lt;H2&gt;3. Preparing the Semantic Model: The Most Important Step&lt;/H2&gt;&lt;P&gt;Preparing the semantic model is the foundation of a reliable Data Agent. Before adding the model to the agent, configure it using Power BI’s &lt;STRONG&gt;Prep for AI&lt;/STRONG&gt; capabilities.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Use business-friendly names.&lt;/STRONG&gt; Give tables, columns, and measures clear names. Hide technical keys, housekeeping fields, and other objects that users should not query.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Organize the model.&lt;/STRONG&gt; Group related columns and measures into display folders, such as Customer, Sales, Profit, and Time Intelligence.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Add descriptions and synonyms.&lt;/STRONG&gt; Explain what each important table, column, and measure represents, and include the terminology users are likely to use.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Validate relationships.&lt;/STRONG&gt; Ensure the model has the correct active relationships, filter direction, and date behavior.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Apply security.&lt;/STRONG&gt; Configure RLS and OLS where required. The Data Agent respects the semantic model’s security.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Configure Prep for AI.&lt;/STRONG&gt; Define the AI data schema, semantic-model instructions, and verified answers. When a Data Agent queries a semantic model, its DAX-generation tool relies on the model metadata and Prep for AI configuration. Data Agent-level instructions are not used to generate DAX, so model-specific calculation and filtering rules must live in the semantic model.&lt;/LI&gt;&lt;/OL&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;4. Creating and Configuring the Data Agent&lt;/H2&gt;&lt;P&gt;In your Fabric workspace, select &lt;STRONG&gt;New item&lt;/STRONG&gt;, choose &lt;STRONG&gt;Fabric data agent&lt;/STRONG&gt;, give the agent a descriptive name, and create it. The OneLake catalog will appear, allowing you to add supported data sources. Select the Power BI semantic model and any other required sources, then choose only the tables the agent needs for the intended business questions.&lt;/P&gt;&lt;H3&gt;4.1 Configuring the Data Agent&lt;/H3&gt;&lt;P&gt;Creating the agent is only the starting point. To improve accuracy and keep the experience useful over time, treat it as an evolving system and use an iterative process of testing and refinement.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;1. Add Data Agent instructions.&lt;/STRONG&gt; These instructions govern orchestration and presentation. Use them to define source-routing priorities, response structure, clarification behavior, business terminology, and how results should be summarized or visualized.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;2. Add semantic-model instructions.&lt;/STRONG&gt; These belong in Prep for AI and explain how AI should understand and query the model. Include governed measures, date rules, relationships, filter logic, definitions, and important safeguards.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;One important separation:&lt;/STRONG&gt; Semantic Model AI Instructions explain how AI should understand the model. Data Agent Instructions explain how the agent should orchestrate and communicate.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;3. Start with a benchmark set.&lt;/STRONG&gt; Build a representative set of business questions with expected queries and answers. Use it to evaluate accuracy and expand coverage systematically.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;4. Diagnose incorrect responses.&lt;/STRONG&gt; Determine whether an incorrect answer was caused by missing metadata, unclear instructions, incomplete examples, an ambiguous user question, or a semantic-model issue.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;5. Refine the instructions.&lt;/STRONG&gt; Clarify data-source priorities, business definitions, date behavior, summary-versus-detail rules, and expected output formatting.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H3&gt;4.2 Best Practices and Recommendations&lt;/H3&gt;&lt;OL&gt;&lt;LI&gt;Use descriptive table, column, and measure names so the agent can understand the schema.&lt;/LI&gt;&lt;LI&gt;Build specialized agents for specific domains and limit each source to the tables and columns needed for that domain.&lt;/LI&gt;&lt;LI&gt;Be explicit about what the agent should do, not only what it should avoid.&lt;/LI&gt;&lt;LI&gt;Define business terms, abbreviations, synonyms, date rules, and important calculation logic.&lt;/LI&gt;&lt;LI&gt;Provide representative verified answers for common and complex questions.&lt;/LI&gt;&lt;LI&gt;Select only the sources and objects needed to answer the expected questions. A focused configuration improves query accuracy and efficiency.&lt;/LI&gt;&lt;LI&gt;Use SQL, DAX, or KQL examples only where they materially clarify complex joins, filters, or date logic.&lt;/LI&gt;&lt;LI&gt;Validate results under different user identities to confirm RLS and OLS behavior.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;These practices help the Data Agent interpret questions correctly, query the right source, and return clear, context-rich answers.&lt;/P&gt;&lt;H2&gt;5. Enriching and Evolving the Data Agent&lt;/H2&gt;&lt;P&gt;You can enrich the agent with instructions, examples, terminology, and response rules. Data Agent instructions should define tone, routing, clarification, response formatting, and visual policy across sources. Avoid placing semantic-model-specific calculation logic at this level.&lt;BR /&gt;&lt;BR /&gt;Use verified answers to anchor common business questions to the expected interpretation and governed query. As you test the agent, review both the returned result and the generated query. If an answer is incorrect, refine the semantic model metadata, AI data schema, verified answers, or instructions based on the actual cause.&lt;/P&gt;&lt;H3&gt;Evaluate and Iterate with the Fabric Data Agent SDK&lt;/H3&gt;&lt;P&gt;Evaluation is essential to the ongoing development of a Data Agent. Use the Fabric Data Agent SDK to test representative questions at scale, compare actual results with expected answers, and identify patterns in failures.&lt;BR /&gt;&lt;BR /&gt;An effective evaluation set should include common questions, ambiguous questions, unsupported requests, date and comparison scenarios, hierarchy navigation, security-sensitive questions, and follow-up questions that depend on conversational context.&lt;/P&gt;&lt;H3&gt;Add Code Interpreter&lt;/H3&gt;&lt;P&gt;Code Interpreter gives the Data Agent a secure, sandboxed Python environment for analyzing retrieved data. With it enabled, the agent can support calculations, deeper analysis, and visualizations that go beyond the initial query result.&lt;BR /&gt;&lt;BR /&gt;The governed data source should still produce the underlying result first. Code Interpreter should analyze that result rather than recreate business logic outside the semantic model.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H2&gt;6. How Data Agents Work at Runtime&lt;/H2&gt;&lt;P&gt;When a user asks a question, the Data Agent uses Azure OpenAI to interpret the request and determine the most suitable connected source. It accesses each source under the user’s identity and security context.&lt;BR /&gt;&lt;BR /&gt;For a Power BI semantic model, the agent uses the model’s metadata and Prep for AI configuration to generate and execute a DAX query. It then formats the governed result as a conversational response. Because the query runs under the user’s permissions and honors model and workspace security, the agent only returns information that the user is authorized to access.&lt;/P&gt;&lt;H2&gt;7. Benefits and Limitations&lt;/H2&gt;&lt;P&gt;Data Agents make governed analytics more accessible by reducing the need for users to write queries or build a report for every question. They can bring multiple supported data sources into one conversational experience while honoring existing security and governance.&lt;BR /&gt;&lt;BR /&gt;However, a Data Agent is not automatically accurate simply because it is connected to trusted data. Its results depend on semantic-model quality, relevant metadata, clear instructions, verified answers, focused source selection, and continuous evaluation. Complex root-cause or predictive questions may also require additional analytical logic beyond a straightforward governed query.&lt;/P&gt;&lt;H2&gt;8. Conclusion&lt;/H2&gt;&lt;P&gt;Microsoft Fabric Data Agents provide a powerful new way to interact with enterprise data. By combining a well-prepared Power BI semantic model with focused Data Agent configuration, verified answers, clear instructions, and ongoing evaluation, you can create a conversational analytics experience that users can trust.&lt;BR /&gt;&lt;BR /&gt;The goal is not merely to connect AI to data. The goal is to connect AI to governed business meaning.&lt;/P&gt;&lt;H5&gt;Further Reading -&amp;nbsp;&lt;/H5&gt;&lt;P&gt;&lt;A href="https://community.fabric.microsoft.com/blog/community_blog/why-your-fabric-data-agent-gives-wrong-answers-and-how-data-enrichment-fixes-it/5361211" target="_blank"&gt;Why Your Fabric Data Agent Gives Wrong Answers (And How Data Enrichment Fixes It)&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 08 Sep 2026 13:46:21 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Building-and-Enriching-a-Microsoft-Fabric-Data-Agent-on-a-Power/ba-p/5364459</guid>
      <dc:creator>Praful_Potphode</dc:creator>
      <dc:date>2026-09-08T13:46:21Z</dc:date>
    </item>
    <item>
      <title>Building a Better Microsoft Fabric Data Agent:
Instructions, Visual Policy, and Cost-Aware Design</title>
      <link>https://community.powerbi.com/t5/Power-BI-Community-Blog/Building-a-Better-Microsoft-Fabric-Data-Agent-Instructions/ba-p/5364431</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Connecting a semantic model to a Fabric Data Agent is the easy part. The real work starts when the agent needs to understand what your business actually means.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;A Fabric Data Agent can generate technically valid DAX and still return the wrong business answer. The missing piece is often not the model itself; it is the context we provide around it.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Consider this question:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Which region performed best last quarter?&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;It sounds straightforward, but the agent must make several decisions before it can answer.&lt;BR /&gt;&lt;BR /&gt;What does &lt;EM&gt;performed best&lt;/EM&gt; mean?&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Highest Sales?&lt;/LI&gt;&lt;LI&gt;Highest Profit?&lt;/LI&gt;&lt;LI&gt;Best Profit Margin?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Which date defines &lt;EM&gt;last quarter&lt;/EM&gt;?&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Order Date?&lt;/LI&gt;&lt;LI&gt;Ship Date?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Should the agent return only the leading region, compare every region, or create a chart? If a governed &lt;STRONG&gt;Profit Margin&lt;/STRONG&gt; measure already exists, should the agent use it or recreate the calculation from raw columns?&lt;BR /&gt;&lt;BR /&gt;These are not primarily DAX questions. They are context and governance questions.&lt;BR /&gt;&lt;BR /&gt;After working with Fabric Data Agents beyond the proof-of-concept stage, I stopped treating instructions as one large prompt. A reliable implementation has several layers:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Data enrichment&lt;/LI&gt;&lt;LI&gt;Semantic Model AI Instructions&lt;/LI&gt;&lt;LI&gt;Data Agent Instructions&lt;/LI&gt;&lt;LI&gt;Routing and ambiguity handling&lt;/LI&gt;&lt;LI&gt;Response and visual policy&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Each layer has a different responsibility. Getting these layers right improves answer quality and can also reduce unnecessary reasoning, retries, query execution, and overly verbose responses.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;img /&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H2&gt;1. There Is a Cost to Ambiguity&lt;/H2&gt;&lt;P&gt;Fabric Data Agent consumption is token-based. The user’s question is only one part of the context processed by the AI. Agent instructions, source instructions, example queries, conversation history, and supporting context can also contribute to the input.&lt;BR /&gt;&lt;BR /&gt;At the time of writing, the published consumption rates are:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;1,000 input tokens = 100 CU seconds&lt;/LI&gt;&lt;LI&gt;1,000 cached input tokens = 10 CU seconds&lt;/LI&gt;&lt;LI&gt;1,000 output tokens = 400 CU seconds&lt;/LI&gt;&lt;LI&gt;Data-source query execution is charged separately&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;This creates an important architectural consideration.&lt;/P&gt;&lt;H3&gt;A Poorly Prepared Data Agent&lt;/H3&gt;&lt;P&gt;Imagine that a user asks:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Which region performed best?&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;The agent assumes that performance means Sales, executes a query, and returns an answer. The user then replies, &lt;EM&gt;I meant profitability.&lt;/EM&gt;&lt;BR /&gt;&lt;BR /&gt;Now we have another interaction, another round of reasoning, another response, and potentially another underlying query.&lt;BR /&gt;&lt;BR /&gt;A better approach is to define the business interpretation once:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;When performance is used without a specific KPI, evaluate both Sales and Profit.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;The objective should not be to use the fewest tokens possible. It should be to use the minimum useful context required to produce the right answer with the least unnecessary reasoning.&lt;BR /&gt;&lt;BR /&gt;A small prompt that produces the wrong answer is not an optimization. Adding thousands of characters of unnecessary instructions to every interaction is not an optimization either.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Optimize for cost per successful answer, not tokens per prompt.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;2. Data Enrichment Comes First: Start with the Model&lt;/H2&gt;&lt;P&gt;Semantic-model enrichment was covered in our previous article, so I will not repeat the full process here. The main principle is that a focused AI Data Schema, clear descriptions, relevant synonyms, governed measures, and a clean model reduce ambiguity and help the AI focus on the objects that matter.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Important:&lt;/STRONG&gt; Instructions should add business context. They should not be used to repair a poorly designed semantic model.&lt;/P&gt;&lt;P&gt;Data Enrichment Guide - https://community.fabric.microsoft.com/blog/community_blog/why-your-fabric-data-agent-gives-wrong-answers-and-how-data-enrichment-fixes-it/5361211&lt;/P&gt;&lt;H2&gt;3. The Most Important Separation: Semantic Model Instructions vs. Data Agent Instructions&lt;/H2&gt;&lt;P&gt;Semantic Model AI Instructions and Data Agent Instructions are not the same, and they should not contain the same information.&lt;BR /&gt;&lt;BR /&gt;Data Agent-level instructions are not passed to the DAX-generation tool used for semantic-model query generation. This changes how the instruction architecture should be designed.&lt;BR /&gt;&lt;BR /&gt;Consider this rule:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;When a user asks for margin, always use the governed Profit Margin measure.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;If this rule exists only in the global Data Agent instructions, it is placed at a layer that the DAX-generation tool does not directly use. The rule belongs in the Semantic Model AI Instructions.&lt;BR /&gt;&lt;BR /&gt;The easiest way to remember the separation is:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Semantic Model AI Instructions explain how AI should understand and query the model.&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Data Agent Instructions explain how the agent should orchestrate and communicate.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Once this separation is clear, the overall framework becomes easier to maintain.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;4. Semantic Model AI Instructions: Give the Model a Clear Purpose&lt;/H2&gt;&lt;P&gt;Use Semantic Model AI Instructions for rules that affect how the model should be interpreted and queried. The business rules will change across Finance, Sales, HR, Supply Chain, Operations, and other domains, but the structure does not have to change.&lt;BR /&gt;&lt;BR /&gt;Instead of one long block of rules, use a repeatable framework:&lt;/P&gt;&lt;PRE&gt;SEMANTIC MODEL AI INSTRUCTIONS
1. Purpose and Scope
2. Measure Priority
3. Authoritative Objects
4. Business Definitions
5. Governed Measure Mapping
6. Business Rules
7. Time Rules
8. Source Priority
9. Default Behaviour
10. Ambiguity Rules
11. Domain Restrictions
12. Cross-Domain Rules&lt;/PRE&gt;&lt;P&gt;The principle is straightforward:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;If a rule changes the query, it probably belongs close to the semantic model.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://github.com/hardiksri/fabric-data-agent-instructions/blob/main/Semantic%20Model%20Instruction%20Framework" target="_blank"&gt;Reusable Semantic Model Instruction Framework&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H2&gt;5. Keep the Data Agent Focused on Orchestration&lt;/H2&gt;&lt;P&gt;Once semantic logic lives at the correct layer, the Data Agent instructions become much cleaner. A generic framework can look like this:&lt;/P&gt;&lt;PRE&gt;DATA AGENT INSTRUCTIONS
1. Purpose
2. Scope
3. Data Source Behaviour
4. Response Policy
5. Visual Policy
6. Insight Generation
7. Recommendation Policy
8. Comparison Rules
9. Large Result Handling
10. Conversation Style
11. Explainability
12. Formatting
13. Missing Data
14. Follow-up Questions
15. Guardrails&lt;/PRE&gt;&lt;P&gt;The production pattern should reinforce one key rule:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Retrieve governed results from the semantic model and never override the model’s business rules, measure selection, relationships, or calculations.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://github.com/hardiksri/fabric-data-agent-instructions/blob/main/Data%20Agent%20Instruction%20Framework" target="_blank"&gt;Reusable Data Agent Instruction Framework&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;H2&gt;6. Make the Response Policy Adaptive&lt;/H2&gt;&lt;P&gt;A fixed seven-section response can be useful for deep analysis, but it is unnecessary for a simple question such as:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;What were Total Sales in 2025?&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;An adaptive response policy is more effective:&lt;/P&gt;&lt;H3&gt;Simple KPI Question&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Answer directly.&lt;/LI&gt;&lt;LI&gt;State the important period and filter context.&lt;/LI&gt;&lt;LI&gt;Keep the response concise.&lt;/LI&gt;&lt;LI&gt;Do not force a chart.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Analytical Question&lt;/H3&gt;&lt;OL&gt;&lt;LI&gt;State the scope.&lt;/LI&gt;&lt;LI&gt;Provide a short summary.&lt;/LI&gt;&lt;LI&gt;Show the supporting result.&lt;/LI&gt;&lt;LI&gt;Create one useful visual.&lt;/LI&gt;&lt;LI&gt;Highlight the key takeaways.&lt;/LI&gt;&lt;/OL&gt;&lt;H3&gt;Deeper Analysis&lt;/H3&gt;&lt;P&gt;Add recommendations and follow-up questions only when they provide real value. A useful analytical flow is: Scope, Executive Summary, Supporting Details, Visual, Key Takeaways, Recommendations, and Follow-up Questions.&lt;/P&gt;&lt;H2&gt;7. Visual Policy Should Be Governed Too&lt;/H2&gt;&lt;P&gt;Fabric Data Agent can generate native visual responses, and Data Agent Instructions can influence when a visual should be used and which supported chart type should be preferred.&lt;BR /&gt;&lt;BR /&gt;At the time of writing, the supported visual types include:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Line chart&lt;/LI&gt;&lt;LI&gt;Multi-line chart&lt;/LI&gt;&lt;LI&gt;Column chart&lt;/LI&gt;&lt;LI&gt;Multi-column chart&lt;/LI&gt;&lt;LI&gt;Stacked column chart&lt;/LI&gt;&lt;LI&gt;Pie chart&lt;/LI&gt;&lt;LI&gt;Scatter plot&lt;/LI&gt;&lt;LI&gt;Area chart&lt;/LI&gt;&lt;LI&gt;Stacked area chart&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;A simple intent-based policy can map trends to line charts, category comparisons to column charts, composition to stacked columns, small part-to-whole comparisons to pie charts, and numeric relationships to scatter plots.&lt;BR /&gt;&lt;BR /&gt;The safeguards matter just as much:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Do not create a visual when it adds no value.&lt;/LI&gt;&lt;LI&gt;Create a visual when the user explicitly requests one and the request is supported.&lt;/LI&gt;&lt;LI&gt;Do not generate several charts when one is sufficient.&lt;/LI&gt;&lt;LI&gt;Keep the KPI, filters, comparison, and time context consistent.&lt;/LI&gt;&lt;LI&gt;Never change the business calculation simply to produce a visual.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;A chart should explain the result. The result should never be changed to fit the chart.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;8. Guardrails Matter More Than More Instructions&lt;/H2&gt;&lt;P&gt;A good instruction framework should make its non-negotiable behavior explicit.&lt;/P&gt;&lt;H3&gt;Always&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Respect semantic-model rules.&lt;/LI&gt;&lt;LI&gt;Respect the user’s filters.&lt;/LI&gt;&lt;LI&gt;Respect security.&lt;/LI&gt;&lt;LI&gt;Use governed results.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;Never&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Recreate governed KPIs.&lt;/LI&gt;&lt;LI&gt;Fabricate values.&lt;/LI&gt;&lt;LI&gt;Infer causes without evidence.&lt;/LI&gt;&lt;LI&gt;Override semantic-model logic.&lt;/LI&gt;&lt;LI&gt;Expose technical objects unnecessarily.&lt;/LI&gt;&lt;LI&gt;Change the user’s scope without permission.&lt;/LI&gt;&lt;/UL&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;9. What Changes When the Source Is SQL?&lt;/H2&gt;&lt;P&gt;Now imagine that the same Data Agent also has access to a Fabric Warehouse.&lt;BR /&gt;&lt;BR /&gt;A semantic model already provides relationships, governed measures, business-friendly metadata, DAX calculations, and a semantic layer. A raw SQL source is different. The Data Agent may need more direct guidance about:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;What each table represents.&lt;/LI&gt;&lt;LI&gt;How tables should be joined.&lt;/LI&gt;&lt;LI&gt;Which columns own particular business concepts.&lt;/LI&gt;&lt;LI&gt;Which date should be used.&lt;/LI&gt;&lt;LI&gt;Common stored values and their meaning.&lt;/LI&gt;&lt;LI&gt;The grain of each fact table.&lt;/LI&gt;&lt;LI&gt;Query patterns that are not obvious from object names.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;For SQL sources, use Data Source Instructions as a concise onboarding guide for someone seeing the database for the first time.&lt;/P&gt;&lt;H3&gt;SQL Data Source Instruction Pattern&lt;/H3&gt;&lt;PRE&gt;SOURCE PURPOSE
Use this source for Sales, Customer, Product,
and Inventory analysis.

TABLE GRAIN
FactSales contains one row per Order Line.
FactInventory contains Product inventory by location.

JOIN RULES
FactSales.CustomerKey → DimCustomer.CustomerKey
FactSales.ProductKey → DimProduct.ProductKey
FactSales.DateKey → DimDate.DateKey

BUSINESS RULES
Revenue = SUM(SalesAmount)
Order Count = COUNT(DISTINCT OrderID)
Do not use COUNT(*) for Order Count because
one Order can contain multiple Order Lines.

DATE RULES
Use OrderDate for normal Sales analysis.
Use ShipDate only for shipping or fulfillment questions.

QUERY RULES
Use explicit joins.
Avoid SELECT *.
Return only required fields.
Do not expose technical keys unless requested.&lt;/PRE&gt;&lt;P&gt;The goal is not to document the entire database. Include only the context that materially affects query generation.&lt;/P&gt;&lt;H3&gt;Example Queries Demonstrate the Pattern&lt;/H3&gt;&lt;P&gt;Consider the question:&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Who are the top 10 customers by revenue?&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE&gt;SELECT TOP 10
    c.CustomerName,
    SUM(s.SalesAmount) AS Revenue
FROM FactSales s
INNER JOIN DimCustomer c
    ON s.CustomerKey = c.CustomerKey
GROUP BY
    c.CustomerName
ORDER BY
    Revenue DESC;&lt;/PRE&gt;&lt;P&gt;This single example teaches the agent:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Which fact table contains Sales.&lt;/LI&gt;&lt;LI&gt;How Customer should be joined.&lt;/LI&gt;&lt;LI&gt;How Revenue is aggregated.&lt;/LI&gt;&lt;LI&gt;How customer-level grouping works.&lt;/LI&gt;&lt;LI&gt;How Top N ranking should behave.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Instructions explain the rule. Example queries demonstrate the pattern.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;A few carefully chosen examples are usually more valuable than dozens of near-identical queries.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;10. Limitations to Keep in Mind&lt;/H2&gt;&lt;P&gt;Data Source Instructions improve context, but they do not turn a SQL source into a governed semantic model.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Instructions do not repair poor data modeling.&lt;/LI&gt;&lt;LI&gt;Do not place every business KPI inside SQL instructions.&lt;/LI&gt;&lt;LI&gt;Stored values may need to be documented explicitly.&lt;/LI&gt;&lt;LI&gt;Example queries are patterns, not hard-coded answers.&lt;/LI&gt;&lt;LI&gt;Too many examples can create noise.&lt;/LI&gt;&lt;LI&gt;SQL Data Source Instructions are different from Semantic Model AI Instructions.&lt;/LI&gt;&lt;/OL&gt;&lt;img /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H2&gt;11. Final Thought&lt;/H2&gt;&lt;P&gt;Building a reliable Fabric Data Agent is not about writing the longest possible prompt. It is about putting the right context at the right layer.&lt;BR /&gt;&lt;BR /&gt;Use metadata to explain the data. Use Semantic Model AI Instructions to govern how the model is interpreted. Use Data Source Instructions and examples to guide SQL generation. Use Data Agent Instructions to govern orchestration, response behavior, visuals, and guardrails.&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;The goal is not more instructions. It is less ambiguity.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;That is what moves a Fabric Data Agent from a successful demo toward governed conversational analytics.&lt;/P&gt;&lt;H2&gt;References&lt;/H2&gt;&lt;P&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/data-agent-consumption" target="_blank"&gt;Microsoft Learn: Data Agent consumption&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/semantic-model-best-practices" target="_blank"&gt;Microsoft Learn: Semantic model best practices for Data Agent&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-configurations" target="_blank"&gt;Microsoft Learn: Configure your Data Agent&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-visuals" target="_blank"&gt;Microsoft Learn: Visual responses from a Fabric Data Agent&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-routing" target="_blank"&gt;Microsoft Learn: Improve Data Source routing&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/hardiksri/fabric-data-agent-instructions" target="_blank"&gt;GitRep - AI Instruction Framework&lt;/A&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;EM&gt;What have you found most difficult when moving a Fabric Data Agent from a proof of concept into a governed production experience? Share your experience in the comments.&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 08 Sep 2026 13:34:16 GMT</pubDate>
      <guid>https://community.powerbi.com/t5/Power-BI-Community-Blog/Building-a-Better-Microsoft-Fabric-Data-Agent-Instructions/ba-p/5364431</guid>
      <dc:creator>Praful_Potphode</dc:creator>
      <dc:date>2026-09-08T13:34:16Z</dc:date>
    </item>
  </channel>
</rss>

