<?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>Fabric platform Community Blog articles</title>
    <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/bg-p/fbc_comm_blog</link>
    <description>Fabric platform Community Blog articles</description>
    <pubDate>Sun, 15 Nov 2026 00:30:58 GMT</pubDate>
    <dc:creator>fbc_comm_blog</dc:creator>
    <dc:date>2026-11-15T00:30:58Z</dc:date>
    <item>
      <title>Building an app on governed data with Fabric Apps</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Building-an-app-on-governed-data-with-Fabric-Apps/ba-p/5409946</link>
      <description>&lt;P&gt;A hands-on proof of concept with Fabric Apps on governed Fabric data: dashboards, approvals and questions to data agents in one app. The design question is whose access each part uses: dashboards run as the user, writeback relies on rules in code, and agent calls run as the app owner.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Nov 2026 16:41:40 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Building-an-app-on-governed-data-with-Fabric-Apps/ba-p/5409946</guid>
      <dc:creator>Haniftadjik</dc:creator>
      <dc:date>2026-11-12T16:41:40Z</dc:date>
    </item>
    <item>
      <title>After the Zombie Outbreak: Making ArcGIS GeoAnalytics for Microsoft Fabric Easier to Try</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/After-the-Zombie-Outbreak-Making-ArcGIS-GeoAnalytics-for/ba-p/5393748</link>
      <description>&lt;P&gt;Sometimes the best technical scenarios start with a problem you hope never becomes real.&lt;/P&gt;
&lt;P&gt;In &lt;STRONG&gt;Patient Zero in Redlands: Tracking a Zombie Outbreak with ArcGIS for Microsoft Fabric&lt;/STRONG&gt;, Sean McGinnis from Esri uses a fictional zombie outbreak to demonstrate something very real: how location, movement, population, and time can become part of an analytical problem inside Microsoft Fabric.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;A href="https://www.esri.com/arcgis-blog/products/maps-for-fabric/analytics/arcgis-for-microsoft-fabric-zombie-outbreak" target="_blank"&gt;Read Sean's original ArcGIS blog: Patient Zero in Redlands&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;At the center of the scenario is &lt;STRONG&gt;ArcGIS GeoAnalytics for Microsoft Fabric&lt;/STRONG&gt;. Running within the Fabric Spark environment, GeoAnalytics brings spatial functions and analysis capabilities to data processing in Fabric, allowing location to become part of the analytical workflow instead of a separate step performed somewhere else.&lt;/P&gt;
&lt;P&gt;Sean's scenario makes that tangible. H3 cells, population enrichment, neighborhood relationships, and time-stepped results turn a fictional outbreak into a spatial analytics problem that can be explored, computed, and ultimately communicated through maps and other experiences.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The zombies are fictional. The spatial pattern isn't.&lt;/P&gt;
&lt;P&gt;The same approach can be applied to questions involving public safety, disease surveillance, infrastructure disruption, supply chains, customer activity, environmental events, and many other problems where &lt;STRONG&gt;where something happens is just as important as what happened&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Sean highlights several practical use cases that show how the fictional scenario translates to real-world challenges:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;Use case&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;Patient zero becomes&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;Spread becomes&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;Vulnerability becomes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Retail product launch&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Flagship store opening&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Word of mouth and awareness moving between neighborhoods&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Income, age, and household size of likely buyers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Utility outage planning&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Failed substation&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Load shifting to neighboring circuits&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Medical-device customers, older residents, no vehicle&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Public health&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;First confirmed case&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Contact and commuting between areas&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;The full CDC SVI, which was built for this&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Insurance and catastrophe risk&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Wildfire ignition or flood breach&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Fire front or water spreading downhill&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Housing type, mobile homes, insurance coverage&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Emergency management&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Chemical spill or plume source&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Wind-driven dispersion&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;People who can’t evacuate on their own&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;Supply chain disruption&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Closed port or warehouse&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Delays rippling to stores served by it&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;Store dependence on that node&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;From scenario to implementation&lt;/H2&gt;
&lt;P&gt;After working through Sean's scenario, I became interested in a slightly different question:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How easy can we make it for someone else to get to the point where they can start experimenting with ArcGIS GeoAnalytics for Microsoft Fabric?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Not simply reading about the capability. Not starting with a finished architecture diagram. Actually getting an environment ready, running a spatial workload, and seeing whether the pieces work together.&lt;/P&gt;
&lt;img&gt;
&lt;P&gt;https://www.esri.com/arcgis-blog/app/uploads/2026/10/ZombieArchitecture.png&lt;/P&gt;
&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-align-center"&gt;That became the goal of my &lt;STRONG&gt;Fabric GeoAnalytics deployment experience&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/Tonyfra91/fabric-geoanalytics-deploy" target="_blank"&gt;Explore the Fabric GeoAnalytics deployment repository&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The repository takes the spatial pattern demonstrated in the zombie scenario and focuses on the deployment and validation experience around it. The goal is to reduce some of the setup friction between &lt;STRONG&gt;"I'd like to experiment with GeoAnalytics"&lt;/STRONG&gt; and &lt;STRONG&gt;"I have a Fabric environment where I can begin testing spatial workloads."&lt;/STRONG&gt;&lt;/P&gt;
&lt;H1&gt;Post Zombie: A Fast Pass to GeoAnalytics&lt;/H1&gt;
&lt;P&gt;Once the outbreak is under control, it's time to rebuild.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The deployment experience starts with an Azure foundation and guides you through the Fabric-specific setup needed to experiment with GeoAnalytics: a Microsoft Fabric workspace, Lakehouse, GeoAnalytics-compatible environment, parameterized notebook, and the configuration needed to validate a spatial workload.&lt;/P&gt;
&lt;P class="lia-align-center"&gt;&lt;STRONG&gt;Prepare → Deploy Azure → Finish Fabric → Configure → Prove → Extend&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;For those who want the shortest route through the experiment, the repository includes a &lt;STRONG&gt;Copilot Fast Pass,&lt;/STRONG&gt; a guided path through prerequisites, Azure deployment, Fabric setup, configuration, and workload validation.&lt;/P&gt;
&lt;P&gt;The important word is prove. Rather than assuming a successful deployment means GeoAnalytics is working, the repository runs a small synthetic spatial workload, writes the results to Delta tables, reads them back, and verifies that the expected data reached OneLake.&lt;/P&gt;
&lt;P&gt;The repository also maintains a clear boundary with Sean's original work. His notebook is retrieved separately and attributed upstream, while this deployment experience focuses on making the environment setup and validation more repeatable.&lt;/P&gt;
&lt;H2&gt;Calling a few brave souls&lt;/H2&gt;
&lt;P&gt;This is where I could use some help.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;This repository is a preview and engineering experiment, not a production-certified accelerator. I've built automated checks around deployment, configuration, notebook adaptation, outputs, and the Azure-to-Fabric handoff, but proving the pattern means running it across different tenants, capacities, configurations, and users.&lt;/P&gt;
&lt;P&gt;So I'm looking for a few brave souls willing to take the Fast Pass, deploy it, test it, break it, and tell me what happened.&lt;/P&gt;
&lt;P&gt;Expect rough edges. There may be bugs, Azure and Fabric resources can incur charges, and different permissions, capacities, tenant configurations, or Esri settings may uncover assumptions that need to be corrected. That's part of the experiment.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Start here:&lt;/STRONG&gt;&lt;BR /&gt;&lt;A href="https://github.com/Tonyfra91/fabric-geoanalytics-deploy" target="_blank"&gt;Fabric GeoAnalytics deployment experience&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The repository includes prerequisites, the guided deployment path, validation steps, architecture notes, and an acceptance checklist.&lt;/P&gt;
&lt;P&gt;If you try it, issues and feedback are welcome.&lt;/P&gt;
&lt;H2&gt;Where this goes next&lt;/H2&gt;
&lt;P&gt;What I like most about Sean's zombie scenario is that the story doesn't really end with zombies. It demonstrates a broader pattern: enterprise and geospatial data can be analyzed together, spatial relationships can become part of large-scale analytics, and the resulting insight can move into maps and experiences that people can actually use.&lt;/P&gt;
&lt;P&gt;The next step is making those capabilities easier for architects, developers, data engineers, and GIS professionals to explore themselves.&lt;/P&gt;
&lt;P&gt;That's what this deployment experiment is about.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sean showed us how to survive the outbreak. Now let's see how repeatable we can make the rebuild.&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Nov 2026 14:45:08 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/After-the-Zombie-Outbreak-Making-ArcGIS-GeoAnalytics-for/ba-p/5393748</guid>
      <dc:creator>Tonyfra91</dc:creator>
      <dc:date>2026-11-05T14:45:08Z</dc:date>
    </item>
    <item>
      <title>Implement Fabric capacity Pause and Resume operation using Azure Automation Runbook - Part 2</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Implement-Fabric-capacity-Pause-and-Resume-operation-using-Azure/ba-p/5377972</link>
      <description>&lt;P&gt;In the previous post (found &lt;A class="lia-internal-link lia-internal-url lia-internal-url-content-type-blog" href="https://community.fabric.microsoft.com/blog/fbc_comm_blog/implement-fabric-capacity-pause-and-resume-operation-using-azure-automation-runb/5377035" target="_blank" rel="noopener" data-lia-auto-title="here" data-lia-auto-title-active="0"&gt;here&lt;/A&gt;), I described first 4 steps in the process to implement an Azure automation job to schedule Pause and Refresh functions for Azure capacities. Pausing a Fabric capacity takes the capacity offline which means you do not may for the compute costs. You would still incur costs for storage in OneLake during this time, but given compute costs are typically higher, this process allows you to cost optimize Fabric operational costs for non-production instances.&lt;/P&gt;&lt;P&gt;Following the first part of the process described in Part 1 of this blog series, in this post I will describe the remaining steps.&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 5 - Add Azure Automation managed identity to new custom RBAC role&lt;/STRONG&gt;&lt;/H1&gt;&lt;P&gt;Run the following in Cloud Shell after replacing the placeholders with values from Step 1. The assignment scope is the Fabric capacity resource ID, not the entire resource group or subscription.&amp;nbsp;&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Powershell&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;PRE&gt;$subscriptionId&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "&amp;lt;SUBSCRIPTION_ID&amp;gt;"&lt;BR /&gt;$fabricResourceGroup&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "&amp;lt;FABRIC_RESOURCE_GROUP&amp;gt;"&lt;BR /&gt;$capacityName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "&amp;lt;FABRIC_CAPACITY_NAME&amp;gt;"&lt;BR /&gt;$automationResourceGroup = "&amp;lt;AUTOMATION_RESOURCE_GROUP&amp;gt;"&lt;BR /&gt;$automationAccountName&amp;nbsp;&amp;nbsp; = "&amp;lt;AUTOMATION_ACCOUNT_NAME&amp;gt;"&lt;BR /&gt;$roleName&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;= "Fabric Capacity Pause Resume Operator"&lt;BR /&gt;&lt;BR /&gt;Set-AzContext -SubscriptionId $subscriptionId&lt;BR /&gt;&lt;BR /&gt;$principalId = (Get-AzAutomationAccount `&lt;BR /&gt;&amp;nbsp; -ResourceGroupName $automationResourceGroup `&lt;BR /&gt;&amp;nbsp; -Name $automationAccountName).Identity.PrincipalId&lt;BR /&gt;&lt;BR /&gt;$capacityScope = "/subscriptions/$subscriptionId/resourceGroups/" +&lt;BR /&gt;&amp;nbsp; "$fabricResourceGroup/providers/Microsoft.Fabric/capacities/$capacityName"&lt;BR /&gt;&lt;BR /&gt;$role = Get-AzRoleDefinition -Name $roleName&lt;BR /&gt;New-AzRoleAssignment ObjectId $principalId -RoleDefinitionId $role.Id -Scope $capacityScope&lt;/PRE&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 50.00%" /&gt;&lt;col style="width: 50.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 6 - Create a parameterized Pause/Resume runbook&lt;/STRONG&gt;&lt;/H1&gt;&lt;OL&gt;&lt;LI&gt;In the Automation account, select Runbooks &amp;gt; Create a runbook.&lt;/LI&gt;&lt;LI&gt;Name it &lt;EM&gt;Manage_Fabric_Capacity_State&lt;/EM&gt;, choose PowerShell, and select the PowerShell 7.4 runtime environment created earlier.&lt;/LI&gt;&lt;LI&gt;Paste the script below in the Cmdlet window. During creation in my environment, I only parameterized the Resume/Start value. I hardcoded other values, but you can parameterize other values too if desirable.&lt;/LI&gt;&lt;/OL&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 11.8937%" /&gt;&lt;col style="width: 88.19%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Powershell&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;PRE&gt;param(&lt;BR /&gt;&amp;nbsp; [Parameter(Mandatory = $true)]&lt;BR /&gt;&amp;nbsp; [ValidateSet("Pause", "Resume")]&lt;BR /&gt;&amp;nbsp; [string] $Action,&lt;BR /&gt;&amp;nbsp; [Parameter(Mandatory = $true)]&lt;BR /&gt;&amp;nbsp; [string] $SubscriptionId,&lt;BR /&gt;&amp;nbsp; [Parameter(Mandatory = $true)]&lt;BR /&gt;&amp;nbsp; [string] $ResourceGroupName,&lt;BR /&gt;&amp;nbsp; [Parameter(Mandatory = $true)]&lt;BR /&gt;&amp;nbsp; [string] $CapacityName&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;$ErrorActionPreference = "Stop"&lt;BR /&gt;$null = Disable-AzContextAutosave -Scope Process&lt;BR /&gt;try {&lt;BR /&gt;&amp;nbsp; $connection = (Connect-AzAccount -Identity).Context&lt;BR /&gt;&amp;nbsp; $null = Set-AzContext -SubscriptionId $SubscriptionId -DefaultProfile $connection&lt;BR /&gt;&amp;nbsp; Write-Output "Action: $Action"&lt;BR /&gt;&amp;nbsp; Write-Output "Capacity: $CapacityName"&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; if ($Action -eq "Pause") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = Suspend-AzFabricCapacity -SubscriptionId $SubscriptionId `&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -ResourceGroupName $ResourceGroupName -CapacityName $CapacityName `&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -PassThru -Confirm:$false&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = Resume-AzFabricCapacity -SubscriptionId $SubscriptionId `&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -ResourceGroupName $ResourceGroupName -CapacityName $CapacityName `&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -PassThru -Confirm:$false&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; Write-Output "Completed: $result"&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;catch {&lt;BR /&gt;&amp;nbsp; Write-Error "Fabric capacity $Action failed: $($_.Exception.Message)"&lt;BR /&gt;&amp;nbsp; throw&lt;BR /&gt;}&lt;/PRE&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;P&gt;&lt;EM&gt;Disable-AzContextAutosave &lt;/EM&gt;prevents the job from inheriting a saved Azure context. Connect-AzAccount -Identity authenticates with the Automation account identity. The Az.Fabric cmdlets then submit the documented suspend or resume operation by subscription, resource group, and capacity name.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 7 - Test, verify and publish the Runbook&lt;/STRONG&gt;&lt;/H1&gt;&lt;OL&gt;&lt;LI&gt;Open Test pane from the Runbook editor.&lt;/LI&gt;&lt;LI&gt;First test Resume against a capacity that is intentionally paused, or Pause against a confirmed non-production or unused capacity. Enter all four parameters exactly.&lt;/LI&gt;&lt;LI&gt;Start the test and review the job streams. A successful run should show the requested action, capacity name, and a completed result.&lt;/LI&gt;&lt;LI&gt;Confirm the capacity state in Azure portal. For a pause test, also confirm that the expected Fabric content is unavailable; for resume, confirm that assigned content becomes available again.&lt;/LI&gt;&lt;LI&gt;Return to the editor and select Publish. Once published, the new runbook can be scheduled to activate automatically.&lt;/LI&gt;&lt;/OL&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 8 - Create Resume and Pause schedules&lt;/STRONG&gt;&lt;/H1&gt;&lt;P&gt;Using Azure Automation schedules, a runbook can be initiated automatically. A runbook can have multiple schedules, and each link can supply different parameter values. Schedules support one-time or recurring patterns and daylight-saving-time-aware time zones.&lt;/P&gt;&lt;H2&gt;&lt;STRONG&gt;Resume schedule&lt;/STRONG&gt;&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;If the Runbook from previous task is not published, follow Step 5 in previous task to publish it before proceeding to the next step.&lt;/LI&gt;&lt;LI&gt;Open Runbook Manage_Fabric_Capacity_State &amp;gt; Schedules &amp;gt; Add a schedule.&lt;/LI&gt;&lt;LI&gt;Create or link a recurring schedule, for example Fabric-Resume-Weekdays-0700. Choose the intended time zone and weekdays.&lt;/LI&gt;&lt;LI&gt;Configure run settings with Action = Resume plus the subscription ID, Fabric resource group, and capacity name.&lt;/LI&gt;&lt;/OL&gt;&lt;H2&gt;&lt;STRONG&gt;Pause schedule&lt;/STRONG&gt;&lt;/H2&gt;&lt;OL&gt;&lt;LI&gt;Add a second recurring schedule, for example Fabric-Pause-Weekdays-1900.&lt;/LI&gt;&lt;LI&gt;Use the same resource parameters, but set Action = Pause.&lt;/LI&gt;&lt;LI&gt;Verify both schedule links are enabled and show the correct next run time.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 9 - Validate operations and troubleshoot&lt;/STRONG&gt;&lt;/H1&gt;&lt;P&gt;After the first scheduled execution, open Jobs for the runbook and inspect the job status and output. Then verify the capacity state in Azure portal. Azure Automation runs the latest published runbook version with the parameter values stored on the schedule link.&lt;/P&gt;&lt;P&gt;Following table lists some of the common failure and underlying reason why you may be seeing that class of failures. This is not a full list, rather a high-level guide on how to proceed with troubleshooting in case there are errors.&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 35.227%" /&gt;&lt;col style="width: 64.8566%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Symptom&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Check&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AuthorizationFailed&lt;/td&gt;&lt;td&gt;Confirm the role assignment uses the Automation account principal ID, the custom role contains all four actions, and the assignment scope exactly matches the capacity resource ID.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cmdlet not recognized&lt;/td&gt;&lt;td&gt;Confirm the runbook uses the intended PowerShell 7.4 runtime and that Az.Fabric is present in that runtime environment.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wrong subscription or capacity&lt;/td&gt;&lt;td&gt;Check the schedule parameters and the explicit Set-AzContext subscription ID.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Test works, schedule fails&lt;/td&gt;&lt;td&gt;Confirm the runbook is published and every mandatory parameter is saved on each schedule link.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Job succeeds, state is unexpected&lt;/td&gt;&lt;td&gt;Review job output, then inspect the target capacity resource in Azure portal to confirm the resource name and current state&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;H1&gt;Conclusion&lt;/H1&gt;&lt;P&gt;Implementing Pause/Resume automation for non-production Fabric capacities can provide an easy cost optimization with little complexity. This pattern separates authentication, authorization, execution, and scheduling. The managed identity removes stored credentials; the custom role limits the identity to the four Fabric capacity actions documented by Microsoft; the resource-level assignment limits reach to the intended capacity; and two schedule links reuse one tested runbook. The result is a repeatable pause/resume implementation that is easier to audit than a broad built-in role or embedded service-principal secret.&lt;/P&gt;&lt;H1&gt;References&lt;/H1&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.8765%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/enterprise/pause-resume" target="_blank" rel="noopener"&gt;Pause and Resume Fabric capacity&lt;/A&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation" target="_blank" rel="noopener"&gt;Using System Managed Identity for an Azure Automation account&lt;/A&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles" target="_blank" rel="noopener"&gt;Azure Custom RBAC Roles&lt;/A&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/role-based-access-control/tutorial-custom-role-powershell" target="_blank" rel="noopener"&gt;Tutorial: Create an Azure custom RBAC role using Powershell&lt;/A&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/azure/automation/shared-resources/schedules" target="_blank" rel="noopener"&gt;Manage schedule in Azure Automation&lt;/A&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Part 1 of the blog can be found here: &lt;STRONG&gt;&lt;A href="https://community.fabric.microsoft.com/blog/fbc_comm_blog/implement-fabric-capacity-pause-and-resume-operation-using-azure-automation-runb/5377035" target="_blank" rel="noopener"&gt;Implement Fabric capacity Pause and Resume operation using Azure Automation Runbook&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Keywords: Cost Optimization, Capacity, Pause, Resume&lt;/P&gt;</description>
      <pubDate>Mon, 02 Nov 2026 16:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Implement-Fabric-capacity-Pause-and-Resume-operation-using-Azure/ba-p/5377972</guid>
      <dc:creator>pankaja_ms</dc:creator>
      <dc:date>2026-11-02T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Implement Fabric capacity Pause and Resume operation using Azure Automation Runbook - Part 1</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Implement-Fabric-capacity-Pause-and-Resume-operation-using-Azure/ba-p/5377035</link>
      <description>&lt;H1&gt;Introduction&lt;/H1&gt;&lt;P&gt;Microsoft Fabric allows pausing an F SKU capacity when it is not needed and resume it when work should continue. While pausing Fabric capacities will reduce operational cost, it will make Fabric content within these capacities unavailable. When a paused Fabric capacity is resumed, billing resumes and assigned content becomes available again. Pausing Fabric capacity can provide significant operational discounting as the capacity compute charges stop once the capacity is Paused. Hence this approach could be a significant price optimization technique if the capacity does not have to be online 24 hours a day.&lt;/P&gt;&lt;P&gt;This blog will help you implement automated control plane operation with Azure Automation. A system-assigned managed identity authenticates the runbook, a custom Azure role grants only the Fabric capacity suspend and resume operations, and two schedules pass either Pause or Resume to the same runbook.&lt;/P&gt;&lt;P&gt;What will you need to build and enable as part of this process?&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Create a custom RBAC role that permits PAUSE and RESUME operations on Fabric capacities within a subscription&lt;/LI&gt;&lt;LI&gt;Configure an Azure Automation runbook to undertake PAUSE and RESUME operations through a scheduled operation&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Following pre-requisites are needed prior to commencing the process described in this Blog.&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;An existing Microsoft Fabric F SKU capacity. Pause and resume apply to the Azure Fabric capacity resource (not tenant).&lt;/LI&gt;&lt;LI&gt;Permission to create a custom role and role assignment. Microsoft documents User Access Administrator or equivalent role-definition and role-assignment permissions for these tasks.&lt;/LI&gt;&lt;LI&gt;An Azure Automation account, or permission to create one. This guide uses its system-assigned managed identity. &lt;A href="https://learn.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation" target="_blank" rel="noopener"&gt;&lt;SUP&gt;[2]&lt;/SUP&gt;&lt;/A&gt; &lt;A href="https://learn.microsoft.com/en-us/azure/automation/quickstarts/create-azure-automation-account-portal" target="_blank" rel="noopener"&gt;&lt;SUP&gt;[11]&lt;/SUP&gt;&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;PowerShell in Azure Cloud Shell for the one-time RBAC setup&lt;/LI&gt;&lt;/UL&gt;&lt;H1&gt;Step 1 - Record deployment values&lt;/H1&gt;&lt;P&gt;Before commencing the process, its important to document the necessary values as they will be needed multiple times during the process.&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 21.4995%" /&gt;&lt;col style="width: 41.5193%" /&gt;&lt;col style="width: 36.9414%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Value&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Where to find it&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subscription ID&lt;/td&gt;&lt;td&gt;&lt;P&gt;00000000-0000-0000-0000-000000000000&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Subscriptions &amp;gt; target subscription&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fabric Resource Group&lt;/td&gt;&lt;td&gt;rg-fabric-prod&lt;/td&gt;&lt;td&gt;Fabric Capacity &amp;gt; Overview&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fabric Capacity Name&lt;/td&gt;&lt;td&gt;fab-prod-uswest2&lt;/td&gt;&lt;td&gt;Microsoft Fabric -&amp;gt; Capacity Resource&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Azure Automation Resource Group&lt;/td&gt;&lt;td&gt;rg-automation-prod&amp;nbsp;&lt;/td&gt;&lt;td&gt;Azure Automation Account &amp;gt; Resource Group Name&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Automation Account Name&lt;/td&gt;&lt;td&gt;aa-fabric-operations&lt;/td&gt;&lt;td&gt;Automation Account -&amp;gt; Account Name&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time zone&lt;/td&gt;&lt;td&gt;Australia/Melbourne&lt;/td&gt;&lt;td&gt;&lt;P&gt;Azure Portal&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;H1&gt;&lt;STRONG&gt;Step 2 - Create Azure automation account and enable account identity&lt;/STRONG&gt;&lt;/H1&gt;&lt;P&gt;If an Azure Automation account does not already exist, create one from Automation Accounts &amp;gt; Create and complete the subscription, resource group, name, region, and review steps documented in the Azure Automation quickstart.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;P&gt;Open the Automation account in the Azure portal.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Under Account Settings, select Identity.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;On the System assigned tab, set Status to On, select Save, and confirm the change.&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;P&gt;Copy the displayed Object (principal) ID for validation. The PowerShell assignment step below also retrieves it directly.&lt;/P&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;The system-assigned identity is registered in Microsoft Entra ID and is represented by an object ID. The runbook later uses Connect-AzAccount -Identity, so no stored username, password, certificate, or Automation Run As account is required.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 3 - Prepare Azure Automation Powershell runtime&lt;/STRONG&gt;&lt;/H1&gt;&lt;OL&gt;&lt;LI&gt;From the Automation account Overview, switch to the Runtime Environment experience if it is not already enabled.&lt;/LI&gt;&lt;LI&gt;Under Process Automation, select Runtime Environments &amp;gt; Create.&lt;/LI&gt;&lt;LI&gt;Choose PowerShell and runtime version 7.4. Give the environment a descriptive name such as ps74-fabric-operations.&lt;/LI&gt;&lt;LI&gt;On Packages, retain the default Az PowerShell package and add Az.Fabric from the gallery. Verify that Az.Accounts is available because the script uses Connect-AzAccount, Disable-AzContextAutosave, and Set-AzContext.&lt;/LI&gt;&lt;LI&gt;Create the runtime environment and wait until its packages are available.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Microsoft documents that PowerShell runtime environments include the Az package by default and can accept additional packages from the gallery. In the older Automation experience, modules are managed under Shared Resources &amp;gt; Modules instead.&lt;/P&gt;&lt;img /&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;STRONG&gt;Step 4 - Create a new custom RBAC role&lt;/STRONG&gt;&lt;/H1&gt;&lt;P&gt;Following four Azure RBAC actions are required for Fabric capacity pause and resume operations. Existing built-in privileged (pre-defined) roles do not contain these permissions, hence a custom role is needed.&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 50%" /&gt;&lt;col style="width: 50%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;RBAC Action&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft.Fabric/capacities/read&lt;/td&gt;&lt;td&gt;Read the target Fabric capacity&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft.Fabric/capacities/write&lt;/td&gt;&lt;td&gt;Write to the target Fabric capacity&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft.Fabric/capacities/suspend/action&lt;/td&gt;&lt;td&gt;Initiate a pause/suspend action for Fabric capacity&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft.Fabric/capacities/resume/action&lt;/td&gt;&lt;td&gt;Initiate a resume action for Fabric capacity&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;P&gt;There are 2 ways to create the custom role -&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Using a definition file (in JSON format)&lt;/LI&gt;&lt;LI&gt;Defining the permissions inline as part of a command issued within a Powershell session.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;As part of this blog, I'll show you both ways to create the role. Following examples shows you a functional JSON file that could be leveraged to create the custom role through command line or Azure portal. In the text below, replace SUBSCRIPTION_ID placeholder with actual subscription ID. The role definition is available at the subscription level, while the role assignment in the next step is narrowed to one capacity resource. If its desirable to create this role at resource group level, that can be done by updating the assignableScopes node to the resource group.&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 7.16659%" /&gt;&lt;col style="width: 92.7935%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;JSON&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;PRE&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;   "properties": {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"roleName": "Fabric capacity Pause Operator",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"description": "",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"assignableScopes": [&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/subscriptions/&amp;lt;SUBSCRIPTION_ID&amp;gt;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"permissions": [&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "actions": [&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/read",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/write",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/suspend/action",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/resume/action"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"notActions": [],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"dataActions": [],&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"notDataActions": []&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}]&amp;nbsp;&amp;nbsp; &lt;BR /&gt;   }&lt;BR /&gt;}&lt;/PRE&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;P&gt;Now we will use the second method to configure new RBAC custom role. In Azure Cloud Shell (PowerShell), create and inspect the role.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Open a new Cloud Shell Powershell session&lt;/LI&gt;&lt;LI&gt;Replace the SUBSCRIPTION_ID below with the SubscriptionID in the following commandlet. Copy and paste each command into the Cloud shell session one at a time and execute.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Azure custom roles use Actions for control-plane permissions and AssignableScopes to specify where the role definition is available. Microsoft recommends listing actions explicitly rather than using wildcards&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100.041%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 11.4929%" /&gt;&lt;col style="width: 88.4672%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Powershell&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;PRE&gt;Set-AzContext -SubscriptionId "&amp;lt;SUBSCRIPTION_ID&amp;gt;"&lt;BR /&gt;&lt;BR /&gt;$role = New-Object -TypeName Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition&lt;BR /&gt;$role.Name = 'Fabric Capacity Pause Resume Operator'&lt;BR /&gt;$role.Description = 'Pause and Resume Fabric Capacities”&lt;BR /&gt;$role.IsCustom = $true&lt;BR /&gt;$role.AssignableScopes = @("/subscriptions/&amp;lt;SUBSCRIPTION_ID&amp;gt;")&lt;BR /&gt;$permission = New-Object -TypeName Microsoft.Azure.Commands.Resources.Models.Authorization.PSPermission&lt;BR /&gt;$permission.Actions = @(&lt;BR /&gt; &amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/read"&lt;BR /&gt; &amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/write"&lt;BR /&gt; &amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/suspend/action"&lt;BR /&gt; &amp;nbsp;&amp;nbsp; "Microsoft.Fabric/capacities/resume/action"&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;$role.Permissions = @($permission)&lt;BR /&gt;&lt;BR /&gt;New-AzRoleDefinition -Role $role&lt;/PRE&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;&lt;img&gt;Cloud Shell execution of the script&lt;/img&gt;&lt;P&gt;This blog series continues in the next post. Part 2 can be found here: &lt;STRONG&gt;&lt;A href="https://community.fabric.microsoft.com/blog/fbc_comm_blog/implement-fabric-capacity-pause-and-resume-operation-using-azure-automation-runb/5377972?previewMessage=true" target="_blank"&gt;Implement Fabric capacity Pause and Resume operation using Azure Automation Runbook - Part 2&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 29 Oct 2026 14:42:32 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Implement-Fabric-capacity-Pause-and-Resume-operation-using-Azure/ba-p/5377035</guid>
      <dc:creator>pankaja_ms</dc:creator>
      <dc:date>2026-10-29T14:42:32Z</dc:date>
    </item>
    <item>
      <title>Copilot Studio, Foundry, Fabric Data Agent or Operations Agent? Which one to pick</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Copilot-Studio-Foundry-Fabric-Data-Agent-or-Operations-Agent/ba-p/5377319</link>
      <description>&lt;P data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 1 []"&gt;Most confusion comes from the word "agent" being used for all four. The fastest way to choose is to ask two questions: &lt;STRONG&gt;who builds it&lt;/STRONG&gt; (maker or developer) and &lt;STRONG&gt;what triggers it&lt;/STRONG&gt; (a person asking, or data changing).&lt;/P&gt;
&lt;H4 data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 1 []"&gt;Meet the four&lt;/H4&gt;
&lt;img /&gt;
&lt;P data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 1 []"&gt;&lt;STRONG&gt;Copilot Studio&lt;/STRONG&gt; is Microsoft's low-code agent builder on Power Platform. You describe the agent in plain language, add knowledge (SharePoint, Dataverse, websites), plug in 1,000+ connectors and Power Automate flows, then publish to Teams, Microsoft 365 Copilot or a website. It is also the easiest place to &lt;EM&gt;orchestrate&lt;/EM&gt; other agents, including Foundry and Fabric agents.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft Foundry&lt;/STRONG&gt; (formerly Azure AI Foundry) is the pro-code platform for engineers. You pick from a large model catalog, write orchestration in code, run evaluations, trace every call and deploy behind private networking. Use it when the agent is a product component, not just a chat window.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fabric data agent&lt;/STRONG&gt; is a read-only, conversational analyst over your Fabric data. It turns a question into SQL, DAX or KQL against up to five sources (lakehouse, warehouse, Power BI semantic model, KQL database, ontology) and respects each user's permissions. It is generally available.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Fabric operations agent&lt;/STRONG&gt; lives in Real-Time Intelligence. You give it an Eventhouse, a business goal and allowed actions. It writes its own monitoring rules, wakes up when a condition hits, reasons over the data, and messages people in Teams or runs a Power Automate action. It reached general availability in mid-2026.&lt;/P&gt;
&lt;H4&gt;Which one should I pick?&lt;/H4&gt;
&lt;img /&gt;
&lt;P data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 1 []"&gt;Ask the questions in order and stop at the first "yes". A "yes" does not rule the others out: a data agent or Foundry agent is often published &lt;EM&gt;through&lt;/EM&gt; Copilot Studio.&lt;/P&gt;
&lt;H4 data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 4 []"&gt;Side by side&lt;/H4&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;&amp;nbsp;&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Copilot Studio&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Foundry&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Fabric data agent&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Fabric operations agent&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Core job&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Converse and automate&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Build custom AI apps and agents&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Answer questions over data&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Monitor live data and act&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Triggered by&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;A person (or event/flow)&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Your code&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;A person or another agent&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;A data condition&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Builder&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Maker, IT, business&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;AI engineer, developer&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Data/BI team&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Ops and RTI team&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Skill level&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Low-code&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Pro-code&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Low-code + good data modelling&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Low-code, chat-based setup&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Data it reaches&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Connectors, SharePoint, Dataverse, other agents&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Anything you wire up&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Lakehouse, warehouse, semantic model, KQL, ontology&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Eventhouse (KQL) streams&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Writes or acts?&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes, via flows and tools&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes, whatever you code&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;No, read-only&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes, Teams messages and Power Automate actions&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Where users meet it&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Teams, M365 Copilot, web, other channels&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Your app, API, Teams&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Fabric, Copilot Studio, Foundry, M365 Copilot, MCP&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Teams chat or channel&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Billing&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Copilot Credits&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Azure consumption&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Fabric capacity (CU)&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Fabric capacity (CU)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Pick it when&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;You need speed and M365 reach&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;You need model choice, evals, isolation&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;People&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;col style="width: 20.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H4 data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 1 []"&gt;Real-world scenarios&lt;/H4&gt;
&lt;P&gt;These are the patterns that come up most often in the community. Each names the tool that fits and why.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; HR policy helper in Teams → Copilot Studio.&lt;/STRONG&gt; A 3,000-person company wants staff to ask "How many leave days do I have?" and "Book Thursday off." Knowledge sits in SharePoint, leave balances in an HR system with a connector. A maker builds it in days and publishes to Teams. No developer needed.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; Insurance claims triage inside a customer app → Foundry.&lt;/STRONG&gt; An insurer reads uploaded photos and PDFs, extracts fields, scores fraud risk and returns a decision to its claims system through an API. It needs a vision model, evaluation datasets, tracing and a private network. That is a product feature, so it belongs in Foundry.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; Sales leaders asking about pipeline → Fabric data agent.&lt;/STRONG&gt; "Which regions missed Q3 target, and by how much?" The data agent sits on the sales semantic model, writes the DAX, and only shows rows each person may see. Publish it into Microsoft 365 Copilot or Copilot Studio so leaders never open Fabric.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; Cold-chain monitoring for a food distributor → Fabric operations agent.&lt;/STRONG&gt; Truck temperature sensors stream into an Eventhouse. The goal: "Keep chilled loads between 2 and 5 °C." When a truck drifts, the agent posts in the fleet Teams channel with the truck, route and trend, and can trigger a Power Automate flow to reroute or open a ticket.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; Retail "what should I do?" assistant → all four together.&lt;/STRONG&gt; Microsoft's Zava reference demo shows this: an operations agent spots a stock risk, a Fabric data agent pulls the numbers, Foundry agents for sales and product reason over them, and Copilot Studio is the front door in Teams where the manager approves a reallocation.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;Better together&lt;/H4&gt;
&lt;P&gt;The strongest designs use more than one. Copilot Studio meets people where they work, Foundry adds custom reasoning, and the two Fabric agents keep answers and actions grounded in governed data.&lt;/P&gt;
&lt;img /&gt;
&lt;P data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 3 []"&gt;The operations agent is the only one that starts on its own: it reads live events and reaches people in Teams without anyone asking first.&lt;/P&gt;
&lt;H4&gt;Status as of October 2026, and gotchas&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Fabric data agent is GA&lt;/STRONG&gt;, and its Copilot Studio integration went GA at FabCon Barcelona (October 2026). Data agents in Microsoft Copilot Chat were only a sneak peek there.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The data agent inside Copilot in Power BI was retired on 26 August 2026.&lt;/STRONG&gt; Use the data agent directly, or through Foundry, Copilot Studio, Microsoft 365 Copilot or its MCP endpoint.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Operations agent is GA&lt;/STRONG&gt; (June to July 2026). Newer abilities, such as root-cause investigations and pre-approved actions, are still in public preview.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Operations agents need a paid Fabric capacity.&lt;/STRONG&gt; Trial capacity is not supported, and an admin must turn on the Copilot/AI and operations agent tenant settings.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A data agent is only as good as the model under it.&lt;/STRONG&gt; Clear table names, descriptions, relationships and agent instructions matter more than prompt tricks.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;An operations agent automates your mistakes too.&lt;/STRONG&gt; Start with "recommend" actions that a person approves, then move to automatic actions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Don't pick Foundry just for governance.&lt;/STRONG&gt; Both Copilot Studio and Foundry agents now show up in the same Microsoft governance and security tooling. Pick on build style, model needs and network needs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rule of thumb:&lt;/STRONG&gt; prototype in Copilot Studio for a week. If you hit a wall (model choice, evals, isolation, scale), that wall is your Foundry requirement.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4 data-lfile-container="5d99aa03-46ad-4dd2-9ad2-6338401f1bec" data-pm-slice="1 3 []"&gt;Sources&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Advancing-autonomous-action-with-operations-agent-Generally/ba-p/5192046" target="_blank" rel="noopener"&gt;Operations agent (Generally Available), Fabric Updates Blog&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-US/blog/improving-operational-efficiency-with-operations-agents-in-real-time-intelligence/" target="_blank" rel="noopener"&gt;Improving operational efficiency with operations agents, Fabric Updates Blog&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/build-deploy-and-govern-microsoft-fabric-at-scale/5369145" target="_blank" rel="noopener"&gt;Build, deploy, and govern Fabric at scale (FabCon 2026), Fabric Community&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.jamesserra.com/archive/2026/10/announcements-from-the-microsoft-fabric-community-conference-barcelona-2026/" target="_blank" rel="noopener"&gt;FabCon Barcelona 2026 announcements, James Serra&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/1592854" target="_blank" rel="noopener"&gt;Retirement of data agent in Copilot in Power BI, Fabric Community&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://atlan.com/know/microsoft-fabric/what-are-fabric-data-agents/" target="_blank" rel="noopener"&gt;What are Fabric data agents: GA status and limits, Atlan&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.daymarksi.com/blog/fabric-data-agent-vs-fabric-operations-agent-understanding-the-difference" target="_blank" rel="noopener"&gt;Fabric data agent vs operations agent, Daymark&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://medium.com/data-science-at-microsoft/one-agent-many-channels-how-to-query-fabric-data-agents-everywhere-7e85f453f6e6" target="_blank" rel="noopener"&gt;One agent, many channels: querying Fabric data agents, Data Science at Microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.nasstar.com/insights/copilot-studio-vs-microsoft-foundry" target="_blank" rel="noopener"&gt;Copilot Studio vs Microsoft Foundry, Nasstar&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://o365hq.com/cdx/real-time-insights-with-fabric-real-time-intelligence" target="_blank" rel="noopener"&gt;Zava Real-Time Intelligence demo, Microsoft CDX&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 27 Oct 2026 14:30:58 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Copilot-Studio-Foundry-Fabric-Data-Agent-or-Operations-Agent/ba-p/5377319</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-10-27T14:30:58Z</dc:date>
    </item>
    <item>
      <title>Fabric Data Agents Get Smarter on 2 November. Can You Prove Yours Still Answers Correctly?</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Data-Agents-Get-Smarter-on-2-November-Can-You-Prove-Yours/ba-p/5376229</link>
      <description>&lt;P data-lfile-container="64dbee2d-0c28-46a8-893f-2f121871ab4d" data-pm-slice="1 3 []"&gt;Microsoft announced Advanced NL2SQL and advanced DAX generation as generally available on 19 October 2026. The core improvements roll out to the standard runtime by default, together with a move to GPT-5.6 Terra. Separately, the old custom-tool way of calling a Fabric data agent from Microsoft Foundry stops being supported on 6 November.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Date (2026)&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;What happens&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;What you should have done&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;19 Oct&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;GA announced&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Read this post&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Now to 1 Nov&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Changes available on the preview runtime&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Build a ground-truth set, baseline standard, test preview&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;2 Nov&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Standard-runtime rollout begins, no opt-in&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Baseline frozen and stored&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;6 Nov&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Foundry custom-connection integration unsupported&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Foundry agents moved to Fabric IQ&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;By 10 Nov&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Rollout expected to complete&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Re-run, diff the queries, tell affected users&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H5&gt;What Microsoft actually announced&lt;/H5&gt;
&lt;P&gt;The query generators stop writing in one pass and start investigating first. That is why behaviour can change even where accuracy improves.&lt;/P&gt;
&lt;P&gt;Until now, NL2SQL and NL2DAX generated a query in a single pass, resolving schema, business definitions and filter values at once. As the &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/advanced-nl2sql-and-advanced-dax-generation-in-fabric-data-agents-generally-avai/5374654" target="_blank"&gt;GA announcement&lt;/A&gt; puts it, a wrong guess still runs, and the wrong answer looks like a right one.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Advanced NL2SQL&lt;/STRONG&gt; explores the schema, tests joins and looks up real filter values before writing SQL. It works in three modes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Example query following&lt;/STRONG&gt;: adapts a relevant example query, for instance by swapping a filter value.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Clarifying questions&lt;/STRONG&gt;: asks the user when it can't answer reliably.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data exploration&lt;/STRONG&gt;: infers logic from your examples and checks assumptions against the data.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Advanced DAX generation&lt;/STRONG&gt; brings the same idea to semantic models: an agentic tool-calling loop plus instance value indexing, so a user's "California" maps to the stored "CA".&lt;/P&gt;
&lt;H5&gt;Microsoft's internal benchmarks&lt;/H5&gt;
&lt;P&gt;Microsoft's 2026 internal evaluations, standard versus preview runtime. Microsoft notes results vary by workload, model and configuration.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Benchmark&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Smart-answer accuracy&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;P50 latency&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;P95 latency&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;NL2SQL, standard&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;78.8%&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;28.4 s&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;46.8 s&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Advanced NL2SQL, preview&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;90.9%&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;26.0 s&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;32.9 s&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;NL2DAX, standard&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;89.15%&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;39.1 s&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;97.5 s&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Advanced DAX, preview&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;91.86%&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;20.4 s&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;34.7 s&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;SQL gains 12.1 accuracy points. DAX gains only 2.7 points, but its tail latency drops by about 64%. If your semantic-model agents felt slow, that is your headline.&lt;/P&gt;
&lt;H5&gt;What moves, and what doesn't&lt;/H5&gt;
&lt;P&gt;Moving to standard: Advanced NL2SQL, advanced DAX generation and the GPT-5.6 Terra model upgrade. Staying in preview: &lt;STRONG&gt;schema descriptions&lt;/STRONG&gt; and &lt;STRONG&gt;topics&lt;/STRONG&gt; for SQL sources.&lt;/P&gt;
&lt;P&gt;Two details catch people out (&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-runtime" target="_blank"&gt;runtime docs&lt;/A&gt;):&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;A published agent keeps the runtime it was published with.&lt;/STRONG&gt; Publish on preview and it stays on preview until you republish. Check every production agent.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Runtime choice doesn't pick the model.&lt;/STRONG&gt; A preview run today is a strong signal, not a guaranteed copy of standard after 10 November. Re-run after the rollout regardless.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H5&gt;Why "better on average" can still surprise you&lt;/H5&gt;
&lt;P&gt;A benchmark counts right answers. Your users notice changed answers. The second one generates support tickets.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Workaround instructions start fighting the agent.&lt;/STRONG&gt; Rules written to patch single-pass behaviour may no longer be needed, and unneeded guidance can steer an agent away from a path it would have found itself.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Example queries get followed more literally.&lt;/STRONG&gt; Good when they are current. An example with last year's fiscal logic now gets reproduced more faithfully.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Ambiguous questions get a question back.&lt;/STRONG&gt; Better for users, but it breaks anything downstream that expects a number, such as a Copilot Studio flow or a Foundry agent chain.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;A correct new answer can be a business problem.&lt;/STRONG&gt; "Active customers in Q3" returned 41,200 because of a wrong date column; now it correctly returns 38,900. Someone may already have put 41,200 in a board pack.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The pass count hides the churn.&lt;/STRONG&gt; 40 of 50 pass before, 44 after. Looks like +4. Underneath, 6 newly pass and 2 now fail: 8 changed answers, 2 regressions.&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Question status&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Count&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Action&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Pass both, same query&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;34&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Nothing&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Pass both, different query&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Right for the right reason?&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Failed before, passes now&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;6&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Tell anyone who acted on the old answer&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Passed before, fails now&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;2&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Fix instructions or examples first&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Fail both&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Existing backlog&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Illustrative numbers. The structure is what your own run should produce.&lt;/P&gt;
&lt;H5&gt;The pre-rollout routine: six steps for this week&lt;/H5&gt;
&lt;P&gt;You need a Fabric notebook, a lakehouse and the &lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/fabric-data-agent-sdk" target="_blank"&gt;Fabric data agent SDK&lt;/A&gt;. The SDK and its &lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/evaluate-data-agent" target="_blank"&gt;evaluation features&lt;/A&gt; are in preview, so note the version you used. You also need F2 or higher capacity, the data agent tenant settings enabled and read access to the sources.&lt;/P&gt;
&lt;H5&gt;Step 1: Inventory agents and dependencies&lt;/H5&gt;
&lt;P&gt;For each published agent, record the runtime it was published on, its source types, where it is consumed (Fabric, Teams, M365 Copilot, Copilot Studio, Foundry) and its business owner. Anything called from Foundry via the old custom tool also goes on your 6 November list.&lt;/P&gt;
&lt;H5&gt;Step 2: Build a ground-truth set that covers the risky cases&lt;/H5&gt;
&lt;P&gt;The SDK takes a DataFrame or CSV with question and expected_answer. Aim for 30 to 60 questions per agent, ideally from real usage, covering filter values ("California" stored as "CA"), example-adjacent questions, multi-join questions, ambiguous questions and high-stakes KPI figures.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;%pip install -U fabric-data-agent-sdk&lt;/LI-CODE&gt;&lt;LI-CODE lang="python"&gt;import pandas as pd

gt = pd.DataFrame(columns=["question", "expected_answer"], data=[
    ["Total net sales in California for September 2026", "1,284,550.20"],
    ["Returns rate by region for FY26", "North 3.1%, South 2.7%, East 4.0%, West 3.4%"],
    ["What was revenue last year?", "CLARIFY: should ask gross or net, fiscal or calendar"],
    ["Active customers in Q3 2026", "38,900"],
])
gt.to_csv("/lakehouse/default/Files/agent_eval/ground_truth_sales.csv", index=False)&lt;/LI-CODE&gt;
&lt;P&gt;The values are placeholders. Use answers your business owner has signed off.&lt;/P&gt;
&lt;H5&gt;Step 3: Use a critic prompt that accepts clarifying questions&lt;/H5&gt;
&lt;P&gt;The default grader would mark a good clarifying question as wrong. The SDK accepts a custom critic_prompt with {query}, {expected_answer} and {actual_answer} placeholders.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;critic_prompt = """
Query: {query}
Expected Answer: {expected_answer}
Actual Answer: {actual_answer}

If the expected answer starts with CLARIFY:, respond 'yes' only if the actual
answer asks a clarifying question about the same ambiguity. Otherwise respond
'yes' only if the actual answer is numerically and semantically equivalent.
Is the actual answer equivalent to the expected answer?
"""&lt;/LI-CODE&gt;
&lt;H5&gt;Step 4: Capture the standard baseline before 2 November&lt;/H5&gt;
&lt;P&gt;Run against the &lt;STRONG&gt;production&lt;/STRONG&gt; stage, which is what users hit today. Give each run its own table.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from fabric.dataagent.evaluation import (
    evaluate_data_agent, get_evaluation_summary, get_evaluation_details)

agent_name = "SalesAgent"
baseline_table = "eval_sales_standard_baseline_2026_10"

baseline_id = evaluate_data_agent(
    gt, agent_name, table_name=baseline_table,
    data_agent_stage="production", critic_prompt=critic_prompt)

print(get_evaluation_summary(baseline_table))
baseline = get_evaluation_details(baseline_id, baseline_table, get_all_rows=True)
print(baseline.columns.tolist())  # check column names in your SDK version&lt;/LI-CODE&gt;
&lt;P&gt;This writes &amp;lt;table_name&amp;gt; with per-question results and &amp;lt;table_name&amp;gt;_steps with the detailed reasoning and step-by-step execution. Look there for the generated SQL or DAX, and keep both tables as evidence. For a single question, the Diagnostics button exports the full steps too.&lt;/P&gt;
&lt;H5&gt;Step 5: Record P50 and P95 latency through the MCP endpoint&lt;/H5&gt;
&lt;P&gt;The evaluation tables focus on correctness, so time each question against the published agent's MCP endpoint. This adapts Microsoft's SDK sample:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import time, numpy as np
from azure.identity import InteractiveBrowserCredential
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

mcp_url = ("https://api.fabric.microsoft.com/v1/mcp/workspaces/&amp;lt;workspace-id&amp;gt;"
           "/dataagents/&amp;lt;data-agent-id&amp;gt;/agent")
cred = InteractiveBrowserCredential()

async def ask(q):
    tok = cred.get_token("https://api.fabric.microsoft.com/.default").token
    async with streamablehttp_client(mcp_url, headers={"Authorization": f"Bearer {tok}"}) as (r, w, _):
        async with ClientSession(r, w) as s:
            await s.initialize()
            tool = (await s.list_tools()).tools[0]
            arg = next(iter(tool.inputSchema["properties"]))
            t0 = time.perf_counter()
            await s.call_tool(tool.name, {arg: q})
            return time.perf_counter() - t0

secs = [await ask(q) for q in gt.question for _ in range(3)]
print(f"P50 {np.percentile(secs, 50):.1f}s  P95 {np.percentile(secs, 95):.1f}s")&lt;/LI-CODE&gt;
&lt;P&gt;Run each question several times; single timings are noisy. The MCP response returns answer text only, not the query, which is why query evidence comes from the steps table.&lt;/P&gt;
&lt;H5&gt;Step 6: Preview now, standard after 10 November, then diff&lt;/H5&gt;
&lt;P&gt;&lt;STRONG&gt;Preview, today.&lt;/STRONG&gt; Switch your draft to preview and evaluate the &lt;STRONG&gt;sandbox&lt;/STRONG&gt; stage, leaving production untouched. The switch comes from the &lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-runtime" target="_blank"&gt;runtime docs&lt;/A&gt; (the ribbon's Runtime dropdown works too); check the SDK reference for the FabricDataAgentManagement import.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;data_agent = FabricDataAgentManagement(agent_name)
data_agent.update_configuration(enable_preview_features=True)
preview_id = evaluate_data_agent(gt, agent_name, table_name="eval_sales_preview_2026_10",
                                 data_agent_stage="sandbox", critic_prompt=critic_prompt)
data_agent.update_configuration(enable_preview_features=False)  # don't publish on preview by accident&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Standard, after 10 November.&lt;/STRONG&gt; Repeat Steps 4 and 5 against production with new table names.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The diff.&lt;/STRONG&gt; Compare per question, never just the summary. Fill in your SDK's pass-flag and answer column names.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;def diff_runs(before, after, passed="&amp;lt;pass-col&amp;gt;", answer="&amp;lt;answer-col&amp;gt;"):
    m = before.merge(after, on="question", suffixes=("_b", "_a"))
    def status(r):
        b, a = r[passed + "_b"], r[passed + "_a"]
        if b and a:
            return "same" if str(r[answer + "_b"]) == str(r[answer + "_a"]) else "answer changed"
        return "newly correct" if a else ("REGRESSION" if b else "fail both")
    m["status"] = m.apply(status, axis=1)
    return m.sort_values("status")&lt;/LI-CODE&gt;
&lt;P&gt;Then compare the generated queries from both _steps tables. A changed query with the same answer deserves a look: it may be right by coincidence on this month's data.&lt;/P&gt;
&lt;P&gt;When a result changed, check the run steps for: which example query it picked, which join path it chose, which instruction it followed, and whether a clarifying question was the right call. Most fixes will be in your examples and instructions, not the platform.&lt;/P&gt;
&lt;H5&gt;The 6 November deadline: move Foundry agents to Fabric IQ&lt;/H5&gt;
&lt;P&gt;If a Foundry agent calls your data agent through the original custom tool, that path stops being supported on 6 November 2026 (&lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/retiring-the-fabric-data-agent-custom-tool-in-microsoft-foundry-move-to-fabric-i/5374418" target="_blank"&gt;retirement notice&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The catch: the replacement, the Fabric IQ (OneLake Catalog) tool, is in preview.&lt;/STRONG&gt; Production agents move from a deprecated integration to a preview one, four days into the query rollout. Make that an explicit risk decision, with a fallback plan.&lt;/P&gt;
&lt;P&gt;What you gain: pick agents by name from the catalog, connect several data agents to one Foundry agent (the old tool allowed one), and an MCP endpoint per agent. Microsoft also says responses will soon include the query used.&lt;/P&gt;
&lt;P&gt;Portal migration, in Microsoft's order:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Publish the data agent with a rich, detailed description.&lt;/LI&gt;
&lt;LI&gt;In the Foundry portal, open the agent and add the &lt;STRONG&gt;Fabric IQ (OneLake Catalog)&lt;/STRONG&gt; tool, then select your data agent.&lt;/LI&gt;
&lt;LI&gt;Update the Foundry agent's instructions to name each data agent and what it handles.&lt;/LI&gt;
&lt;LI&gt;Remove the old custom tool, save, and test with representative questions.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;For code, use the MCP URL from the agent's Settings &amp;gt; Model Context Protocol tab and the FabricIQPreviewTool in azure-ai-projects&amp;gt;=2.2.0. Full samples are in &lt;A href="https://learn.microsoft.com/azure/foundry/agents/how-to/tools/fabric-iq" target="_blank"&gt;Connect agents to Microsoft Fabric with Fabric IQ&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Test the two changes separately.&lt;/STRONG&gt; If you migrate on 5 November and answers shift on 8 November, you won't know why. Migrate now and baseline through Foundry before 2 November. The connection calls Fabric as the signed-in user, so test with accounts that match real users' permissions and row-level security.&lt;/P&gt;
&lt;H5&gt;When the new answer is right, who tells people?&lt;/H5&gt;
&lt;P&gt;The hardest part is not technical. Someone acted on the old number. Decide now who owns that conversation:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Each agent has a business owner&lt;/STRONG&gt; who reviews "newly correct" and "answer changed" rows.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;High-stakes answers get a change note&lt;/STRONG&gt;: old answer, new answer, why, and since when.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The note goes where the old answer was used&lt;/STRONG&gt;: report owners, Teams channels, Copilot Studio makers.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Regressions get fixed, not avoided.&lt;/STRONG&gt; Standard is changing anyway, so plan the fix.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Also tell users before 2 November that answers may become more precise and the agent may ask follow-up questions. A warned surprise becomes a feature.&lt;/P&gt;
&lt;H5&gt;Your checklist&lt;/H5&gt;
&lt;UL data-kind="check"&gt;
&lt;LI data-checked="false"&gt;Inventory agents, runtimes, consumers and owners&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Build ground-truth sets, including ambiguous and high-stakes questions&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Write a critic prompt that accepts correct clarifying questions&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Capture the standard baseline, steps and latency before 2 November&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Run the set on preview in the sandbox stage&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Migrate Foundry agents to Fabric IQ and baseline them before 6 November&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Decide explicitly on running production on the preview Fabric IQ tool&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Re-run after 10 November and diff per question and per query&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Retire workaround instructions and refresh stale examples&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Send change notes for high-stakes answers that moved&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2026 13:49:38 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Data-Agents-Get-Smarter-on-2-November-Can-You-Prove-Yours/ba-p/5376229</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-10-26T13:49:38Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Security Policies: How They Strengthen Data Security and Governance?</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Security-Policies-How-They-Strengthen-Data/ba-p/5373768</link>
      <description>&lt;P&gt;In today’s data-driven world, governance isn’t just about compliance — it’s about enabling trust, consistency, and scale. As organizations adopt Microsoft Fabric to unify their analytics, the challenge of managing who can do what, where, and under which conditions become critical. That’s where Microsoft Fabric policies step in.&lt;/P&gt;
&lt;P&gt;Think of them as the rulebooks that let administrators define guardrails across workspaces, security groups, and sensitivity labels. Instead of relying on manual oversight, policies provide a centralized, automated way to enforce governance — ensuring that innovation doesn’t come at the cost of control.&lt;/P&gt;
&lt;P&gt;In this blog will walk you through the key concepts, the entry points for creating and activating policies, and the end-to-end lifecycle that makes governance in Fabric both powerful and practical.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-11"&gt;&lt;STRONG&gt;Prerequisites:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A Valid Fabric Trail / Capacity License&lt;/P&gt;
&lt;P&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A Fabric workspace assigned to a Capacity/Fabric Trail.&lt;/P&gt;
&lt;P&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Proper admin role to activate the policy&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a) Fabric administrator: Can create and activate policies for tenant-scope policies.&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b) Capacity administrator: Can create and activate policies for capacity-scope policies.&lt;/P&gt;
&lt;P&gt;4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Contributor, Member, or Admin access to the workspace so that you can create a policy item type.&lt;/P&gt;
&lt;P&gt;5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Policies tenant setting is enabled in Admin settings&lt;/P&gt;
&lt;P&gt;6)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Valid Security groups in AAD.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 1: Enable the Policies feature in the admin settings&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Go to fabric admin settings, search for polices(preview) and enable the setting and click on apply.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 2: Creating Policy item&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Create a workspace ‘Fabric-Polices-Ws’ which was assigned to ‘Fabric Trail’ and I’m (SI Babu) who’s the capacity admin. Make sure this should be a secured, admin-managed workspace to store policies.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Click on ‘New Item’ and select ‘Policy set (preview)’ under ‘Govern data’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;In New policy set dialog, enter a unique and descriptive Name ‘Capacity_PolicySet_1’ for the policy set and choose ‘ A capacity’ under policy scope then Click on ‘Create’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Create another policy set ‘Tenent_Policy_set2’ and choose ‘ Fabric Tenant’ under policy scope then Click on ‘Create’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Two policy sets are created.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 3: Activating the Policy set&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Open Capacity policy set and select the ‘Active’ from Status&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Select the capacity and click on ‘Assign + activate’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Policy activated successfully&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Open Tenant policy set and select the ‘Active’ from Status&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Click on ‘Activate’ the policy&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Policy activated successfully&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 4: Create / Add Policy Rules(Capacity Policy)&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Click on ‘OneLake catalog’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Click on ‘Govern’ à‘Polices(preview)’ àCapacitiesàExpand the ‘Users can create items’ and select ‘Advanced’&lt;/P&gt;
&lt;P&gt;Here, Select Allowed, Blocked, or Advanced (Set by user) to change the policy behavior. If you select Advanced, the rules configuration is enabled.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Add a new rule with good name, description and Select ‘item type’ in Condition type, operator is ‘Is any of’ the select ‘Lakehouse’ and ‘Dataflow gen2’ then click on ‘+Add condition’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Choose ‘workspace’ in condition type, operator is ‘Is any of’ selected two workspaces gen2’ then click on ‘+Add condition’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Choose ‘Security group’ in condition type, operator is ‘Is any of’ selected my ‘Data Analyst’ AD group. Click on Apply&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Note:&amp;nbsp; In this Data Analyst group we have three developers are there&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Click on “Save’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now Policy successfully added&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 5: Validate policy enforcement (Capacity Policy)&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Added ‘Data Analyst’ AD group to both the workspaces ‘FabricRTI Training’ &amp;amp; ‘PowerBI-Demo-WS’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now I was opened another window with account(SP Babu) who’s part of AD group &amp;amp; you can see two workspaces&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Create a ‘Notebook’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now when I click on “Create” it’s throwing an error as you seen in below screenshot. Means it enforced a policy&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Again, When I was trying to create ‘Warehouse’ it’s throwing the same error.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;I (SP Babu) was able to create ‘DataFlowGen2’. Admin enforced to create only this item&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;I (SP Babu) was able to create ‘Lakehouse’. Admin enforced to create only this item&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 6: Create / Add Policy Rules(Tenant Policy)&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Create another policy should be at tenant level to restrict workspace Outbound access protection and inbound network rules and click ‘add condition’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Add “Security group’ as I have IT Infra Team and click Apply&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Note:&amp;nbsp; In this IT Infra Team group we have three resources are there&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Security policy created successfully&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;&lt;STRONG&gt;Step 7: Validate policy enforcement (Tenant Policy)&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Now SP Babu unable to edit ‘Outbound access’&amp;nbsp; it’s showing ‘This setting is managed by a tenant policy.’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;SP Babu unable to edit ‘Inbound access’&amp;nbsp; it’s showing ‘This setting is managed by a tenant policy.’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;You can deactivate or replace an active policy set from the workspace where the policy set is stored. Only an administrator of the policy set's admin scope can deactivate or replace it.&lt;/P&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-15"&gt;&lt;STRONG&gt;Best practices for creating a policy:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Use a secured, admin-managed workspace to store policies.&lt;/LI&gt;
&lt;LI&gt;Store all policies for the admin scopes managed by the same administrator or admin team in the same workspace. This approach provides one location for tenant- and capacity-scoped policies and simplifies access management, discovery, and lifecycle management.&lt;/LI&gt;
&lt;LI&gt;Use clear policy set and rule names that identify the admin scope and purpose.&lt;/LI&gt;
&lt;LI&gt;Use test users who are members and non-members of the configured security groups to validate both allow and deny outcomes before broader rollout.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Limitations as of now:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;Fabric policies aren't currently supported in the following capacity regions: West Europe, North Europe, and West US.&lt;/LI&gt;
&lt;LI&gt;We can currently create policy sets only from the item creation experience in a workspace.&lt;/LI&gt;
&lt;LI&gt;Only workspaces assigned to a Fabric capacity can store policy sets.&lt;/LI&gt;
&lt;LI&gt;We can't change a policy set's admin scope after creation.&lt;/LI&gt;
&lt;LI&gt;Only one policy set can be active for an admin scope at a time.&lt;/LI&gt;
&lt;LI&gt;Policy and tenant-setting changes can take time to propagate.&lt;/LI&gt;
&lt;LI&gt;Conditions support Any of and None of in the current preview.&lt;/LI&gt;
&lt;LI&gt;We can't activate a policy set through Git.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;So, start small with pilot policies, monitor audit logs for adoption and Communicate changes to workspace owners&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Microsoft Fabric Policies are still in preview, but they signal a future where governance is not a blocker — it’s an enabler of responsible innovation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Happy learning!&lt;/STRONG&gt;&lt;/P&gt;
&lt;H5&gt;&lt;EM&gt;— Inturi Suparna Babu&lt;/EM&gt;&lt;/H5&gt;
&lt;H5&gt;&lt;A href="https://www.linkedin.com/in/inturi-suparna-babu-312b59270/" target="_blank" rel="noopener"&gt;&lt;EM&gt;[LinkedIn]&lt;/EM&gt;&lt;/A&gt;&lt;/H5&gt;</description>
      <pubDate>Tue, 13 Oct 2026 13:58:44 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Security-Policies-How-They-Strengthen-Data/ba-p/5373768</guid>
      <dc:creator>suparnababu8</dc:creator>
      <dc:date>2026-10-13T13:58:44Z</dc:date>
    </item>
    <item>
      <title>I Let Fabric's New Data Engineering Agent Run My ETL: Here's What Happened</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/I-Let-Fabric-s-New-Data-Engineering-Agent-Run-My-ETL-Here-s-What/ba-p/5373429</link>
      <description>&lt;P&gt;Last week I handed Microsoft Fabric's new Data Engineering Agent a messy ETL job that took me 11 hours to build by hand last quarter. It had a working, validated pipeline in front of me in under an hour. I still changed 3 of its 9 steps before I'd let it near anything important.&lt;/P&gt;
&lt;P&gt;That is the short version. The long version is more interesting, because the places where it went wrong tell you exactly how to use it well.&lt;/P&gt;
&lt;P&gt;Some context first. At FabCon Europe 2026 in Barcelona (September 28 to October 1), Microsoft announced the Data Engineering Agent in preview. It can plan and run migrations, ETL and performance work under guardrails that engineers define. It builds on technology from Osmos, the agentic data engineering startup Microsoft acquired in January 2026, and was demoed on stage as "Project Osmos".&lt;/P&gt;
&lt;P&gt;Copilot has been helping us write code for a while now. This is a different idea. You describe the outcome, and the agent does long-running, multi-step work on its own while you supervise. I wanted to know whether that holds up on a real, slightly ugly dataset rather than a keynote demo. So I tried it.&lt;/P&gt;
&lt;H2 data-lfile-container="3c76664f-57c5-4fe1-b5f3-c441fccd4e88" data-pm-slice="1 1 []"&gt;What the Data Engineering Agent actually is&lt;/H2&gt;
&lt;P&gt;The agent is an autonomous worker inside your Fabric workspace, not a chat assistant that suggests code. You give it a goal, and it does the multi-step work itself.&lt;/P&gt;
&lt;P&gt;Its roots are in Osmos, a Seattle startup whose "AI Data Engineer" already generated production-grade PySpark notebooks inside Fabric. Microsoft bought the company in January 2026 and folded the team into Fabric engineering.&lt;/P&gt;
&lt;P&gt;Based on Microsoft's FabCon session on Project Osmos, a typical run looks like this:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Read the request.&lt;/STRONG&gt; You describe the outcome, even loosely ("land the orders CSVs in a clean silver table").&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Inspect the workspace.&lt;/STRONG&gt; It looks at your existing code, Lakehouses and data layout before writing anything.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Plan.&lt;/STRONG&gt; It breaks the job into steps and can hand parts to sub-agents for long-running work.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Build.&lt;/STRONG&gt; It creates and updates notebooks and other Fabric items.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Validate.&lt;/STRONG&gt; It checks its own output so you can trust what was built.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Hand back to you.&lt;/STRONG&gt; A human reviews and approves. Microsoft is explicit that supervision stays part of the process.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The headline use cases are migrations, ETL and performance tuning. I chose ETL, because that is where most of us spend our week.&lt;/P&gt;
&lt;H2&gt;The test: a real pipeline, not a demo&lt;/H2&gt;
&lt;P&gt;I picked a job I had already built by hand, so I could judge the agent's work line by line against my own.&lt;/P&gt;
&lt;P&gt;The data is sales orders from a mid-sized retail client . Every day their order system drops a CSV export into a Lakehouse folder. The business wants a clean orders table for analysts and a daily sales summary for a Power BI report.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Item&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;My setup&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Source data&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;14 daily CSV exports, 18.4 million rows, about 2.1 GB, in Files/raw/orders/&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Target&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;silver_orders (cleaned Delta table) and gold_daily_sales (aggregate by day, store and category)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Known traps&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Duplicate order IDs from system retries, two date formats, a currency column with nulls, cancelled orders flagged as negative quantities&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Capacity&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;F64 trial capacity, sandbox workspace&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Hand-built baseline&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;About 11 hours across two days, including testing&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The exact prompt I gave it:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P data-lfile-container="3c76664f-57c5-4fe1-b5f3-c441fccd4e88" data-pm-slice="1 1 [&amp;quot;blockquote&amp;quot;,{&amp;quot;bid&amp;quot;:&amp;quot;m4qxfnbw4s0.8672&amp;quot;}]"&gt;Ingest the daily order CSVs in Files/raw/orders into a cleaned silver Delta table called silver_orders. Remove duplicates, standardise dates and currency, and exclude cancelled orders. Then build gold_daily_sales with total revenue, order count and average basket size by day, store and category. The pipeline must run incrementally each day.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P data-lfile-container="3c76664f-57c5-4fe1-b5f3-c441fccd4e88" data-pm-slice="1 1 []"&gt;I deliberately kept the prompt a little vague. I didn't say which date formats exist, how cancellations are encoded, or which column identifies a duplicate. In real life, requirements rarely arrive as a perfect spec. I wanted to see whether the agent would investigate, ask, or just guess.&lt;/P&gt;
&lt;H2&gt;What happened, step by step&lt;/H2&gt;
&lt;H3&gt;1. It read the workspace before writing anything&lt;/H3&gt;
&lt;P&gt;The first thing I noticed: it didn't start coding. For the first four minutes it profiled the data. It sampled each CSV, inferred the schema and looked at my existing notebooks in the workspace.&lt;/P&gt;
&lt;P&gt;It came back with a short summary of what it found. Two findings impressed me:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It spotted both date formats (2026-09-14 and 14/09/2026) and flagged that files from 9 September onwards switched format.&lt;/LI&gt;
&lt;LI&gt;It noticed my existing notebooks used a nb_&amp;lt;layer&amp;gt;_&amp;lt;entity&amp;gt; naming pattern and said it would follow it.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;It missed one thing, which matters later: it reported quantity as "integer, some negative values" without asking what negative quantities meant.&lt;/P&gt;
&lt;H3&gt;2. The plan it proposed&lt;/H3&gt;
&lt;P&gt;Next it produced a 9-step plan and stopped for my approval:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a staging notebook to read all CSVs with an explicit schema&lt;/LI&gt;
&lt;LI&gt;Normalise both date formats to a single order_date column&lt;/LI&gt;
&lt;LI&gt;Fill null currency values from the store's default currency&lt;/LI&gt;
&lt;LI&gt;Deduplicate on order_id, keeping the latest record&lt;/LI&gt;
&lt;LI&gt;Remove cancelled orders&lt;/LI&gt;
&lt;LI&gt;Write silver_orders as a Delta table, partitioned by order_date&lt;/LI&gt;
&lt;LI&gt;Build gold_daily_sales with the three requested measures&lt;/LI&gt;
&lt;LI&gt;Add incremental logic based on the source file date&lt;/LI&gt;
&lt;LI&gt;Run validation checks and produce a summary report&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This is a sensible plan. It is roughly what I wrote on a whiteboard last quarter. But reading it closely, I changed three things before approving:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 4:&lt;/STRONG&gt; it planned to overwrite silver_orders on each run. I changed it to a MERGE on order_id, because late-arriving corrections are common in this data.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 5:&lt;/STRONG&gt; it planned to remove cancellations using a status column. That column exists, but this client never fills it. Cancellations show up as negative quantities. I told it so.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 8:&lt;/STRONG&gt; it wanted to detect new data by file modified time. I asked it to use the date in the file name instead, which is more reliable when files are re-uploaded.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;It accepted all three changes and rewrote the plan in a few seconds.&lt;/P&gt;
&lt;H3&gt;3. The build&lt;/H3&gt;
&lt;P&gt;Once approved, it worked for 38 minutes without needing me. It created three notebooks (nb_stg_orders, nb_silver_orders, nb_gold_daily_sales) and a small pipeline to run them in order.&lt;/P&gt;
&lt;P&gt;The code was clean and readable. Here is its date handling, which is close to what I would write myself:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from pyspark.sql import functions as F

df = df.withColumn(
    "order_date",
    F.coalesce(
        F.to_date("order_date_raw", "yyyy-MM-dd"),
        F.to_date("order_date_raw", "dd/MM/yyyy")
    )
)&lt;/LI-CODE&gt;
&lt;P data-lfile-container="3c76664f-57c5-4fe1-b5f3-c441fccd4e88" data-pm-slice="1 1 []"&gt;And the merge into silver, after my change in the plan:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from delta.tables import DeltaTable

silver = DeltaTable.forName(spark, "silver_orders")

(silver.alias("t")
    .merge(updates.alias("s"), "t.order_id = s.order_id")
    .whenMatchedUpdateAll()
    .whenNotMatchedInsertAll()
    .execute())&lt;/LI-CODE&gt;
&lt;P data-lfile-container="3c76664f-57c5-4fe1-b5f3-c441fccd4e88" data-pm-slice="1 3 []"&gt;It asked me one question mid-way: whether average basket size should be revenue per order or items per order. That was exactly the right question, and one I had to ask the client myself last time.&lt;/P&gt;
&lt;H3&gt;4. Self-validation&lt;/H3&gt;
&lt;P&gt;When the build finished, it ran its own checks and produced a short report:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Row counts reconciled from raw to staging to silver, with each dropped row explained (duplicates, cancellations)&lt;/LI&gt;
&lt;LI&gt;No nulls left in order_date, currency or store_id&lt;/LI&gt;
&lt;LI&gt;No duplicate order_id values in silver_orders&lt;/LI&gt;
&lt;LI&gt;Daily totals in gold_daily_sales matched a direct aggregate of silver_orders&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;One check failed on the first pass. 41,200 rows had a null order_date after parsing. It traced the cause itself: a third date format (14-Sep-2026) appeared in two of the older files, which its initial sampling had missed. It added a third pattern to the coalesce, re-ran, and the check passed.&lt;/P&gt;
&lt;P&gt;That moment sold me on the validation step. A human could easily miss 0.2% of rows quietly disappearing.&lt;/P&gt;
&lt;H3&gt;5. My review against my own version&lt;/H3&gt;
&lt;P&gt;I compared its output with the pipeline I built by hand last quarter, running both on the same 14 files.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Measure&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Agent&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Me, by hand&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Time to working pipeline&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;52 minutes (incl. my review)&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;About 11 hours&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Plan steps I changed&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;3 of 9&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Not applicable&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Data issues found&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4 of 4, after one self-correction&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4 of 4&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Full run time on 18.4M rows&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;6 min 40 s&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;5 min 55 s&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Silver row count&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;17,962,118&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;17,962,118&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The row counts matched exactly. My hand-built version ran about 45 seconds faster, mostly because I had tuned partitioning. More on that below.&lt;/P&gt;
&lt;P&gt;Would I merge its code as-is? After my three plan changes, yes, with one small performance fix.&lt;/P&gt;
&lt;H2&gt;Guardrails: the part you shouldn't skip&lt;/H2&gt;
&lt;P&gt;An agent that can create and change items in your workspace needs limits before it needs a prompt. Microsoft designed this agent around guardrails that engineers define, and setting them up was the best 15 minutes of the whole test.&lt;/P&gt;
&lt;P&gt;What I set up before the run:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A sandbox workspace.&lt;/STRONG&gt; It's a preview feature, so it ran on a copy of the data, nowhere near production.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Scoped data.&lt;/STRONG&gt; It could read Files/raw/orders/ and write only to new tables. My existing tables were off limits.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Approval points.&lt;/STRONG&gt; It had to stop for my approval after the plan, and again before the first write to any Delta table.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Git in the loop.&lt;/STRONG&gt; The workspace was connected to a Git repo, so every notebook it created or changed landed as a diff I could review line by line.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;In practice, it never tried to step outside these limits. The approval after the plan turned out to be the most valuable one: that is where I caught all three of my changes. If you set only one guardrail, make it that one.&lt;/P&gt;
&lt;H2&gt;Where it struggled&lt;/H2&gt;
&lt;P&gt;No agent review is credible without the failures, so here are the three that mattered.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;It assumed instead of asking about business rules.&lt;/STRONG&gt; It saw negative quantities and planned to use an empty status column for cancellations. Had I approved the plan without reading it, about 310,000 cancelled orders would have flowed into the gold table and inflated revenue. It asked a good question about basket size, but not this one.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Its sampling missed a rare date format.&lt;/STRONG&gt; The third format appeared in only two files. Its validation caught the problem, but only after the first run. On a much larger dataset, that first run costs real capacity.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Correct, but not tuned.&lt;/STRONG&gt; It partitioned silver_orders by order_date, which produced many small files for this data volume. Switching to monthly partitions and running OPTIMIZE closed most of the 45-second gap with my version. When I asked it to "make the silver write faster", it suggested the same fix, but it didn't do it unprompted.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Three caveats worth knowing before you try it:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;It's a preview.&lt;/STRONG&gt; Features, behaviour and pricing can change before general availability. Don't build production processes on it yet.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Watch your capacity.&lt;/STRONG&gt; Long-running agent work consumes capacity units on top of the Spark jobs themselves. Check the Capacity Metrics app after your first run so you know what a typical job costs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;It doesn't know your business.&lt;/STRONG&gt; It can read your schema, not your meeting notes. Every rule I wrote into the prompt was handled correctly. Every rule I left out was a guess.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;The verdict&lt;/H2&gt;
&lt;P&gt;The Data Engineering Agent is like a fast, tireless junior engineer: excellent at the mechanics, careful about checking its own work, and still in need of a senior reviewing the plan.&lt;/P&gt;
&lt;P&gt;What I'd tell my team after this test:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Spend your time on the prompt and the plan, not the code.&lt;/STRONG&gt; Every problem I found was visible in the plan before a single line ran.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Write business rules down explicitly.&lt;/STRONG&gt; Cancellations, duplicates, currency defaults. If it's tribal knowledge, the agent will guess.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Trust the validation step, but read its report.&lt;/STRONG&gt; It caught a data loss bug I might have missed myself.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tune afterwards.&lt;/STRONG&gt; Treat its first version as correct, then ask it for performance improvements.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Try it now if&lt;/STRONG&gt; you have a sandbox workspace, a backlog of repetitive ingestion or migration jobs, and someone who can review PySpark.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wait for GA if&lt;/STRONG&gt; you need it in production, your pipelines are full of undocumented business logic, or your capacity budget is tight.&lt;/P&gt;
&lt;P&gt;The bigger shift is in our role. Going from 11 hours to under an hour didn't remove me from the work. It moved my effort from typing code to writing clear requirements, setting guardrails and reviewing output. That is a skill worth building now, preview or not.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Have you tried the Data Engineering Agent yet? Tell me in the comments what you threw at it, and where it surprised you.&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Sources&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://kanerika.com/blogs/fabcon-europe-2026-announcements/" target="_blank"&gt;FabCon Europe 2026 announcements (Kanerika)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://espc.tech/conference/fabcon-europe-2026/programme/from-prompt-to-finished-project-introducing-project-osmos-for-agentic-data-engineering/" target="_blank"&gt;From Prompt to Finished Project: Introducing Project Osmos (FabCon Europe 2026 session)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://redmondmag.com/Articles/2026/01/06/Microsoft-Acquires-Osmos-To-Bring-Autonomous-Data-Engineering-to-Fabric.aspx" target="_blank"&gt;Microsoft Acquires Osmos (Redmond Magazine)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en/blog/fabric-january-2026-feature-summary" target="_blank"&gt;Fabric January 2026 Feature Summary (Microsoft Fabric Blog)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Fri, 09 Oct 2026 13:44:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/I-Let-Fabric-s-New-Data-Engineering-Agent-Run-My-ETL-Here-s-What/ba-p/5373429</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-10-09T13:44:42Z</dc:date>
    </item>
    <item>
      <title>ArcGIS Maps for Microsoft Fabric Is Now Generally Available</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/ArcGIS-Maps-for-Microsoft-Fabric-Is-Now-Generally-Available/ba-p/5373400</link>
      <description>&lt;P&gt;ArcGIS Maps for Microsoft Fabric is now generally available, bringing advanced mapping and geospatial visualization directly into Microsoft Fabric. Explore how organizations can visualize OneLake data, work with real-time and feature layers, and turn enterprise data into location-aware insights.&lt;/P&gt;</description>
      <pubDate>Thu, 08 Oct 2026 15:22:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/ArcGIS-Maps-for-Microsoft-Fabric-Is-Now-Generally-Available/ba-p/5373400</guid>
      <dc:creator>Tonyfra91</dc:creator>
      <dc:date>2026-10-08T15:22:42Z</dc:date>
    </item>
    <item>
      <title>Privacy by Design in Fabric: Implementing Shift-Left Data Protection</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Privacy-by-Design-in-Fabric-Implementing-Shift-Left-Data/ba-p/5371264</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;Privacy by Design in Microsoft Fabric: Implementing "Shift-Left" Data Protection for Enterprise Analytics&lt;/STRONG&gt;&lt;/H3&gt;&lt;H4&gt;Abstract&lt;/H4&gt;&lt;P&gt;While data engineers and architects often prioritize pipeline performance, Medallion architectures, and complex transformations, regulatory compliance and data security are frequently treated as afterthoughts. In highly regulated sectors like banking and finance, failing to protect Personally Identifiable Information (PII) can lead to severe penalties under evolving frameworks such as GDPR, PIPEDA, and other international privacy laws. This article explores the concept of "Shift-Left" data protection within Microsoft Fabric—implementing data masking, hashing, and external tokenization to secure sensitive data early in the lifecycle—while distinguishing robust security controls across OneLake, SQL Analytics Endpoint, and Semantic Models.&lt;/P&gt;&lt;H4&gt;Introduction&lt;/H4&gt;&lt;P&gt;Modern data professionals excel at writing efficient PySpark scripts, optimizing SQL queries, and designing multi-layered Medallion Lakehouses. However, technical elegance means little if an analytics platform exposes sensitive operational data to unauthorized risks. With the rise of global data privacy regulations and increasing security threats, data governance can no longer be a secondary phase applied right before dashboard deployment; it must be embedded directly into the ingestion and storage strategy.&lt;/P&gt;&lt;P&gt;A fundamental best practice in enterprise data architecture is the "Shift-Left" security pattern: masking, pseudonymizing, or hashing sensitive PII attributes at the earliest possible stage rather than relying solely on downstream presentation layers. Within Microsoft Fabric, data teams can execute this strategy across pipelines, PySpark notebooks, and Semantic Models. This article examines practical techniques for implementing early-stage data protection and dynamic security controls in Fabric, helping data engineers build scalable analytical solutions that support strict regulatory mandates.&lt;/P&gt;&lt;H4&gt;What is "Shift-Left" Data Protection?&lt;/H4&gt;&lt;P&gt;In traditional data engineering, security controls are frequently applied at the very end of the pipeline—usually at the presentation layer using Power BI dashboard permissions or SQL database views. This legacy approach creates a critical vulnerability: raw, unmasked Personally Identifiable Information (PII) rests in landing zones or intermediate data lake layers, accessible to anyone with direct storage access.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;"Shift-Left" &lt;/STRONG&gt;Data Protection fundamentally changes this dynamic by pushing security, masking, and pseudonymization controls as far upstream as possible.&lt;/P&gt;&lt;P&gt;This approach is highly valuable for organizations navigating cross-border data transfers and cloud migrations. Many international regulatory frameworks strongly recommend or mandate that when transferring sensitive data across borders, the information should be pseudonymized or encrypted to support data sovereignty and localization principles. Failing to comply with privacy frameworks carries severe financial and reputational consequences for enterprises worldwide.&lt;/P&gt;&lt;P&gt;By applying cryptographic hashing, masking, or tokenization patterns early in the Medallion Architecture:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Exposure is Minimized: &lt;/STRONG&gt;Sensitive data (such as national IDs, emails, or account numbers) is restricted or neutralized before persisting in downstream analytical environments.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Supports Compliance Initiatives:&lt;/STRONG&gt; Organizations are better positioned to align with privacy principles established by global frameworks (like GDPR or PIPEDA) by adopting a Privacy by Design architecture.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Governance is Streamlined:&lt;/STRONG&gt; Instead of managing complex downstream permission rules across dozens of individual reports, core data security is enforced at the storage and engine layers.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;To determine whether an enterprise data pipeline truly adheres to a "Shift-Left" architecture, data engineering and compliance teams should verify key architectural control points, such as:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;[ ]&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Ingestion Gatekeeping:&lt;/STRONG&gt; Are raw PII fields masked in transit &lt;EM&gt;before &lt;/EM&gt;landing in the Bronze layer, or if landing raw in Bronze, is direct storage access strictly limited to service principals and administrators?&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;[ ]&amp;nbsp;Pseudonymization (Bronze to Silver): &lt;/STRONG&gt;Are identifying attributes transformed into deterministic hashes (like salted SHA-256) &lt;EM&gt;before persisting&lt;STRONG&gt; &lt;/STRONG&gt;&lt;/EM&gt;into Silver Delta tables?&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;[ ]&amp;nbsp;Integration with Token Vaults: &lt;/STRONG&gt;Are highly sensitive fields passed to external tokenization services during ingestion, ensuring the decryption vaults are isolated outside the analytics workspace?&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;[ ]&amp;nbsp;Identity and Role Verification: &lt;/STRONG&gt;Are workspace roles &lt;EM&gt;configured correctly &lt;/EM&gt;so that downstream consumers only access data via secured endpoints rather than having direct underlying OneLake file access?&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;Demystifying the Security Layers in Microsoft Fabric&lt;/H4&gt;&lt;P&gt;Implementing a "Shift-Left" framework in Fabric requires understanding that security is not monolithic; it is applied across distinct layers. A robust architecture leverages data-layer controls, transformation techniques, and compute-engine security rules.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. The Storage &amp;amp; Transformation Layer (Upstream)&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Source-Side Masking: &lt;/STRONG&gt;Using Data Factory pipelines to mask data in transit &lt;EM&gt;before &lt;/EM&gt;it ever writes to OneLake.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Hashing as Pseudonymization: &lt;/STRONG&gt;Using PySpark notebooks to apply SHA-256 hashing to fields like email addresses. &lt;EM&gt;Note: Hashing is pseudonymization, not true anonymization. To prevent dictionary or rainbow table attacks, data teams must implement secure "salting" alongside the hashing algorithm.&lt;/EM&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;External Tokenization Integration: &lt;/STRONG&gt;Fabric pipelines can call external REST APIs (e.g., third-party tokenization services or Azure Key Vault) to replace sensitive strings with non-mathematical tokens during the Bronze-to-Silver transformation.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;OneLake Security (Data Access Roles): &lt;/STRONG&gt;Fabric increasingly supports native OneLake security controls, allowing administrators to define data access roles directly on the OneLake folders and Delta tables, securing the files regardless of which compute engine accesses them.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;2. The Engine &amp;amp; Consumption Layer (Downstream)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Once data is curated, Fabric provides specific, engine-level security controls:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;SQL Analytics Endpoint (T-SQL Controls):&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Row-Level Security (RLS): &lt;/STRONG&gt;Filters specific rows (e.g., restricting a regional manager to only see sales from their territory) using standard T-SQL &lt;STRONG&gt;CREATE SECURITY POLICY&lt;/STRONG&gt; statements.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Column-Level Security (CLS):&lt;/STRONG&gt; Uses T-SQL &lt;STRONG&gt;GRANT SELECT&lt;/STRONG&gt; statements to prevent specific roles from querying sensitive columns like Salary or SSN, while allowing them to query the rest of the table.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Semantic Models (Direct Lake / Power BI Controls):&lt;/STRONG&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Row-Level Security (RLS): &lt;/STRONG&gt;Configured via DAX to filter data rows natively within the semantic model.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Object-Level Security (OLS): &lt;/STRONG&gt;Configured via Tabular Editor/XMLA to completely hide entire tables or columns from specific users in the semantic model, preventing report visuals from even discovering the fields.&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;High-Level Architecture in Microsoft Fabric&lt;/H4&gt;&lt;P&gt;Implementing a "Shift-Left" data protection framework within Microsoft Fabric relies on combining two complementary security layers:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;In-Flight Data Sanitization (Storage Layer): &lt;/STRONG&gt;Using Fabric PySpark Notebooks or Data Factory pipelines to hash, mask, or tokenize PII fields during ingestion or before writing into Silver Delta Tables in OneLake.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Dynamic Access Controls (Engine Layer):&lt;/STRONG&gt; Enforcing Row-Level Security (RLS) and Column-Level Security (CLS) on top of the SQL Analytics Endpoint or Direct Lake Semantic Models for role-based downstream consumption.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;To visualize how this defense-in-depth strategy comes together, the following reference architecture outlines how "Shift-Left" sanitization and dynamic query controls are orchestrated within Microsoft Fabric:&lt;/P&gt;&lt;img /&gt;&lt;H5&gt;Understanding the Architectural Diagram&lt;/H5&gt;&lt;P&gt;The architectural diagram above illustrates a simple example of an end-to-end Microsoft Fabric implementation designed around the "Shift-Left" paradigm. To read and interpret this architecture effectively, consider the flow of data through three core operational layers:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1. Data Sources &amp;amp; Boundary Controls (Left):&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Data flows from operational systems (On-Premises SQL Databases, REST APIs) toward &lt;STRONG&gt;Microsoft Fabric OneLake.&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Red Locks (Regulatory Blocking &amp;amp; Ingestion Masking):&lt;/STRONG&gt; Represent early security controls applied at the connector level. Sensitive operational fields are masked or blocked before landing in cloud storage to prevent cross-border compliance violations.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;2. Medallion Lakehouse &amp;amp; In-Flight Sanitization (Center):&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Bronze Layer (Raw Ingestion): &lt;/STRONG&gt;Stores incoming raw landing data.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Shift-Left Sanitization (PySpark Notebook): &lt;/STRONG&gt;Before moving data into the Silver Layer, PySpark notebooks perform cryptographic transformations (SHA-256 hashing, masking, tokenization).&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Silver Layer (Sanitized &amp;amp; Standardized): &lt;/STRONG&gt;Contains cleaned, enterprise-ready data where PII has been neutralized at the storage level within OneLake Delta files.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;3. Consumption &amp;amp; Dynamic Engine Security (Right):&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;STRONG&gt;Gold Layer (Aggregated &amp;amp; Enriched):&lt;/STRONG&gt; Curated dimensional models built for business analytics.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;SQL Analytics Endpoint &amp;amp; Direct Lake Semantic Models:&lt;/STRONG&gt; As queries hit the serving layer, secondary security rules—such as Column-Level Security (CLS) and Row-Level Security (RLS)—dynamically filter rows or restrict specific columns based on the user's Entra ID (Azure AD) identity, ensuring seamless role-based governance across Power BI reports and T-SQL queries.&lt;/LI&gt;&lt;/UL&gt;&lt;H4&gt;The Critical Role of Workspace Identity and Direct Storage Access&lt;/H4&gt;&lt;P&gt;The most common pitfall when designing security in Microsoft Fabric is a misunderstanding of Workspace Roles and Identity Modes.&lt;/P&gt;&lt;P&gt;SQL RLS/CLS and Semantic Model RLS/OLS are engine-level controls. If a user is granted the &lt;STRONG&gt;Admin, Member, or Contributor&lt;/STRONG&gt; role in a Fabric Workspace, they possess inherent direct storage access to the underlying OneLake files. Because they can access the raw Delta files directly via OneLake Explorer or Notebooks, &lt;STRONG&gt;they will completely bypass SQL RLS/CLS and Semantic Model security. &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;To successfully enforce engine-level security (like SQL CLS or Direct Lake RLS), downstream consumers must be assigned the &lt;STRONG&gt;Viewer &lt;/STRONG&gt;role in the workspace. This restricts their access to the defined endpoints (SQL Endpoint or Power BI App) where the security policies are evaluated under their Entra ID credentials, effectively blocking direct access to the unmasked storage files.&lt;/P&gt;&lt;H4&gt;Key Takeaways for Data Professionals&lt;/H4&gt;&lt;P&gt;Implementing "Shift-Left" data protection within Microsoft Fabric allows organizations to bridge the gap between high-performance analytics and governance requirements. By moving sanitization controls upstream and combining them with dynamic engine-level security, data teams can build a future-proof architecture that meets strict privacy mandates without sacrificing agility.&lt;/P&gt;&lt;P&gt;To successfully apply these principles in your enterprise, keep the following core takeaways in mind:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Security is an Architecture Feature, Not a Final Step: &lt;/STRONG&gt;Embed data protection requirements into your initial pipeline designs rather than treating them as an afterthought.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Protect at the Lowest Layer Possible:&amp;nbsp;&lt;/STRONG&gt;Hashing, tokenizing, and masking data early in the Medallion Architecture (Bronze-to-Silver transition) protects sensitive attributes across all downstream environments, including Notebooks, SQL queries, and Direct Lake Power BI reports.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Align Controls to the Right Layer: &lt;/STRONG&gt;Use OneLake security for raw storage, T-SQL CLS/RLS for the SQL Endpoint, and DAX OLS/RLS for Semantic Models.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Audit Workspace Roles: &lt;/STRONG&gt;Never rely on SQL or Semantic Model security for users who have Admin, Member, or Contributor access to the workspace.&lt;/LI&gt;&lt;/OL&gt;&lt;H5&gt;Join the Conversation!&lt;/H5&gt;&lt;P&gt;Designing enterprise-grade security in modern data platforms is an evolving practice, and different organizations adopt unique strategies depending on their regulatory environment.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;What additional techniques or governance frameworks do you implement in your organization to protect sensitive PII in Microsoft Fabric?&lt;/LI&gt;&lt;LI&gt;Are you primarily leveraging SQL-based CLS, or shifting toward OneLake data access roles?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Share your thoughts, experiences, or questions in the comments below!&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2026 18:40:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Privacy-by-Design-in-Fabric-Implementing-Shift-Left-Data/ba-p/5371264</guid>
      <dc:creator>VLopez03</dc:creator>
      <dc:date>2026-10-05T18:40:42Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Data Agent in M365</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Data-Agent-in-M365/ba-p/5372101</link>
      <description>&lt;ARTICLE&gt;
&lt;P&gt;In this short demo, I tested how a&amp;nbsp;&lt;STRONG&gt;Microsoft Fabric Data Agent&lt;/STRONG&gt; can be used through Microsoft Teams and Microsoft 365. I also showed how prompt wording can affect an answer when querying Green Trip data.&lt;/P&gt;
&lt;div data-video-id="https://www.youtube.com/watch?v=txtOQzdUfN0" data-video-remote-vid="https://www.youtube.com/watch?v=txtOQzdUfN0" class="lia-video-container lia-media-is-center lia-media-size-large"&gt;&lt;iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FtxtOQzdUfN0%3Ffeature%3Doembed&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DtxtOQzdUfN0&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FtxtOQzdUfN0%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&gt;&lt;STRONG&gt;Key Takeaways&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A Data Agent can be published for use in Microsoft 365.&lt;/LI&gt;
&lt;LI&gt;I accessed the published agent through Microsoft Teams.&lt;/LI&gt;
&lt;LI&gt;The sample agent used Green Trip data.&lt;/LI&gt;
&lt;LI&gt;An initial passenger question returned an answer I identified as incorrect.&lt;/LI&gt;
&lt;LI&gt;Refining the prompt produced the expected response in this scenario.&lt;/LI&gt;
&lt;LI&gt;Chat history remained available through the app.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 id="microsoft-fabric-data-agent-publishing-to-microsoft-365"&gt;Microsoft Fabric Data Agent publishing to Microsoft 365&lt;/H2&gt;
&lt;P&gt;I started with a Microsoft Fabric Data Agent that I had created earlier. When publishing it, I selected the option to publish it to Microsoft 365 as well.&lt;/P&gt;
&lt;P&gt;After publishing, I could view the agent details, including its URL and MCP information. This makes the Data Agent available beyond its original Fabric context.&lt;/P&gt;
&lt;P&gt;Next, I moved to Microsoft Teams. I could open the agent through the app, and I also showed an option to access it through the Microsoft 365 corporate area in Teams.&lt;/P&gt;
&lt;H3 id="opening-the-sample-agent-in-teams"&gt;Opening the sample agent in Teams&lt;/H3&gt;
&lt;P&gt;The agent in my demo was named &lt;STRONG&gt;Sample Data Agent&lt;/STRONG&gt; and was fed by Green Trip data. Once opened in Teams, I could ask questions directly in the chat interface.&lt;/P&gt;
&lt;P&gt;This demonstrates a practical Microsoft Fabric Data Agent in Teams workflow: publish the agent, open it through the Microsoft 365-connected experience, and interact with the available data through chat.&lt;/P&gt;
&lt;H2 id="microsoft-fabric-data-agent-prompt-refinement-in-teams"&gt;Microsoft Fabric Data Agent prompt refinement in Teams&lt;/H2&gt;
&lt;P&gt;I first asked for the highest number of passengers. The agent returned &lt;STRONG&gt;9 passengers&lt;/STRONG&gt;, while also showing the Fabric MCP activity behind the response.&lt;/P&gt;
&lt;P&gt;However, I knew that this result did not answer the question I intended to ask. The issue was the wording of my prompt, not a confirmed issue with the integration itself.&lt;/P&gt;
&lt;P&gt;I then refined the question to ask: &lt;STRONG&gt;Which year has the highest total passenger count?&lt;/STRONG&gt; The Data Agent MCP ran again in the background and returned the response I expected.&lt;/P&gt;
&lt;P&gt;This quick test shows why prompt specificity matters. Asking about the “highest number of passengers” can produce a different result than asking for the year with the highest total passenger count.&lt;/P&gt;
&lt;H3 id="what-this-demo-did-not-test"&gt;What this demo did not test&lt;/H3&gt;
&lt;P&gt;This was a short, single-scenario demonstration. I did not test multiple data sources, alternative permissions, or a wider set of questions. The specific year and passenger total returned by the refined prompt were not stated in the demo.&lt;/P&gt;
&lt;H2 id="can-microsoft-fabric-data-agent-chat-history-remain-available"&gt;Can Microsoft Fabric Data Agent chat history remain available?&lt;/H2&gt;
&lt;P&gt;Yes. In the app experience I showed, the chat history remained available. This allows me to revisit previous Data Agent conversations from the interface.&lt;/P&gt;
&lt;H2 id="frequently-asked-questions"&gt;Frequently Asked Questions&lt;/H2&gt;
&lt;H3 id="can-i-use-a-microsoft-fabric-data-agent-in-microsoft-teams"&gt;Can I use a Microsoft Fabric Data Agent in Microsoft Teams?&lt;/H3&gt;
&lt;P&gt;In this demo, yes. I published the Data Agent to Microsoft 365 and opened it through Microsoft Teams.&lt;/P&gt;
&lt;H3 id="why-did-the-first-passenger-question-return-an-incorrect-result"&gt;Why did the first passenger question return an incorrect result?&lt;/H3&gt;
&lt;P&gt;I identified that the first question was not specific enough for the answer I wanted. After I changed the prompt to ask about the year with the highest total passenger count, the agent returned the expected response.&lt;/P&gt;
&lt;H2 id="conclusion"&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;This Microsoft Fabric Data Agent demo showed a simple path from publishing to Microsoft 365 through asking questions in Teams. I also observed that clearer prompts can help the agent return a more relevant response for the intended question. If you use Data Agents with Microsoft 365, consider testing your prompts carefully and reviewing your chat history as you work.&lt;/P&gt;
&lt;/ARTICLE&gt;</description>
      <pubDate>Mon, 05 Oct 2026 16:16:26 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Data-Agent-in-M365/ba-p/5372101</guid>
      <dc:creator>uzuntasgokberk</dc:creator>
      <dc:date>2026-10-05T16:16:26Z</dc:date>
    </item>
    <item>
      <title>CDC vs Watermark: Choosing an Incremental Load Strategy in Microsoft Fabric</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/CDC-vs-Watermark-Choosing-an-Incremental-Load-Strategy-in/ba-p/5372140</link>
      <description>&lt;H2 data-lfile-container="0bb180ab-4ae3-4375-b7d5-5588bf42ee1a" data-pm-slice="1 1 []"&gt;Why incremental loading matters&lt;/H2&gt;
&lt;P&gt;If your source deletes rows or you need history, use CDC; if you only need inserts and updates and have a reliable "last modified" column, a watermark is simpler and works almost everywhere. That is the short answer. The rest of this post explains why.&lt;/P&gt;
&lt;P&gt;Reloading a whole table every night is fine at 50,000 rows. At 500 million it burns capacity units, hammers the source system, and stretches your refresh window. Incremental loading fixes this by moving only what changed since the last run.&lt;/P&gt;
&lt;P&gt;In Microsoft Fabric, the main tool for this is the &lt;STRONG&gt;Copy job&lt;/STRONG&gt; in Data Factory. It supports both change detection approaches side by side, and can pick one per table. Knowing how each works helps you choose well and avoid silent data gaps.&lt;/P&gt;
&lt;H2 data-lfile-container="0bb180ab-4ae3-4375-b7d5-5588bf42ee1a" data-pm-slice="1 1 []"&gt;The watermark pattern&lt;/H2&gt;
&lt;P&gt;A watermark load copies only rows whose "incremental column" value is higher than the highest value seen in the last successful run. The first run copies everything; each later run picks up where the last one stopped.&lt;/P&gt;
&lt;P&gt;The query behind it is simple:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT *
FROM dbo.Orders
WHERE ModifiedAt &amp;gt; @LastWatermark
  AND ModifiedAt &amp;lt;= @CurrentWatermark;&lt;/LI-CODE&gt;
&lt;P data-lfile-container="0bb180ab-4ae3-4375-b7d5-5588bf42ee1a" data-pm-slice="1 3 []"&gt;In a classic pipeline you build this yourself: a Lookup for the old watermark, a Copy activity, and a step that saves the new value to a control table. Copy job removes that plumbing. It stores the watermark state for you, and a failed run resumes from the last successful one without data loss (&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/incremental-copy-job" target="_blank"&gt;Microsoft Learn&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;Copy job accepts these column types as a watermark:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ROWVERSION&lt;/STRONG&gt; – changes automatically on every insert or update; the most reliable choice on SQL Server-family sources.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Datetime&lt;/STRONG&gt; – columns such as ModifiedAt or LastUpdatedDatetime.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Date&lt;/STRONG&gt; – date-only columns; Copy job re-reads the last day to avoid gaps.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;String&lt;/STRONG&gt; – values that can be read as datetimes.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Integer&lt;/STRONG&gt; – an increasing number.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;A column of another type can still work if you cast it to a supported type in the source query, as long as its values compare in order. File sources use the file's last-modified time as the watermark.&lt;/P&gt;
&lt;P&gt;The catch: a watermark only sees rows that still exist and whose column actually moved. &lt;STRONG&gt;Deleted rows are invisible&lt;/STRONG&gt;, and rows with a NULL watermark are skipped on every incremental run after the first.&lt;/P&gt;
&lt;H2&gt;Change data capture (CDC)&lt;/H2&gt;
&lt;P&gt;CDC reads the source database's own change log instead of querying the table, so it captures inserts, updates &lt;STRONG&gt;and deletes&lt;/STRONG&gt; exactly as they happened. You don't pick an incremental column; the database tells Fabric what changed.&lt;/P&gt;
&lt;P&gt;When a source table has CDC enabled, Copy job detects it, does an initial full load, and then replicates only changes on later runs (&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/cdc-copy-job" target="_blank"&gt;Microsoft Learn&lt;/A&gt;). Sources that support CDC in Copy job include Azure SQL Database, Azure SQL Managed Instance, on-premises SQL Server, Oracle, Snowflake, Google BigQuery, SAP Datasphere Outbound, and Fabric Lakehouse tables (via Delta Change Data Feed).&lt;/P&gt;
&lt;P&gt;You then choose how changes land in the destination:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SCD Type 1 (Merge)&lt;/STRONG&gt; – the default. The destination mirrors the current source: updates overwrite, deletes remove the row.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;SCD Type 2&lt;/STRONG&gt; – in preview. Copy job keeps every version, adding Valid_From, Valid_To and Is_Current columns. Deletes become soft deletes, so you keep a full audit trail with no custom code. Oracle sources don't support it yet.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Copy job isn't the only CDC route in Fabric. &lt;STRONG&gt;Mirroring&lt;/STRONG&gt; keeps a near real-time replica of an operational database in OneLake with almost no setup, and &lt;STRONG&gt;Eventstreams&lt;/STRONG&gt; offers CDC connectors for streaming changes into Real-Time Intelligence. Microsoft's &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-movement" target="_blank"&gt;data movement decision guide&lt;/A&gt; compares the three.&lt;/P&gt;
&lt;H2&gt;Side by side&lt;/H2&gt;
&lt;P&gt;The deciding row is usually deletes: only CDC sees them.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Consideration&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Watermark&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;CDC&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Source prerequisite&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;A column that always increases on insert or update&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;CDC enabled on the source and supported by the connector&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Inserts&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Updates&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Only if the watermark column changes&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Deletes&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;No&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;History (SCD Type 2)&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;No, unless you build it&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Built in (preview)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Write methods&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Append or Merge&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Merge or SCD Type 2&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Load on source&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Range scan on the watermark column each run&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Reads the change log; lighter on busy tables&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Setup effort&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Low; no DBA changes&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Needs CDC enabled, permissions, log retention&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Works with files&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Yes (last-modified time)&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;No&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Source coverage&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Most database connectors&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;A defined list of connectors&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Source: &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/incremental-copy-job" target="_blank"&gt;Incremental copy in Copy job&lt;/A&gt;, Microsoft Learn.&lt;/P&gt;
&lt;H2&gt;Which one should you use?&lt;/H2&gt;
&lt;P&gt;Three questions settle it for almost every table.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If CDC is the right answer but you can't enable it on the source, fall back to a watermark and catch deletes with soft-delete flags or a periodic key comparison.&lt;/P&gt;
&lt;H2&gt;Tips and pitfalls&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;For watermark loads&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Prefer ROWVERSION over app timestamps.&lt;/STRONG&gt; An application can forget to update ModifiedAt; the database never forgets a rowversion.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Watch for NULLs.&lt;/STRONG&gt; Rows inserted later with a NULL watermark are never picked up. Make the column NOT NULL with a default.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Catch deletes another way.&lt;/STRONG&gt; Use soft deletes (an IsDeleted flag that also bumps the watermark), or run a periodic key comparison against the source.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Use Merge, not Append, for updates.&lt;/STRONG&gt; Append writes a second copy of every updated row.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;For CDC loads&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Don't mix table types in one job.&lt;/STRONG&gt; If a Copy job holds both CDC-enabled and non-CDC tables, it falls back to watermark for all of them. Split them into separate jobs.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Size log retention.&lt;/STRONG&gt; If the job is paused longer than the source keeps its change data, you will need a full reload.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Know the current limits.&lt;/STRONG&gt; Copy job captures net changes only (not every intermediate change) and supports only the default capture instance. For Lakehouse sources, enable Change Data Feed yourself; Copy job can't detect it (&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/cdc-copy-job" target="_blank"&gt;Microsoft Learn&lt;/A&gt;).&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;For both&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Reset carefully.&lt;/STRONG&gt; Resetting incremental state forces a full read on the next run but doesn't clear the destination. With Append, truncate the target first or you'll get duplicates.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Plan for schema changes.&lt;/STRONG&gt; New source columns aren't synced automatically, and a dropped column that's in your column mapping fails the run.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;Watermark and CDC aren't rivals; most Fabric estates use both. Use a watermark for append-heavy fact tables, files, and sources you can't change. Use CDC wherever deletes or history matter, which is most dimension and master-data tables.&lt;/P&gt;
&lt;P&gt;Copy job makes the choice cheap to revisit: it detects CDC-enabled tables, handles state for you, and lets you reset per table. Start with the table that hurts most in your nightly full load, pick the method from the guide above, and measure the capacity you save.&lt;/P&gt;
&lt;H2&gt;Sources&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/incremental-copy-job" target="_blank"&gt;Incremental copy in Copy job&lt;/A&gt; – Microsoft Learn&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/cdc-copy-job" target="_blank"&gt;Change data capture (CDC) in Copy job&lt;/A&gt; – Microsoft Learn&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-movement" target="_blank"&gt;Choose a data movement strategy&lt;/A&gt; – Microsoft Learn&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://blog.fabric.microsoft.com/en-US/blog/simplifying-data-movement-across-multiple-clouds-with-copy-job-enhancements-on-incremental-copy-and-change-data-capture/" target="_blank"&gt;Copy job enhancements on incremental copy and CDC&lt;/A&gt; – Microsoft Fabric Blog&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Mon, 05 Oct 2026 16:15:09 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/CDC-vs-Watermark-Choosing-an-Incremental-Load-Strategy-in/ba-p/5372140</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-10-05T16:15:09Z</dc:date>
    </item>
    <item>
      <title>FabCon &amp; SQLCon 2026: The Ultimate Roundup of Announcements</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/FabCon-SQLCon-2026-The-Ultimate-Roundup-of-Announcements/ba-p/5372270</link>
      <description>&lt;P&gt;While I wasn’t able to catch the action live in Barcelona last week for &lt;STRONG&gt;FabCon and SQLCon 2026&lt;/STRONG&gt;, keeping tabs on the announcements has been a wild ride. Microsoft Fabric has officially cleared the 40,000-customer milestone and the event heavily emphasized &lt;STRONG&gt;Frontier Transformation&lt;/STRONG&gt; – moving past standard AI productivity hacks and embedding autonomous agents directly into corporate workflows.&lt;/P&gt;
&lt;P&gt;Yet, among all the flashy Copilot integrations and agentic apps, &lt;STRONG&gt;one specific announcement completely stole the show for me: the introduction of the F0 capacity tier with on-demand billing.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;For anyone who has ever wrestled with budget approvals just to test out a new data platform, this is a game-changer. Let’s dive into why F0 is my favorite takeaway, alongside a full roundup of everything else that dropped in Barcelona.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;1. My #1 Favorite: The F0 Capacity SKU &amp;amp; Pay-As-You-Go Billing&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Historically, dipping your toes into Microsoft Fabric meant committing upfront to a reserved compute tier (like an F2 or higher). If you just wanted to spin up a quick test environment, build a proof of concept, or play with OneLake shortcuts, you still had to navigate a monthly capacity bill.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; Microsoft introduced &lt;STRONG&gt;F0, a zero-provisioned capacity SKU featuring true on-demand billing&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Why it’s a massive deal:&lt;/STRONG&gt; It acts as the &lt;STRONG&gt;&lt;EM&gt;“serverless”&lt;/EM&gt;&lt;/STRONG&gt; equivalent for Fabric. You can now evaluate features, run lightweight development tasks and test out workloads without locking into an upfront monthly reservation. Compute costs finally align strictly to what actually runs, shattering the barrier to entry for smaller teams and developer sandboxes.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;2. Grounding Microsoft Copilot with Fabric IQ&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;AI tools often hallucinate because they lack proper context. Microsoft is tackling this by wiring business context directly into &lt;STRONG&gt;Microsoft Copilot&lt;/STRONG&gt;.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; &lt;STRONG&gt;Fabric IQ&lt;/STRONG&gt; is generally available as a shared intelligence bridge, connecting OneLake data, Power BI semantic models and operational metrics directly into Copilot Chat and Cowork – &lt;STRONG&gt;with zero additional AI token costs&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Why it matters:&lt;/STRONG&gt; Instead of guessing, your organization’s Copilot can answer business questions using the exact semantic data definitions your teams already trust and govern.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Check out &lt;A href="https://www.linkedin.com/in/arunulag/" target="_blank" rel="noopener"&gt;Arun Ulag’s&lt;/A&gt; keynote overview on the &lt;A href="https://azure.microsoft.com/en-us/blog/fabcon-and-sqlcon-2026-in-barcelona-building-the-data-foundation-for-microsoft-copilot-and-agents/" target="_blank" rel="noopener"&gt;official Microsoft Azure Blog&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;3. Power BI’s Evolution: Agentic App Creation&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Power BI is stepping past standard dashboards into operational application building.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; You can use natural language inside Power BI Desktop to build, preview and publish &lt;STRONG&gt;purpose-built data applications&lt;/STRONG&gt; straight from a trusted semantic model. These apps can handle inputs, write-back data and power workflows.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Why it matters:&lt;/STRONG&gt; Power BI Pro and Premium Per User (PPU) users will get access to Fabric Apps and Fabric Database capabilities (up to 1 GB per app) at &lt;STRONG&gt;no additional cost&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Dive into &lt;A href="https://www.linkedin.com/in/mohaali45/" target="_blank" rel="noopener"&gt;Mohammad Ali’s&lt;/A&gt; deep dive on &lt;A href="https://community.fabric.microsoft.com/blog/fbc_pbiupdatesblog/power-bi%E2%80%99s-next-chapter-the-evolution-of-business-intelligence/5369131" target="_blank" rel="noopener"&gt;Power BI’s next chapter: The evolution of business intelligence&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;4. Fast-Tracking Apps to Production with Fabric Apps &amp;amp; Rayfin&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Prototyping an app with AI is easy, but getting it to a secure production environment used to mean heavy lifting. &lt;STRONG&gt;Fabric Apps&lt;/STRONG&gt; solves this.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; Using the open-source &lt;STRONG&gt;Rayfin SDK and CLI&lt;/STRONG&gt;, developers can build app backends and deploy them directly to Fabric with built-in TypeScript functions, a Secret Store, PostgreSQL support and private-by-default security.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Why it matters:&lt;/STRONG&gt; Apps plug straight into existing Lakehouses and Warehouses without data duplication.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Catch &lt;A href="https://www.linkedin.com/in/spatney/" target="_blank" rel="noopener"&gt;Sachin Patney’s&lt;/A&gt; post, &lt;A href="http://aka.ms/Rayfin-FabConEU26-blog" target="_blank" rel="noopener"&gt;From prompt to production: What’s new in Fabric Apps&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;5. Expanding the OneLake Ecosystem &amp;amp; IQ Sharing&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; Microsoft rolled out &lt;STRONG&gt;IQ sharing (in preview)&lt;/STRONG&gt;, allowing organizations to securely share governed data, markdown agent instructions and ontologies across different teams, partners and external ecosystems.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Read &lt;A href="https://www.linkedin.com/in/diptiborkar/" target="_blank" rel="noopener"&gt;Dipti Borkar’s&lt;/A&gt; breakdown on &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabcon-and-sqlcon-barcelona-2026-what%E2%80%99s-new-in-microsoft-onelake-and-its-rapidly/5369146" target="_blank" rel="noopener"&gt;What’s new in Microsoft OneLake and its rapidly growing ecosystem&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;6. Autonomous Data Engineering Agents&lt;/STRONG&gt;&lt;/H4&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; Driven by technology from the Osmos acquisition, Microsoft introduced a preview of the &lt;STRONG&gt;Fabric data engineering agent&lt;/STRONG&gt;. Rather than just auto-completing code snippets, this agent handles complex, long-running engineering tasks like migrations, ETL pipeline creation and modernizations based on human guardrails.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Check out &lt;A href="https://www.linkedin.com/in/bogdanc/" target="_blank" rel="noopener"&gt;Bogdan Crivat’s&lt;/A&gt; blog on &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/bringing-governed-analytics-into-the-flow-of-work-fabric-analytics-at-fabcon-eur/5368918" target="_blank" rel="noopener"&gt;Bringing governed analytics into the flow of work: Fabric Analytics at FabCon Europe 2026.&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;7. SQLCon: Scale, Intelligence, and Serverless Pauses&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Running parallel to FabCon, SQLCon delivered major updates for database administrators balancing traditional relational databases with modern demands.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;What’s new:&lt;/STRONG&gt; A new &lt;STRONG&gt;Database Hub (Public Preview)&lt;/STRONG&gt; serves as a single pane of glass to monitor health and security across SQL Server, Azure SQL and PostgreSQL. Plus, &lt;STRONG&gt;DiskANN vector indexes&lt;/STRONG&gt; are now generally available to supercharge native semantic search using T-SQL.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Read more:&lt;/STRONG&gt; Read &lt;A href="https://www.linkedin.com/in/shireeshthota/" target="_blank" rel="noopener"&gt;Shireesh Thota’s&lt;/A&gt; update on &lt;A href="https://www.microsoft.com/en-us/sql-server/blog/2026/09/28/sqlcon-barcelona-2026-advancing-sql-with-greater-control-scale-and-intelligence/" target="_blank" rel="noopener"&gt;SQLCon Barcelona 2026: Advancing SQL with greater control, scale and intelligence.&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;Final Thoughts: Looking Ahead&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Reflecting on everything announced in Barcelona, it’s clear that Microsoft is moving faster than ever to bridge the gap between heavy-duty data engineering and practical, AI-driven applications. While agentic workflows and Copilot enhancements grab the headlines, structural updates like the &lt;STRONG&gt;F0 tier&lt;/STRONG&gt; are what truly make this ecosystem accessible to everyone from lone developers to enterprise architects.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Honestly, I am still trying to digest all these announcements made and also can’t wait to try them soon!&lt;/EM&gt; We are officially stepping into an era where building, scaling and operationalizing data isn’t just about managing tables – &lt;STRONG&gt;&lt;EM&gt;it’s about powering the intelligence layer that runs the business.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Are you as thrilled about the F0 capacity tier as I am? What feature from FabCon are you testing first? Let me know in the comments below!&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 05 Oct 2026 16:14:37 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/FabCon-SQLCon-2026-The-Ultimate-Roundup-of-Announcements/ba-p/5372270</guid>
      <dc:creator>Pragati11</dc:creator>
      <dc:date>2026-10-05T16:14:37Z</dc:date>
    </item>
    <item>
      <title>ADLS Gen2 and OneLake - Choosing the right storage approach</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/ADLS-Gen2-and-OneLake-Choosing-the-right-storage-approach/ba-p/5370495</link>
      <description>&lt;P&gt;As Microsoft Fabric adoption grows, a practical architecture question follows: how does OneLake relate to Azure Data Lake Storage Gen2 (ADLS Gen2), and do we need to migrate? Both store analytics data in open formats, but they offer different ways to manage and consume it. I would start with the workload and the investments already in place, rather than with a decision to move storage.&lt;/P&gt;&lt;P&gt;For an established lake, keeping ADLS Gen2 and exposing selected data to Fabric may be the simplest path. For a new Fabric-centric workload, storing data directly in OneLake may reduce operational work. The useful unit of decision is a layer or data product, not the entire estate.&lt;/P&gt;&lt;H1&gt;Start with the operating model&lt;/H1&gt;&lt;H2&gt;What ADLS Gen2 is designed for&lt;/H2&gt;&lt;P&gt;ADLS Gen2 brings analytics capabilities to Azure Blob Storage through a hierarchical namespace. In this PaaS model, Azure runs the storage service while your team manages accounts, containers, networking, lifecycle policies and access through Azure role-based access control and POSIX-style ACLs. It can hold any file format, giving teams flexibility to choose how different engines process the data.&lt;/P&gt;&lt;P&gt;That flexibility is valuable when ingestion pipelines and multiple analytics engines already share a lake. Azure Databricks, Azure Machine Learning and other compatible tools can work with the data where it is. The architectural responsibility sits with the team: bringing storage, processing, discovery and governance together into an operating platform.&lt;/P&gt;&lt;H2&gt;OneLake: Fabric-managed data lake&lt;/H2&gt;&lt;P&gt;Built on ADLS Gen2, OneLake is created automatically for a Fabric tenant. Microsoft manages the underlying storage infrastructure, while teams organize and secure data through workspaces and items such as Lakehouse’s. This SaaS model shifts the day-to-day focus from storage accounts to analytics data products. OneLake stores physical data and can also reference data elsewhere through shortcuts.&lt;/P&gt;&lt;P&gt;The benefit becomes tangible in the way Fabric workloads work together. Spark notebooks prepare Lakehouse data, SQL analytics experiences expose supported tables, and Power BI can consume suitable tables through Direct Lake. A Lakehouse’s Files area can hold any file format, while its Tables area serves supported table formats and engines, including Delta and supported Iceberg tables through metadata virtualization. Shared storage simplifies integration, while each engine still has its own supported capabilities.&lt;/P&gt;&lt;H2&gt;The architectural relationship&lt;/H2&gt;&lt;P&gt;The storage hierarchy is straightforward: tenant, workspace, then data item. Within a Lakehouse, Tables and Files support different consumption needs. Domains group workspaces for organizational ownership and governance, rather than adding a folder level to the storage path. A simple example is:&lt;/P&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;STRONG&gt;Scope&lt;/STRONG&gt;&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;&lt;STRONG&gt;Illustrative organization&lt;/STRONG&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Fabric tenant&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;OneLake namespace&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Workspace&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Reporting workspace containing a Sales Lakehouse&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Lakehouse Tables&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Local Delta tables, or a shortcut to supported Gold tables in ADLS Gen2&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Lakehouse Files&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Files and folders, including supported external shortcuts&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;H1&gt;What changes for analytics consumers&lt;/H1&gt;&lt;H2&gt;Shortcuts: Bring existing data into reach&lt;/H2&gt;&lt;P&gt;A plain shortcut references an internal or external storage location without requiring an ingestion copy. If curated Delta tables already live in ADLS Gen2, a supported Lakehouse Tables shortcut can make them available to Fabric consumers. Files shortcuts expose files instead; making those files into queryable tables is a separate step. This provides an incremental adoption path, although downstream workloads may still cache or materialize data.&lt;/P&gt;&lt;P&gt;The access design deserves as much attention as the data path. An ADLS shortcut uses the source connection’s configured credentials alongside Fabric permission checks. It does not automatically carry each reader’s source ACLs into Fabric. Before sharing it, I would check least privilege, network reachability and table compatibility with the identities and workloads that will use it.&lt;/P&gt;&lt;P&gt;Shortcut transformations address a different need: preparing data for consumption. Supported CSV, Parquet and JSON transformations use Fabric Spark to copy and convert source content into managed Delta output and keep it synchronized. That can simplify preparation, but it introduces compute, output storage and synchronization to operate. Choose a plain shortcut when referencing the existing data is enough; choose a transformation when the output itself adds value.&lt;/P&gt;&lt;H2&gt;Direct Lake: Simplify the BI data path&lt;/H2&gt;&lt;P&gt;Direct Lake loads requested Delta-table columns into VertiPaq memory without requiring a full Import-mode refresh. Metadata refresh, also called framing, still determines the data version available to the model. The practical benefit is a simpler BI data path for suitable workloads. Capacity, table optimization, security and model design still determine performance and freshness.&lt;/P&gt;&lt;P&gt;The underlying Delta data can remain in ADLS Gen2 when exposed through a supported OneLake Tables shortcut. That is the bridge to Direct Lake, rather than a direct connection from the semantic model to an ADLS path. I would assess the intended Direct Lake mode and security design, then test representative queries and freshness requirements before making performance commitments.&lt;/P&gt;&lt;H2&gt;Governance: Discovery and enforcement both matter&lt;/H2&gt;&lt;P&gt;Governance needs both business context and effective access control. ADLS Gen2 can use Microsoft Purview for discovery and governance alongside its storage permissions. In Fabric, the OneLake catalog brings discovery, metadata, lineage and endorsement into the analytics experience, while workspaces and items provide ownership context. Those capabilities help people find and understand data; the permissions on the actual access path determine who can use it.&lt;/P&gt;&lt;P&gt;I would compare security and lifecycle requirements against the specific design, rather than assume one platform always offers more control. Fabric supports tenant- and workspace-level private links and customer-managed keys with supported-item constraints. OneLake also supports lifecycle policies and hot, cool and cold tiers. The decision turns on whether the required workload, connector, encryption and network configuration work together, not simply whether a feature appears on a checklist.&lt;/P&gt;&lt;H2&gt;AI readiness starts with usable data&lt;/H2&gt;&lt;P&gt;Both approaches can support AI. ADLS Gen2 is a supported Azure Machine Learning datastore, so an established lake may already be a sound foundation. Fabric adds integrated preparation and consumption options that can be useful without relocating that lake. My starting question would be which capability the team needs and where the data is already well governed.&lt;/P&gt;&lt;P&gt;For example, AI-powered shortcut transformations can turn supported .txt files into Delta output containing summaries, translations, sentiment, redacted PII or extracted entities. A team could summarize eligible text sourced from ADLS and analyze the results in Fabric. This capability is in public preview, with regional and capacity requirements. Output quality and sensitive-data handling still need evaluation; automated redaction alone cannot establish compliance.&lt;/P&gt;&lt;H2&gt;Interoperability depends on the integration path&lt;/H2&gt;&lt;P&gt;Snowflake illustrates why the integration path matters. Fabric Mirroring can replicate Snowflake-managed table data into OneLake. For Iceberg tables in supported object storage, shortcuts and metadata virtualization provide another route; the Snowflake Iceberg mirroring path uses metadata mirroring and storage shortcuts. These are different architectural choices, with different implications for copies, freshness and ownership.&lt;/P&gt;&lt;P&gt;Snowflake on Azure can also write Iceberg tables to OneLake in supported configurations. That integration requires public connectivity, does not support private-link workspaces, and has same-region prerequisites for writes. Azure Databricks can read and write OneLake through authenticated ABFS paths, with compute and authentication requirements. Open formats help, but the chosen engine and network design still need to fit the supported integration.&lt;/P&gt;&lt;H1&gt;Make the choice layer by layer&lt;/H1&gt;&lt;H2&gt;An existing Databricks lake: should Bronze and Silver move?&lt;/H2&gt;&lt;P&gt;Consider a team with reliable Azure Databricks pipelines and Bronze, Silver and Gold layers in ADLS Gen2 that now wants Fabric reporting. My recommendation would be to keep the working Bronze and Silver layers unless there is a separate business or technical reason to move them. For Gold, there are two useful starting points.&lt;/P&gt;&lt;P&gt;Keep physical Gold in ADLS Gen2 and expose supported Delta tables through Lakehouse Tables shortcuts. Gold becomes available in Fabric without physical move. I would start here when existing storage contracts, authoritative writers and non-Fabric consumers need to remain intact.&lt;/P&gt;&lt;P&gt;Alternatively, write or materialize selected Gold data directly in OneLake when Fabric ownership or service-level requirements justify changing the pipeline. Databricks can support this pattern through authenticated ABFS access with the appropriate compute configuration. Moving selected Gold products can be a focused decision, independent of any future Bronze or Silver migration.&lt;/P&gt;&lt;P&gt;For either pattern, agree on the authoritative writer, table compatibility, effective permissions, freshness targets, monitoring and total cost. A storage shortcut does not transfer Unity Catalog authorization, so test the security model with representative readers. These responsibilities matter more than whether the diagram shows one lake or two.&lt;/P&gt;&lt;H3&gt;Count the governance and semantic-model work&lt;/H3&gt;&lt;P&gt;I would also count the work above storage. A team may maintain security rules and semantic logic in Databricks, then recreate them for Fabric reporting. Repeating policies, metrics, relationships and business definitions creates maintenance and testing work, with a risk of drift whenever requirements change. Reducing that duplication can be a stronger reason to adopt a shared consumption layer than saving a data copy.&lt;/P&gt;&lt;P&gt;A useful pattern is to use Databricks for data preparation, make governed Gold data available through OneLake, and use Fabric as the shared consumption layer. &lt;A class="lia-external-url" href="https://learn.microsoft.com/en-us/fabric/onelake/security/data-access-control-model" target="_blank"&gt;OneLake security&lt;/A&gt; can centralize data-access policies across supported Fabric engines and access paths. Separately, a deliberately shared Power BI semantic model lets reports and compatible clients reuse measures, relationships and business definitions instead of rebuilding them. These are two distinct opportunities to reduce downstream work: common access control and an explicitly reusable semantic layer, not benefits that storage alone creates.&lt;/P&gt;&lt;P&gt;That semantic model reuse does not require moving your Gold layer: supported shortcuts can expose ADLS data, and shared Power BI models can also use other supported sources. OneLake does not automatically unify Unity Catalog policies nor give every Databricks or Spark workload the same semantic layer. Where Unity Catalog remains authoritative, I would evaluate supported integrations and ask: where are policies and metrics defined, which engine enforces them under which identity, which consumers reuse the model, and who maintains and tests necessary differences?&lt;/P&gt;&lt;H2&gt;A practical guide&lt;/H2&gt;&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;&lt;STRONG&gt;Your situation&lt;/STRONG&gt;&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;&lt;STRONG&gt;Starting point&lt;/STRONG&gt;&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;&lt;STRONG&gt;What to validate&lt;/STRONG&gt;&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Successful multi-engine lake; established account/API dependencies&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Keep ADLS Gen2 as an authoritative store&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Existing contracts, source security and the specific Fabric access path&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;New Fabric-centric analytics and shared Fabric items&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Use native OneLake storage&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Ownership, supported workloads, capacity, security and lifecycle requirements&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;Mixed estate; selective Fabric adoption or duplicated governance and model logic&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Combine ADLS Gen2 and OneLake; assess a shared consumption layer&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;See the mixed-estate checklist below.&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;P&gt;A required security or storage feature determines the design&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Compare the exact supported configurations&lt;/P&gt;&lt;/td&gt;&lt;td&gt;&lt;P&gt;Connector and workload limits, private networking, CMK item coverage, retention and total cost&lt;/P&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;&lt;H3&gt;For a mixed estate, validate:&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Data access:&lt;/STRONG&gt; shortcut compatibility versus materialization.&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Write ownership&lt;/STRONG&gt;: the authoritative writer.&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Operations:&lt;/STRONG&gt; freshness targets and monitoring.&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Security&lt;/STRONG&gt;: effective identities and policy enforcement.&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Semantics&lt;/STRONG&gt;: reuse of a shared semantic model.&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV class="lia-align-left"&gt;&lt;STRONG&gt;Governance ownership:&lt;/STRONG&gt; who maintains and tests necessary cross-platform differences.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H2&gt;Coexistence as a practical starting point&lt;/H2&gt;&lt;P&gt;Use ADLS Gen2 where its customer-managed storage model and existing integrations serve the workload well. Use native OneLake where Fabric’s managed model and shared analytics experiences provide a clear benefit. For an existing estate adopting Fabric, I would usually start by connecting the two and move data only where the benefit is clear. Coexistence can be a transition or a lasting design; consolidation should earn its place through workload requirements and measurable value.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Sep 2026 13:45:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/ADLS-Gen2-and-OneLake-Choosing-the-right-storage-approach/ba-p/5370495</guid>
      <dc:creator>PrabhKaur</dc:creator>
      <dc:date>2026-09-30T13:45:53Z</dc:date>
    </item>
    <item>
      <title>Testing Fabric Runtime 2.0 Before It Becomes the Default</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Testing-Fabric-Runtime-2-0-Before-It-Becomes-the-Default/ba-p/5369583</link>
      <description>&lt;H2&gt;&lt;STRONG&gt;Why you should test this week, not next month&lt;BR /&gt;&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;Runtime 2.0 has been GA since August, but it is still opt-in. According to the Runtime 2.0 docs, Microsoft plans to make it the default for new workspaces and new Environment items in late September 2026. That is right now.&lt;/P&gt;
&lt;P&gt;At the same time, Runtime 1.3 (Spark 3.5) is listed with an end-of-support date of 30 September 2026. It moves into Long Term Support from 1 October for six months, through March 2027 (lifecycle page). So you have a runway, but it is not long.&lt;/P&gt;
&lt;P&gt;In my trainings, the question I get most is: "Will my notebooks break when this flips?" My honest answer: most will run fine, a few will fail loudly, and a small number will return different results without failing. That last group is the reason to test. This post walks through the exact method I use to test in isolation, without touching production.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What you need:&lt;/STRONG&gt; a Fabric capacity (F2 or trial is fine), Contributor or higher on a workspace, and 30–45 minutes.&lt;/P&gt;
&lt;H2&gt;What actually changes between 1.3 and 2.0&lt;/H2&gt;
&lt;P&gt;Every core component moves a major or minor version. Versions below are from the official Runtime 1.3 and &lt;A href="https://learn.microsoft.com/fabric/data-engineering/runtime-2-0" target="_blank" rel="noopener"&gt;Runtime 2.0&lt;/A&gt; pages.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Component&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Runtime 1.3&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Runtime 2.0&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;What to watch&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Apache Spark&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;3.5&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4.1&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;ANSI SQL mode is on by default in Spark 4&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Delta Lake&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;3.2&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4.2&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;New 4.x table features can break reads from other Fabric engines&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Python&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;3.11&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;3.13&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Pinned pip packages may have no 3.13 wheel&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Java&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;11&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;21&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Custom JARs built for old JDKs&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Scala&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;2.12.17&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;2.13&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Any Scala JAR compiled for 2.12 will not load&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;OS&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Azure Linux 2.0&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Azure Linux 3.0&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Native libraries in custom packages&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;R&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4.4.1&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;4.5.2&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;SparkR is deprecated in Spark 4.x&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;col style="width: 25.00%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The four areas that cause real trouble in my experience:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;ANSI mode.&lt;/STRONG&gt; In Spark 3.5, CAST('abc' AS INT) quietly returns NULL. In Spark 4.x it throws an error. The same applies to integer overflow and invalid dates. Pipelines that relied on silent nulls now fail, which is actually good, but you need to know before a 2 a.m. run does.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Scala 2.13 / Java 21.&lt;/STRONG&gt; If your Environment has custom JARs, they must be rebuilt. There is no workaround.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Python library pins.&lt;/STRONG&gt; A requirements.txt or Environment library list pinned for Python 3.11 is the most common failure at publish time.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Delta 4.x features.&lt;/STRONG&gt; The docs are explicit: Delta Lake 4.x-specific features are experimental and only work in Spark experiences. If the SQL analytics endpoint, Power BI Direct Lake or the Warehouse read the same table, do not enable them. Check &lt;A href="https://learn.microsoft.com/fabric/fundamentals/delta-lake-interoperability" target="_blank" rel="noopener"&gt;Delta Lake interoperability&lt;/A&gt; first.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The good news: Runtime 2.0 ships with the Native Execution Engine, which Microsoft benchmarks at up to 6x faster than open-source Spark on TPC-DS, with no code change.&lt;/P&gt;
&lt;H2&gt;The safe test method: a side-by-side Environment&lt;/H2&gt;
&lt;P&gt;The trick is simple. &lt;STRONG&gt;Never change the runtime at workspace level first.&lt;/STRONG&gt; An Environment item pinned to 2.0 overrides the workspace default, but only for the notebooks you attach to it. Production keeps running on 1.3 while you test the same code on 2.0.&lt;/P&gt;
&lt;H3&gt;Step 1: Create a test workspace&lt;/H3&gt;
&lt;P&gt;Create a workspace such as WS-Runtime2-Test on the same capacity. If your production workspace is Git-connected, branch out to it, or simply export the 3–5 notebooks that matter most. Add a shortcut to the production lakehouse tables you read from, so you test against real data without copying it.&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;Step 2: Create two Environment items&lt;/H3&gt;
&lt;P&gt;Create env_rt13 and env_rt20 in the test workspace. Two environments, same libraries, only the runtime differs. That is what makes the comparison fair.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;New item → Environment&lt;/STRONG&gt;, name it env_rt20.&lt;/LI&gt;
&lt;LI&gt;In the &lt;STRONG&gt;Runtime&lt;/STRONG&gt; dropdown, select &lt;STRONG&gt;2.0 (Spark 4.1, Delta 4.2)&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Under &lt;STRONG&gt;Spark compute → Acceleration&lt;/STRONG&gt;, turn on &lt;STRONG&gt;Native Execution Engine&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;Copy your production library list into &lt;STRONG&gt;Public libraries&lt;/STRONG&gt; (and custom JARs/wheels if you use them).&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Save&lt;/STRONG&gt;, then &lt;STRONG&gt;Publish&lt;/STRONG&gt;. Publishing is where library conflicts surface, so watch this step.&lt;/LI&gt;
&lt;LI&gt;Repeat for env_rt13 with &lt;STRONG&gt;1.3 (Spark 3.5, Delta 3.2)&lt;/STRONG&gt; and the same libraries.&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;&lt;img /&gt;&lt;img /&gt;
&lt;H3&gt;Step 3: Attach and run&lt;/H3&gt;
&lt;P&gt;Open a copy of each notebook, and in the environment dropdown on the notebook ribbon, pick env_rt20. Run it. Then run the same notebook attached to env_rt13. A Spark job definition works the same way through its settings.&lt;/P&gt;
&lt;H3&gt;Optional: the early access release channel&lt;/H3&gt;
&lt;P&gt;There is a second mechanism worth knowing about for later. &lt;A href="https://learn.microsoft.com/fabric/data-engineering/release-channels" target="_blank" rel="noopener"&gt;Release channels&lt;/A&gt; (preview) let you test the &lt;EM&gt;next&lt;/EM&gt; set of updates within a runtime before they become default. You set it in the Environment's Spark properties:&lt;/P&gt;
&lt;P&gt;spark.fabric.pools.skipStarterPools=true spark.computeConf.runtime.releaseChannel=earlyAccess&lt;/P&gt;
&lt;P&gt;Early access does not use the Starter Pool, so session start is slower, and the setting is fixed for the lifetime of a session. Billing is the same. Use it after your 2.0 migration to catch library updates early.&lt;/P&gt;
&lt;H2&gt;The test notebook I use in class&lt;/H2&gt;
&lt;P&gt;Four cells. Run the whole notebook once on env_rt13 and once on env_rt20. It takes about 10 minutes, most of it session start.&lt;/P&gt;
&lt;H3&gt;Cell 1: Prove which runtime you are on&lt;/H3&gt;
&lt;P&gt;Don't trust the dropdown; print it. This also gives you the VHD image name that support will ask for if you raise a ticket.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;import sys from importlib.metadata import version, PackageNotFoundError jvm = spark.sparkContext._jvm def pkg(name): try: return version(name) except PackageNotFoundError: return "not installed" info = { "spark": spark.version, "python": sys.version.split()[0], "java": jvm.System.getProperty("java.version"), "scala": jvm.scala.util.Properties.versionNumberString(), "pandas": pkg("pandas"), "native engine": spark.conf.get("spark.native.enabled", "not set"), "ansi mode": spark.conf.get("spark.sql.ansi.enabled"), "vhd image": spark.conf.get("spark.synapse.vhd.name", ""), } for k, v in info.items(): print(f"{k:&amp;lt;15} {v}")&lt;/LI-CODE&gt;&lt;img /&gt;&lt;img /&gt;
&lt;H3 data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;Cell 2: The ANSI probe&lt;/H3&gt;
&lt;P&gt;This is the cell that makes the room go quiet in a workshop. Same SQL, different behaviour.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;probes = { "bad cast": "SELECT CAST('abc' AS INT) AS v", "int overflow": "SELECT CAST(2147483647 AS INT) + 1 AS v", "bad date": "SELECT CAST('2026-02-30' AS DATE) AS v", "div by zero": "SELECT 1/0 AS v", } for name, sql in probes.items(): try: print(f"{name:&amp;lt;13} -&amp;gt; {spark.sql(sql).first()['v']}") except Exception as e: print(f"{name:&amp;lt;13} -&amp;gt; ERROR: {type(e).__name__}")&lt;/LI-CODE&gt;
&lt;P data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;On 1.3 you get None, -2147483648, None, None. Four silent problems. On 2.0 with default settings, all four raise errors. Now search your code for CAST(, arithmetic on IDs and date parsing from strings.&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;H3 data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;Cell 3: Regression check on your real logic&lt;/H3&gt;
&lt;P&gt;Paste one production transformation, write the result from each runtime, and compare row by row.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;tag = "rt20" if spark.version.startswith("4") else "rt13" result_df = spark.sql(""" -- paste one real production query here SELECT ... """) result_df.write.mode("overwrite").format("delta").saveAsTable(f"regress_{tag}")&lt;/LI-CODE&gt;
&lt;P data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;After both runs, compare from either environment:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;a = spark.table("regress_rt13") b = spark.table("regress_rt20") print("row counts :", a.count(), b.count()) print("only in 1.3 :", a.exceptAll(b).count()) print("only in 2.0 :", b.exceptAll(a).count())&lt;/LI-CODE&gt;
&lt;P data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;Zero and zero is what you want. If you get differences on float columns, round them before comparing; tiny floating point drift is not a bug.&lt;/P&gt;
&lt;H3&gt;Cell 4: Make sure other engines can still read the table&lt;/H3&gt;
&lt;P&gt;A table written from Runtime 2.0 must stay readable by the SQL analytics endpoint and Direct Lake. Check the protocol:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;(spark.sql("DESCRIBE DETAIL regress_rt20") .select("minReaderVersion", "minWriterVersion", "tableFeatures") .show(truncate=False))&lt;/LI-CODE&gt;
&lt;P&gt;Compare it with regress_rt13. They should match. Then open the lakehouse's SQL analytics endpoint and run SELECT TOP 10 * FROM regress_rt20. If that works, your downstream reports are safe.&lt;/P&gt;
&lt;P data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 1 []"&gt;Finally, note the duration of each run from the &lt;STRONG&gt;Monitor&lt;/STRONG&gt; hub. With the Native Execution Engine on, 2.0 is often faster, but measure it on your workload rather than quoting benchmarks.&lt;/P&gt;
&lt;H2 data-lfile-container="ebd65083-8a87-4d85-8e8a-c70eb5058de7" data-pm-slice="1 3 []"&gt;Fixes, rollout plan and checklist&lt;/H2&gt;
&lt;P&gt;These are the fixes I reach for when the test fails.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Symptom&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Likely cause&lt;/P&gt;
&lt;/th&gt;&lt;th colspan="1" rowspan="1"&gt;
&lt;P&gt;Fix&lt;/P&gt;
&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Environment publish fails&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Library pinned for Python 3.11&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Upgrade the pin to a version with a 3.13 wheel, or remove the pin&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;NoClassDefFoundError / scala. errors&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;JAR compiled for Scala 2.12&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Rebuild the JAR for Scala 2.13 and Java 21&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;CAST_INVALID_INPUT, ARITHMETIC_OVERFLOW, DIVIDE_BY_ZERO&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;ANSI mode&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Use try_cast, try_divide, try_add; clean the input&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;SQL endpoint can't read a table&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Delta 4.x feature enabled on a shared table&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Don't enable 4.x-only features on tables other engines read&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Results differ, no error&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Changed default behaviour&lt;/P&gt;
&lt;/td&gt;&lt;td colspan="1" rowspan="1"&gt;
&lt;P&gt;Diff with Cell 3, then read the &lt;A href="https://spark.apache.org/docs/latest/sql-migration-guide.html" target="_blank" rel="noopener"&gt;Spark SQL migration guide&lt;/A&gt;&lt;/P&gt;
&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;P&gt;On ANSI mode: you &lt;EM&gt;can&lt;/EM&gt; set spark.sql.ansi.enabled=false in the Environment to get the old behaviour back. I use it only as a temporary bridge, never as the fix. Silent nulls are exactly the data quality issue ANSI mode exists to catch.&lt;/P&gt;
&lt;H3&gt;My rollout plan&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;test workspace, two Environments, run the four cells on your top 5 notebooks.&lt;/LI&gt;
&lt;LI&gt;fix libraries and ANSI failures; rerun until Cell 3 shows zero differences.&lt;/LI&gt;
&lt;LI&gt;attach env_rt20 to production notebooks one pipeline at a time. Keep env_rt13 so rollback is one dropdown change.&lt;/LI&gt;
&lt;LI&gt;once everything runs on 2.0, change the workspace default in &lt;STRONG&gt;Workspace settings → Data Engineering/Science → Spark settings → Environment → Runtime version&lt;/STRONG&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Before March 2027:&lt;/STRONG&gt; nothing left on 1.3 when LTS ends.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Checklist&lt;/H3&gt;
&lt;UL data-kind="check"&gt;
&lt;LI data-checked="false"&gt;Test workspace created, production untouched&lt;/LI&gt;
&lt;LI data-checked="false"&gt;env_rt13 and env_rt20 published with identical libraries&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Cell 1 confirms Spark 4.1 / Python 3.13 / Java 21&lt;/LI&gt;
&lt;LI data-checked="false"&gt;ANSI probe run and code searched for risky casts&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Cell 3 regression shows zero differences&lt;/LI&gt;
&lt;LI data-checked="false"&gt;SQL analytics endpoint reads tables written by 2.0&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Custom JARs rebuilt for Scala 2.13&lt;/LI&gt;
&lt;LI data-checked="false"&gt;Workspace default switched last&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If you do only one thing from this post, run Cell 2 on your busiest notebook today.&lt;/P&gt;
&lt;H2&gt;Sources&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/fabric/data-engineering/runtime-2-0" target="_blank" rel="noopener"&gt;Runtime 2.0 in Fabric&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/fabric/data-engineering/runtime-1-3" target="_blank" rel="noopener"&gt;Runtime 1.3 in Fabric&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/fabric/data-engineering/lifecycle" target="_blank" rel="noopener"&gt;Lifecycle of Apache Spark runtimes in Fabric&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/fabric/data-engineering/release-channels" target="_blank" rel="noopener"&gt;Fabric runtime release channels (preview)&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/fabric/fundamentals/delta-lake-interoperability" target="_blank" rel="noopener"&gt;Delta Lake table format interoperability&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/synapse-spark-runtime" target="_blank" rel="noopener"&gt;Spark Runtime releases and updates (GitHub)&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 29 Sep 2026 14:40:03 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Testing-Fabric-Runtime-2-0-Before-It-Becomes-the-Default/ba-p/5369583</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-29T14:40:03Z</dc:date>
    </item>
    <item>
      <title>Microsoft Fabric Data Agents: Setup, Testing, and Publishing</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Data-Agents-Setup-Testing-and-Publishing/ba-p/5369498</link>
      <description>&lt;ARTICLE&gt;
&lt;P&gt;&lt;SPAN style="color: rgb(50, 49, 48);"&gt;In this walkthrough, I configured&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG style="color: rgb(50, 49, 48);"&gt;Microsoft Fabric Data Agents&lt;/STRONG&gt;&lt;SPAN style="color: rgb(50, 49, 48);"&gt; to answer questions against business data using natural-language prompts. The focus was on selecting data sources, guiding agent behavior with instructions and example queries, testing responses, and publishing the completed agent.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;EM&gt;&lt;STRONG&gt;You can watch the video in English with English subtitles. Please check the subtitle settings on YouTube.&lt;/STRONG&gt;&lt;/EM&gt;&lt;/U&gt;&lt;/P&gt;
&lt;div data-video-id="https://www.youtube.com/watch?v=xihJZR97r5s" data-video-remote-vid="https://www.youtube.com/watch?v=xihJZR97r5s" class="lia-video-container lia-media-is-center lia-media-size-large"&gt;&lt;iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FxihJZR97r5s%3Ffeature%3Doembed&amp;amp;display_name=YouTube&amp;amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxihJZR97r5s&amp;amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxihJZR97r5s%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&gt;A data agent can be useful when company data is distributed across different sources and users need more consistent answers to recurring questions, such as questions based on sales data.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Key Takeaways&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;I added data sources such as Eventhouse, Semantic Models, and Lakehouses to a Fabric Data Agent.&lt;/LI&gt;
&lt;LI&gt;I selected the tables the agent could read and observed a consistency warning when selecting more tables.&lt;/LI&gt;
&lt;LI&gt;The agent translated natural-language questions into the query language appropriate for the connected source.&lt;/LI&gt;
&lt;LI&gt;I used data source interactions, example queries, and agent instructions to influence responses.&lt;/LI&gt;
&lt;LI&gt;I tested custom instructions before publishing the agent.&lt;/LI&gt;
&lt;LI&gt;I also showed a Power BI Copilot scenario where a Data Agent could be referenced without opening the agent directly.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H2 id="what-i-configured-in-microsoft-fabric-data-agents"&gt;What I Configured in Microsoft Fabric Data Agents&lt;/H2&gt;
&lt;P&gt;I started in a workspace with a Fabric license and opened a Data Agent I had previously created as an example. The interface shown at the beginning was the interface from an earlier video, before I later shared a short excerpt of updates.&lt;/P&gt;
&lt;P&gt;The first important step was opening the &lt;STRONG&gt;Data Source&lt;/STRONG&gt; option. From there, I could add an &lt;STRONG&gt;Eventhouse&lt;/STRONG&gt;, &lt;STRONG&gt;Semantic Models&lt;/STRONG&gt;, or a &lt;STRONG&gt;Lakehouse&lt;/STRONG&gt;. In my example, I added four Lakehouses.&lt;/P&gt;
&lt;P&gt;After adding the sources, I selected the tables that I wanted the Data Agent to read. When I selected more tables, the agent displayed a warning that results might not be consistent. This is an important configuration point: expanding the number of available tables can give the agent more data to work with, but the interface warns that consistency may be affected.&lt;/P&gt;
&lt;P&gt;Once the sources were available, I could either start with sample questions or enter my own prompt. The purpose was to ask questions in natural language and receive an answer based on the selected business data.&lt;/P&gt;
&lt;H2 id="how-microsoft-fabric-data-agents-translate-questions"&gt;How Microsoft Fabric Data Agents Translate Questions&lt;/H2&gt;
&lt;P&gt;One of the key behaviors I demonstrated was how &lt;STRONG&gt;Microsoft Fabric Data Agents&lt;/STRONG&gt; convert a natural-language request into a query language that matches the connected data source.&lt;/P&gt;
&lt;P&gt;For the sources discussed in the video, the agent uses different query approaches:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Eventhouse:&lt;/STRONG&gt; KQL&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Semantic Models:&lt;/STRONG&gt; DAX&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lakehouse or Warehouse:&lt;/STRONG&gt; SQL&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This means I could begin with a plain-language prompt while the Data Agent generated the source-specific query needed to retrieve a response. The exact query language depends on the type of data source attached to the agent.&lt;/P&gt;
&lt;H2 id="using-data-source-interactions-and-example-queries"&gt;Using Data Source Interactions and Example Queries&lt;/H2&gt;
&lt;P&gt;Next, I moved into the configuration areas that help shape how a Data Agent responds. In the &lt;STRONG&gt;Data Source Interactions&lt;/STRONG&gt; section, I entered instructions related to a specific data source. This was where I could provide guidance on how the agent should work with that source.&lt;/P&gt;
&lt;P&gt;I also used &lt;STRONG&gt;Example Queries&lt;/STRONG&gt;, which are sample questions connected to a desired query behavior. My goal was to ensure that, when a particular question was asked, the specified SQL query would run consistently.&lt;/P&gt;
&lt;P&gt;I compared this behavior to the &lt;STRONG&gt;Verified Answers&lt;/STRONG&gt; concept for a Power BI visual. In this scenario, the sample question acts as a controlled way to steer the agent toward the expected query and output.&lt;/P&gt;
&lt;P&gt;The available setup differs by source type:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;For a &lt;STRONG&gt;Lakehouse&lt;/STRONG&gt; or &lt;STRONG&gt;Warehouse&lt;/STRONG&gt;, SQL appears in this configuration flow.&lt;/LI&gt;
&lt;LI&gt;For an &lt;STRONG&gt;Eventhouse&lt;/STRONG&gt;, the agent responds through KQL.&lt;/LI&gt;
&lt;LI&gt;For the Power BI side, I mentioned preparing the data for AI so that the Data Agent can automatically detect it.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;This is where example queries can be useful for recurring business questions. Rather than relying only on an open-ended prompt, I can add known questions and define the behavior I want for them.&lt;/P&gt;
&lt;H2 id="testing-agent-instructions-before-publishing"&gt;Testing Agent Instructions Before Publishing&lt;/H2&gt;
&lt;P&gt;In addition to source-level settings, I configured &lt;STRONG&gt;Agent Instructions&lt;/STRONG&gt;. These are broader instructions that tell the agent how to approach its responses.&lt;/P&gt;
&lt;P&gt;To test this behavior, I added a simple instruction asking the agent to always address me as “boss.” I then entered a sample prompt into the agent. In this test, the response included the requested word while also returning an answer based on the prompt.&lt;/P&gt;
&lt;P&gt;I entered another prompt that matched one of the example queries I had written. The agent used that example-query path and returned the output in the same format as the sample query. I repeated this with another example to check whether the configured behavior appeared consistently in these tests.&lt;/P&gt;
&lt;P&gt;This was a short functional check rather than a comprehensive evaluation. I tested the instruction and example-query behavior shown in the agent interface, but I did not cover broader accuracy measurement, performance testing, or governance controls.&lt;/P&gt;
&lt;H2 id="publishing-a-microsoft-fabric-data-agent"&gt;Publishing a Microsoft Fabric Data Agent&lt;/H2&gt;
&lt;P&gt;After I was satisfied with the agent, I selected &lt;STRONG&gt;Publish&lt;/STRONG&gt;. Before publishing, I could add a description to help explain what the Data Agent was for.&lt;/P&gt;
&lt;P&gt;Once published, the interface displayed the implementation and output for the agent. Publishing is the point where the configured Data Agent becomes ready to use beyond the editing and test flow I demonstrated.&lt;/P&gt;
&lt;P&gt;I also included a short September 2026 excerpt showing an updated agent experience. In that excerpt, I showed options to view existing data sources through &lt;STRONG&gt;Add Data&lt;/STRONG&gt;, add tools, and work with visualizations. I also mentioned a capability that can help generate instructions more quickly, rather than manually writing every example query, data-source instruction, and agent instruction.&lt;/P&gt;
&lt;P&gt;The updated experience also included a &lt;STRONG&gt;Test Data Agent&lt;/STRONG&gt; area for checking the agent before publishing. I referenced &lt;STRONG&gt;Runtime&lt;/STRONG&gt; as part of working with the newer updates shown in the interface.&lt;/P&gt;
&lt;H2 id="using-a-data-agent-from-standalone-power-bi-copilot"&gt;Using a Data Agent from Standalone Power BI Copilot&lt;/H2&gt;
&lt;P&gt;Finally, I showed a scenario involving &lt;STRONG&gt;Standalone Power BI Copilot&lt;/STRONG&gt;. The Data Agent was offline at the time of the recording, but I included the previously available scenario to demonstrate the intended interaction.&lt;/P&gt;
&lt;P&gt;In this flow, I used the &lt;CODE&gt;@&lt;/CODE&gt; symbol to reference one of my Data Agents. I had created an agent named &lt;STRONG&gt;Copilot Data Agent&lt;/STRONG&gt;. The goal was to ask a question in Standalone Power BI Copilot and receive an answer from the Data Agent without first navigating directly into the agent itself.&lt;/P&gt;
&lt;P&gt;This illustrates how Microsoft Fabric Data Agents can be part of a broader Copilot-based experience, where users ask questions from a conversational interface while the agent works with its configured data sources.&lt;/P&gt;
&lt;H2 id="frequently-asked-questions"&gt;Frequently Asked Questions&lt;/H2&gt;
&lt;H3 id="which-data-sources-can-i-add-to-a-microsoft-fabric-data-agent"&gt;Which data sources can I add to a Microsoft Fabric Data Agent?&lt;/H3&gt;
&lt;P&gt;In the demonstrated interface, I could add an Eventhouse, Semantic Models, and Lakehouses. I then selected the tables that the agent could read.&lt;/P&gt;
&lt;H3 id="which-languages-can-a-fabric-data-agent-use-for-queries"&gt;Which languages can a Fabric Data Agent use for queries?&lt;/H3&gt;
&lt;P&gt;The video showed KQL for Eventhouse, DAX for Semantic Models, and SQL for Lakehouse or Warehouse sources.&lt;/P&gt;
&lt;H2 id="conclusion"&gt;Conclusion&lt;/H2&gt;
&lt;P&gt;In this walkthrough, I configured &lt;STRONG&gt;Microsoft Fabric Data Agents&lt;/STRONG&gt; by connecting data sources, selecting tables, adding source instructions, defining example queries, and testing agent instructions. I then published the agent and showed how it could be referenced from Standalone Power BI Copilot.&lt;/P&gt;
&lt;P&gt;The main takeaway is that Microsoft Fabric Data Agents provide a configuration-based way to connect natural-language questions with business data sources and source-specific query languages. If you are working with Fabric data sources, start by defining a focused set of tables and recurring questions, then test the responses before publishing.&lt;/P&gt;
&lt;/ARTICLE&gt;</description>
      <pubDate>Mon, 28 Sep 2026 18:55:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Microsoft-Fabric-Data-Agents-Setup-Testing-and-Publishing/ba-p/5369498</guid>
      <dc:creator>uzuntasgokberk</dc:creator>
      <dc:date>2026-09-28T18:55:42Z</dc:date>
    </item>
    <item>
      <title>Connect Fabric Data Agents to Copilot Studio with MCP (+ Assistants API Migration Fix)</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Connect-Fabric-Data-Agents-to-Copilot-Studio-with-MCP-Assistants/ba-p/5368633</link>
      <description>&lt;P&gt;Business users want answers where they already work, in Teams and Microsoft 365 Copilot, and those answers need to come from trusted, governed data. Fabric data agents in Copilot Studio do exactly that, and the integration is now generally available.&lt;/P&gt;
&lt;P&gt;There is also a deadline you may already have passed. If you connected to Fabric data agents through the OpenAI Assistants API, your integration has likely stopped working. This guide covers both the setup and the fix.&lt;/P&gt;
&lt;H3&gt;What's new&lt;/H3&gt;
&lt;P&gt;Fabric data agents now connect to Copilot Studio through a new tool-based experience: you select Add a tool, search for Fabric, and choose Fabric IQ Data MCP. Your Copilot Studio agent then calls the Fabric data agent like any other tool. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Three points matter for architects:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Data stays governed.&lt;/STRONG&gt; The Fabric data agent keeps running in Fabric, respects permissions on the underlying data sources, and returns answers grounded in governed enterprise data. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The orchestrator decides.&lt;/STRONG&gt; The orchestrator chooses when to use enterprise data and when to use its other knowledge sources and tools. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;You can combine agents.&lt;/STRONG&gt; You can pair several Fabric data agents with other business systems to build richer solutions. A sales agent could query a sales data agent, a finance data agent and your CRM connector in a single conversation. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Behind this, Copilot Studio also introduced a redesigned authoring surface and runtime powered by the GitHub Copilot harness. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Why MCP matters&lt;/H3&gt;
&lt;P&gt;Model Context Protocol (MCP) is becoming the standard way agents connect to tools and data. By exposing Fabric data agents through MCP, Microsoft makes them a reusable building block instead of a one-off integration. The same move is happening elsewhere: Fabric data agents in Microsoft Foundry are now easier to connect and monitor, and that integration is moving to MCP too. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-august-2026-feature-summary/5325824" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You build a data agent once in Fabric, and Copilot Studio, Foundry and Microsoft 365 Copilot can all use it.&lt;/P&gt;
&lt;H3&gt;Prerequisites&lt;/H3&gt;
&lt;P&gt;Before you start, check that you have:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A Microsoft Fabric workspace on Fabric capacity&lt;/LI&gt;
&lt;LI&gt;Data ready to use: a lakehouse, warehouse, semantic model or similar source with clean, well-named tables&lt;/LI&gt;
&lt;LI&gt;Permission to create items in the Fabric workspace&lt;/LI&gt;
&lt;LI&gt;Access to Copilot Studio with permission to build and publish agents&lt;/LI&gt;
&lt;LI&gt;Microsoft 365 Copilot or Teams, depending on where you want to publish&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Tip: the quality of your data agent depends on the quality of your data. Clear table and column names and descriptions make a big difference to answer accuracy.&lt;/P&gt;
&lt;H3&gt;Step 1: Build and test your Fabric data agent&lt;/H3&gt;
&lt;P&gt;In your Fabric workspace, create a new &lt;STRONG&gt;data agent&lt;/STRONG&gt; item, then:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Add data sources.&lt;/STRONG&gt; Connect the lakehouse, warehouse or semantic model the agent should answer from. Start narrow, since one domain per agent works best.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Write agent instructions.&lt;/STRONG&gt; Explain the business context, key terms and rules. For example: "Revenue means net revenue after returns. Fiscal year starts in April. Always exclude internal test accounts."&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Add example questions and queries.&lt;/STRONG&gt; Give sample questions with the correct query logic, so the agent learns your patterns.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Test thoroughly.&lt;/STRONG&gt; Ask the questions your business users actually ask and compare the answers with your certified reports.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Publish&lt;/STRONG&gt; the agent once the answers are reliable.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Step 2: Add the data agent to Copilot Studio&lt;/H3&gt;
&lt;P&gt;This is the new MCP-based flow. Create or open an agent in Copilot Studio, go to Tools, select Add a tool, search for Fabric, and add Fabric IQ Data MCP. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Then:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Select the Fabric data agent you published in Step 1.&lt;/LI&gt;
&lt;LI&gt;Give the tool a clear description, such as "Answers questions about sales, revenue and pipeline from governed Fabric data." The orchestrator reads this to decide when to call the tool, so be specific.&lt;/LI&gt;
&lt;LI&gt;In your Copilot Studio agent's instructions, tell it when to use the tool, for example: "For any question about sales numbers or targets, use the Sales Data tool."&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Step 3: Test in Copilot Studio&lt;/H3&gt;
&lt;P&gt;Test your agent in Preview before publishing. Check that: &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Data questions trigger the Fabric tool, and general questions don't&lt;/LI&gt;
&lt;LI&gt;Answers match the results from Fabric directly&lt;/LI&gt;
&lt;LI&gt;A user without access to certain data gets no answer from it, since the data agent respects permissions on the underlying sources&lt;/LI&gt;
&lt;LI&gt;Follow-up questions ("and what about last quarter?") work as expected&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Step 4: Publish to Teams or Microsoft 365 Copilot&lt;/H3&gt;
&lt;P&gt;When you're happy with the results, publish to Microsoft Teams or Microsoft 365 Copilot. Business users can now ask data questions in the tools they use every day, without opening a report. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-data-agents-in-microsoft-copilot-studio-generally-available/5362882" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Roll out to a small pilot group first, collect feedback, and improve the data agent's instructions before rolling out widely.&lt;/P&gt;
&lt;H3&gt;The Assistants API retirement: what broke and how to fix it&lt;/H3&gt;
&lt;P&gt;This part matters if you built programmatic integrations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What happened:&lt;/STRONG&gt; The OpenAI Assistants API, which powered the orchestration layer of the Fabric data agent, was scheduled to be shut down by OpenAI on August 26, 2026. After that date, direct calls to the Assistants API stop working. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-august-2026-feature-summary/5325824" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Who is affected:&lt;/STRONG&gt; anyone who connects to a Fabric data agent programmatically through the Assistants API needs to migrate to the data agent MCP endpoint. Typical examples are custom apps, scripts, or third-party tools calling the data agent directly. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-august-2026-feature-summary/5325824" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Who is mostly fine:&lt;/STRONG&gt; SDK and Fabric portal users need little or no action, because Microsoft migrates those experiences internally, although conversation history may reset once. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-august-2026-feature-summary/5325824" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What stays the same:&lt;/STRONG&gt; existing agent data sources, instructions and tools remain unchanged. You don't need to rebuild your agents, only change how you connect to them. &lt;A href="https://community.fabric.microsoft.com/blog/fbc_fabricupdatesblogs/fabric-august-2026-feature-summary/5325824" target="_blank"&gt;Microsoft Community&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;Migration checklist&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Find your integrations.&lt;/STRONG&gt; Search your code and configs for Assistants API calls that target Fabric data agents. Check custom apps, automation scripts, Azure Functions and any third-party tools.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Check for failures since late August.&lt;/STRONG&gt; Errors or silent failures after August 26 are a strong sign an integration is affected.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Move to the MCP endpoint.&lt;/STRONG&gt; Update each integration to connect through the data agent's MCP endpoint instead. Follow Microsoft's guide, "Prepare your Fabric Data Agent integrations for Assistants API retirement," for the current details.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Consider Copilot Studio instead of custom code.&lt;/STRONG&gt; If a custom app only exists to put a chat interface on a data agent, the Copilot Studio route above may replace it with less code to maintain.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tell users about history resets.&lt;/STRONG&gt; If you use the portal or SDK, let users know earlier conversations may disappear once.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Retest.&lt;/STRONG&gt; Run your standard question set again after migrating to confirm the answers haven't changed.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Best practices for production&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;One domain per data agent.&lt;/STRONG&gt; Separate agents for sales, finance and operations are easier to test, govern and improve than one agent that tries to do everything.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Write tool descriptions carefully.&lt;/STRONG&gt; In Copilot Studio, the tool description is how the orchestrator decides what to call. Vague descriptions lead to wrong tool choices.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Treat instructions like code.&lt;/STRONG&gt; Version them, review changes, and retest after every edit.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Keep a test question set.&lt;/STRONG&gt; Keep 20 to 30 real questions with expected answers, and run them after any change to data, instructions or model.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Watch permissions.&lt;/STRONG&gt; Answers respect underlying permissions, so a mistake in data security becomes a mistake in agent answers. Review access regularly.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Start small and grow.&lt;/STRONG&gt; Pilot with one team, measure how often answers are right, then expand.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;The bottom line&lt;/H3&gt;
&lt;P&gt;Connecting Fabric data agents to Copilot Studio through MCP turns your governed Fabric data into a reusable tool that any agent can use, and it puts trusted answers directly into Teams and Microsoft 365 Copilot. The setup takes minutes once your data agent is solid.&lt;/P&gt;
&lt;P&gt;If you built integrations on the Assistants API, make migration your first job this week. Your agents, data sources and instructions don't need to change, only the connection. After that, you're on the platform Microsoft is building its agent strategy on.&lt;/P&gt;</description>
      <pubDate>Thu, 24 Sep 2026 16:01:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Connect-Fabric-Data-Agents-to-Copilot-Studio-with-MCP-Assistants/ba-p/5368633</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-24T16:01:53Z</dc:date>
    </item>
    <item>
      <title>Fabric Governance Patterns: The First Step to Trusted Scale</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Governance-Patterns-The-First-Step-to-Trusted-Scale/ba-p/5368662</link>
      <description>&lt;P&gt;A large enterprise had already embraced self-service analytics. Business teams were building reports, connecting to data, publishing dashboards, and moving fast.&lt;/P&gt;
&lt;P&gt;At first, this looked like success. More people had access to data. More teams could answer their own questions. More reports were being created without waiting for a central team. But over time, a different pattern started to appear.&lt;/P&gt;
&lt;P&gt;The same metric had more than one definition. Reports were difficult to find. Some workspaces had too many administrators. Critical assets did not always have clear owners. Development and production were not consistently separated. Data lineage was hard to trace. Capacity usage needed closer oversight. And as AI and Copilot entered the conversation, the question became even sharper:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Can we scale innovation without scaling risk?&lt;/STRONG&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;That is where Fabric governance begins. Not as a blocker. Not as another layer of bureaucracy. But as the first step toward trusted, reusable, secure, and AI-ready data.&lt;/P&gt;
&lt;H3 data-streamdown="heading-2"&gt;The first lesson: governance is not a document, it is an operating model&lt;/H3&gt;
&lt;P&gt;One thing I have learned is that governance does not succeed because a framework exists. It succeeds when people know how to use it.&lt;/P&gt;
&lt;P&gt;A governance document can describe roles, standards, and controls, but the operating model is what makes those ideas practical. It defines who decides, who approves, who owns, who monitors, and who acts when something is not working.&lt;/P&gt;
&lt;P&gt;For Fabric, this usually means moving toward a &lt;SPAN data-streamdown="strong"&gt;hub-and-spoke model&lt;/SPAN&gt;. The hub defines enterprise guardrails, platform standards, monitoring, training, and governance consistency. The spokes own business context, local adoption, workspace execution, semantic model quality, and day-to-day compliance.&lt;/P&gt;
&lt;P&gt;That shift matters because Fabric is not only a reporting platform. It brings together data engineering, Power BI, OneLake, semantic models, pipelines, security, metadata, AI, and governance capabilities. If the operating model is unclear, the platform can grow faster than accountability.&lt;/P&gt;
&lt;P&gt;The first step is therefore simple to state but important to execute:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Define who owns what before scaling Fabric further.&lt;/STRONG&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;img /&gt;
&lt;H3 data-streamdown="heading-2"&gt;What happens if the first step is skipped&lt;/H3&gt;
&lt;P&gt;Without governance at the start, self-service becomes self-risk.&lt;/P&gt;
&lt;P&gt;I have seen this pattern many times: teams do not intend to create risk. They are trying to solve real business problems quickly. A report is needed urgently. A dataset is copied because it is faster. A semantic model is rebuilt because the existing one is hard to find. A workspace is created because the team needs somewhere to collaborate. Each decision makes sense locally. But collectively, the platform becomes harder to govern.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 98.5167%; height: 499px; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Current pattern&lt;/th&gt;&lt;th&gt;Risk created&lt;/th&gt;&lt;th&gt;Governance direction&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Decentralized citizen development with limited oversight&lt;/td&gt;&lt;td&gt;Report proliferation and reduced trust&lt;/td&gt;&lt;td&gt;Hub-and-spoke governance model&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Users self-manage workspaces, datasets, refreshes, and models&lt;/td&gt;&lt;td&gt;Source-of-truth confusion&lt;/td&gt;&lt;td&gt;Asset lifecycle ownership&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Too many workspace admins and inconsistent access approval&lt;/td&gt;&lt;td&gt;Privacy, exposure, and compliance risk&lt;/td&gt;&lt;td&gt;Least-privilege access controls&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reports and metrics are hard to discover&lt;/td&gt;&lt;td&gt;Duplication and poor reuse&lt;/td&gt;&lt;td&gt;Metadata, catalog, and marketplace discovery&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Semantic models are rebuilt by each analyst&lt;/td&gt;&lt;td&gt;Conflicting business logic&lt;/td&gt;&lt;td&gt;Shared, reusable semantic models&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Reports are published directly to production&lt;/td&gt;&lt;td&gt;Quality and change risk&lt;/td&gt;&lt;td&gt;Dev/Test/Prod deployment path&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Unoptimized refreshes and transformations&lt;/td&gt;&lt;td&gt;Capacity pressure and performance issues&lt;/td&gt;&lt;td&gt;Central reusable pipelines and monitoring&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AI features are enabled without readiness checks&lt;/td&gt;&lt;td&gt;Misuse, poor prompts, weak auditability&lt;/td&gt;&lt;td&gt;Responsible AI, metadata, training, and approval controls&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The biggest risk is not that people build too much. The biggest risk is that no one can confidently say which assets are trusted, who owns them, and whether they are safe to reuse.&lt;/P&gt;
&lt;H3&gt;The story of the first step&lt;/H3&gt;
&lt;P&gt;Imagine a business user needs a new dashboard. In the old world, they might connect Power BI Desktop directly to Excel, SQL, SharePoint, or an API. They build a model, define their own business rules, publish to a workspace, and share the report. It works.&lt;/P&gt;
&lt;P&gt;Until another team builds the same metric differently. Until the source changes. Until access becomes unclear. Until refreshes start consuming capacity. Until a critical executive report depends on an undocumented model.&lt;/P&gt;
&lt;P&gt;In the governed Fabric world, the story changes. The user still gets the insight. But the path is safer:&lt;/P&gt;
&lt;OL data-streamdown="ordered-list"&gt;
&lt;LI data-streamdown="list-item"&gt;The data is ingested through governed pipelines.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Data is curated in OneLake or an approved warehouse/lakehouse pattern.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Certified or strategic data products are reused where available.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Semantic models are owned, documented, and version controlled.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Reports move through development and production controls.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Metadata, lineage, access, and quality checks are captured.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Monitoring shows whether the platform is healthy and compliant.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The user experience should feel easier, not harder. Governance should make the trusted path the default path.&lt;/P&gt;
&lt;img /&gt;
&lt;H3 data-streamdown="heading-2"&gt;Personas: the people who make governance real&lt;/H3&gt;
&lt;P&gt;Fabric governance only works when roles are explicit. In my experience, this is where many governance initiatives either become practical or remain theoretical. If the role definitions are vague, everyone agrees governance is important, but no one knows who should approve, remediate, certify, or retire an asset.&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Persona&lt;/th&gt;&lt;th&gt;Story role&lt;/th&gt;&lt;th&gt;Responsibility&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Fabric Governance Lead&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Sets the rules of the road&lt;/td&gt;&lt;td&gt;Defines policies, guardrails, governance forums, standards, and adoption KPIs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Fabric Technical Product Owner&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Owns the platform roadmap&lt;/td&gt;&lt;td&gt;Manages feature enablement, Fabric roadmap, platform health, and Microsoft relationship&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Fabric Architect&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Designs the pattern&lt;/td&gt;&lt;td&gt;Defines architecture blueprints, workspace structure, integration patterns, and semantic model guidance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Fabric Product Owner / Spoke Owner&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Owns business outcomes&lt;/td&gt;&lt;td&gt;Prioritizes BI demand, funds initiatives, approves adoption, and ensures business value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Steward&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Runs governance day to day&lt;/td&gt;&lt;td&gt;Ensures standards, metadata, access, certification, lifecycle, and workspace guardrails are followed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Capacity Manager&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Protects performance and cost&lt;/td&gt;&lt;td&gt;Monitors capacity usage, manages allocation, forecasts demand, and resolves overages&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Monitoring Analyst&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Turns governance into evidence&lt;/td&gt;&lt;td&gt;Builds governance scorecards, compliance metrics, adoption reporting, and exception triggers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Developers and report creators&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Build governed assets&lt;/td&gt;&lt;td&gt;Use certified data, follow standards, document metadata, validate quality, and publish through controlled pipelines&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;End users&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Consume trusted insights&lt;/td&gt;&lt;td&gt;Use certified reports and datasets, provide feedback, and avoid unmanaged duplication&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Security, privacy, and responsible AI teams&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Protect the enterprise&lt;/td&gt;&lt;td&gt;Advise on sensitive data, AI use, privacy, compliance, auditability, and risk controls&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;The important point is not the title. The important point is accountability. Every workspace, semantic model, data product, report, capacity, and AI-enabled experience needs an owner.&lt;/P&gt;
&lt;H3 data-streamdown="heading-2"&gt;Governance patterns that turn intent into action&lt;/H3&gt;
&lt;P&gt;A practical Fabric governance framework should define patterns across ten areas:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-border-style-solid" border="1" style="width: 100%; border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Governance pattern&lt;/th&gt;&lt;th&gt;What it controls&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Operating model pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Hub-and-spoke governance, community of practice, training, enablement&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Capacity pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Dedicated capacity ownership, funding, sizing, production/development tagging&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Workspace pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Workspace approval, ownership, production isolation, review and decommissioning&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Copilot and AI pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Metadata readiness, training, responsible AI, logging, approval, monitoring&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Data product pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Certified data products, shared lakehouses, curated ingestion, retention, exfiltration control&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Semantic model pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Reusable models, ownership, glossary integration, lineage, change management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Access pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Least privilege, RBAC groups, RLS/OLS/CLS, masking, periodic access reviews&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Monitoring pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Capacity health, platform alerts, governance scorecards, compliance KPIs&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;DevOps pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Dev/Test/Prod separation, deployment pipelines, validation, version control&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;SPAN data-streamdown="strong"&gt;Onboarding pattern&lt;/SPAN&gt;&lt;/td&gt;&lt;td&gt;Role-based access, training, appropriate workspace roles, production read-only controls&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;This is where governance becomes operational. It moves from “we should govern Fabric” to “this is how every team works.”&lt;/P&gt;
&lt;H3 data-streamdown="heading-2"&gt;A lightweight Power Platform intake can help&lt;/H3&gt;
&lt;P&gt;One of the most practical lessons I have learned is that governance needs an easy front door. If the process is unclear, people bypass it. If the process is too heavy, people avoid it. If approvals live only in email, governance becomes hard to track. A simple Power Platform intake can make the first step easier:&lt;/P&gt;
&lt;UL data-streamdown="unordered-list"&gt;
&lt;LI&gt;Request a new capacity.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Request a workspace.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Request access.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Request Copilot enablement.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Request certification.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Request exception approval.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Capture business owner, technical owner, data classification, lifecycle, and approval history.&lt;/LI&gt;
&lt;LI data-streamdown="list-item"&gt;Route the request to the right steward, product owner, platform owner, or security reviewer.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H3 data-streamdown="heading-2"&gt;Closing thought&lt;/H3&gt;
&lt;P&gt;Fabric governance is not about creating more process. It is about creating confidence.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Confidence that business users are working with trusted data.&lt;/LI&gt;
&lt;LI&gt;Confidence that platform teams can scale without losing control.&lt;/LI&gt;
&lt;LI&gt;Confidence that security and compliance teams have visibility.&lt;/LI&gt;
&lt;LI&gt;Confidence that AI and Copilot experiences are grounded in governed, reusable, well-understood data&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The organizations that will get the most value from Microsoft Fabric will not be the ones that simply adopt it fastest. They will be the ones that create the right patterns early, so speed and trust can grow together.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;STRONG&gt;&lt;SPAN data-streamdown="strong"&gt;Start small, define ownership, make the governed path easy, and let governance become the foundation for trusted scale.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Sep 2026 15:59:32 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Governance-Patterns-The-First-Step-to-Trusted-Scale/ba-p/5368662</guid>
      <dc:creator>rawatsudhirfabr</dc:creator>
      <dc:date>2026-09-24T15:59:32Z</dc:date>
    </item>
    <item>
      <title>Fabric Capacity Cockpit: pause, resume and track the cost of your F-SKU from one window</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Capacity-Cockpit-pause-resume-and-track-the-cost-of-your/ba-p/5368746</link>
      <description>&lt;H3&gt;Why I built it&lt;/H3&gt;
&lt;P&gt;When my Fabric trial capacity expired, I moved my workspaces to a small pay-as-you-go F2. I use it for experiments and demos, not production, so the obvious way to keep costs down is to pause it whenever I'm not working with it.&lt;/P&gt;
&lt;P&gt;In practice, the information I need for that is spread across several places:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure portal – capacity overview&lt;/STRONG&gt;: status and pause/resume, but no cost&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Cost Management&lt;/STRONG&gt;: cost, but no status&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Fabric Capacity Metrics app&lt;/STRONG&gt;: CU and storage usage, but neither cost nor status&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Workspace settings&lt;/STRONG&gt;: which workspace is assigned to which capacity&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I wanted one small window that answers three questions at a glance (Is it running? What has it cost this month? Can I pause it now?) and does the pause/resume for me. The result is the &lt;STRONG&gt;Fabric Capacity Cockpit&lt;/STRONG&gt;, now open source under the MIT license:&lt;/P&gt;
&lt;P&gt;👉 &lt;A class="lia-external-url" href="https://github.com/Siebzehnundvier/FabricCockpit-GUI" target="_blank"&gt;https://github.com/Siebzehnundvier/FabricCockpit-GUI&lt;/A&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H3&gt;What it does&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity picker&lt;/STRONG&gt;: lists all Fabric capacities across all enabled subscriptions of the signed-in account. The list is cached, so the window is usable immediately while a fresh list loads in the background.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity info&lt;/STRONG&gt;: name, subscription, resource group, region, SKU, state, provisioning state and month-to-date cost of the selected capacity.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cost split&lt;/STRONG&gt;: the cost figure shows the OneLake storage share separately (e.g. 12.34 € (of which storage 0.87 €)), because that part keeps accruing while the capacity is paused.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pause / Resume&lt;/STRONG&gt;: each action asks for confirmation, then shows live progress with an elapsed-time counter until the target state is reached.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Auto-pause timer&lt;/STRONG&gt;: choose 15, 30, 60 or 120 minutes. Two minutes before the deadline, a banner offers Pause now, Extend or Cancel.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tray icon&lt;/STRONG&gt;: its colour follows the capacity state (green active, amber paused, blue transitioning). The right-click menu offers Open cockpit / Resume / Pause / Exit. Closing the window only hides it to the tray.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Links&lt;/STRONG&gt;: Azure capacity overview, cost analysis for the resource group, and your Capacity Metrics app.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Log&lt;/STRONG&gt;: every action and error is logged with a timestamp and can be copied to the clipboard.&lt;/LI&gt;
&lt;/UL&gt;
&lt;img /&gt;
&lt;H3&gt;Under the hood&lt;/H3&gt;
&lt;P&gt;The cockpit is plain Windows PowerShell 5.1 with WinForms, so it needs no installer, no compiled binaries and no admin rights. All Azure access goes through the &lt;STRONG&gt;Azure CLI&lt;/STRONG&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity list, state, suspend and resume&lt;/STRONG&gt; use the &lt;EM&gt;microsoft-fabric&lt;/EM&gt; CLI extension (az fabric capacity ...). The cockpit installs the extension automatically on first start.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pause and resume&lt;/STRONG&gt; are sent with &lt;EM&gt;--no-wait&lt;/EM&gt;, and the state is then polled every 5 seconds. Without &lt;EM&gt;--no-wait&lt;/EM&gt;, the CLI blocks until the operation finishes, which would freeze the UI.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cost&lt;/STRONG&gt; comes from a Cost Management REST query at resource level, grouped by resource ID and meter. Stored-data meters count as storage; everything billed in CU counts as compute. Results are cached for 10 minutes, and throttling (HTTP 429) is handled with a retry.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sign-in and tokens&lt;/STRONG&gt; are handled entirely by the Azure CLI. The tool stores no credentials. Its only local data is a settings file in &lt;EM&gt;%APPDATA%\FabricCockpit&lt;/EM&gt; plus cost cache files in &lt;EM&gt;%TEMP%&lt;/EM&gt;. There is no telemetry and no update check.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I tested the state transitions (&lt;EM&gt;Paused → Resuming → Active&lt;/EM&gt; and &lt;EM&gt;Active → Pausing → Paused&lt;/EM&gt;) against Azure CLI 2.90.0 with microsoft-fabric 1.0.0b1.&lt;/P&gt;
&lt;H3&gt;Getting started&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;Install the Azure CLI and check that &lt;EM&gt;az --version&lt;/EM&gt; works.&lt;/LI&gt;
&lt;LI&gt;Download the release zip from GitHub and unblock it (right-click → Properties → Unblock), then extract it anywhere.&lt;/LI&gt;
&lt;LI&gt;Double-click &lt;EM&gt;Start-Cockpit.cmd&lt;/EM&gt;, click &lt;STRONG&gt;Sign in&lt;/STRONG&gt;, and pick your capacity.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;Permissions:&lt;/STRONG&gt;&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Viewing only:&lt;/STRONG&gt; Reader on the capacity or resource group.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pause / Resume:&lt;/STRONG&gt; additionally &lt;EM&gt;suspend/action&lt;/EM&gt; and &lt;EM&gt;resume/action&lt;/EM&gt; on the capacity, e.g. Contributor.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cost figure:&lt;/STRONG&gt; Cost Management Reader. Without it, the field shows n/a and everything else still works.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Before you pause anything&lt;/H3&gt;
&lt;P&gt;The cockpit issues the same calls as the Azure portal, so the consequences are the same:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Pausing makes every workspace on the capacity unavailable.&lt;/STRONG&gt; Scheduled refreshes and pipeline runs fail while it is paused.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Running work is aborted.&lt;/STRONG&gt; The auto-pause timer does &lt;STRONG&gt;not&lt;/STRONG&gt; check for running refreshes, notebooks or Spark jobs. Use it only on personal, dev or test capacities.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Resuming starts billing immediately.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;OneLake storage is billed while paused.&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reservations are not detected.&lt;/STRONG&gt; If your capacity is covered by a reservation, pausing saves nothing.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The cost figure is approximate.&lt;/STRONG&gt; Azure cost data lags behind, typically can lag by a day or more. For invoices, use the portal.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Trial capacities and Power BI Premium P-SKUs are not Azure resources and therefore don't appear in the list.&lt;/P&gt;
&lt;H3&gt;How it was built&lt;/H3&gt;
&lt;P&gt;I built the cockpit together with an AI assistant and verified the behaviour on my own capacity. The code is plain text and deliberately simple, so please review it before you run it in an environment with stricter policies.&lt;/P&gt;
&lt;H3&gt;Feedback welcome&lt;/H3&gt;
&lt;P&gt;This is version 0.52, a tool for my own daily use that I think others with small pay-as-you-go capacities might find handy. Issues, ideas and pull requests on GitHub are very welcome. I'd also be interested to hear how you manage pause/resume and cost tracking for your own capacities: automation runbooks, Logic Apps, or something else entirely?&lt;/P&gt;</description>
      <pubDate>Thu, 24 Sep 2026 15:59:07 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Fabric-Capacity-Cockpit-pause-resume-and-track-the-cost-of-your/ba-p/5368746</guid>
      <dc:creator>Hans-Georg_Puls</dc:creator>
      <dc:date>2026-09-24T15:59:07Z</dc:date>
    </item>
    <item>
      <title>The Hidden Cost of the Data Swamp: Fabric Capacity Guardrails</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/The-Hidden-Cost-of-the-Data-Swamp-Fabric-Capacity-Guardrails/ba-p/5368358</link>
      <description>&lt;H4&gt;&lt;STRONG&gt;Introduction: The Double-Edged Sword of Fabric Flexibility&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Microsoft Fabric has fundamentally revolutionized how enterprise data teams operate. By unifying data engineering, data science, data warehousing and Power BI into a single Software-as-a-Service (SaaS) platform, it breaks down silos and lets business users move at lightning speed.&lt;/P&gt;
&lt;P&gt;However, this democratization of data comes with a massive hidden risk. When workspace creation is unchecked and pipelines run wild, speed quickly transforms into a costly “data swamp.” Unlike traditional infrastructure where compute and storage are rigidly partitioned, Fabric pools your processing power into &lt;STRONG&gt;Capacity Units (CUs)&lt;/STRONG&gt;. If you don’t govern those capacities, runaway queries, poorly optimized Spark jobs and unmanaged workspace sprawl will quietly drain your cloud budget before finance even sees the bill.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;1. The Anatomy of a Fabric Cost Explosion&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Cause-and-effect visualization demonstrating how unmonitored workspace sprawl and orphaned background pipelines drive sudden spikes in Capacity Unit (CU) consumption.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;&lt;STRONG&gt;How Cloud Costs Spiral Out of Control&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;In a consumption-based SaaS model, expenses aren’t driven just by storage – they are driven by active compute. Without strict guardrails, organizations frequently run into three major financial traps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;The “Noisy Neighbor” Problem:&lt;/STRONG&gt; A single inefficient, ad-hoc DAX query or an unoptimized PySpark notebook running in a shared capacity can consume 100% of the processing power, throttling critical executive dashboards and slowing down the entire organization.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Orphaned Pipelines &amp;amp; Infinite Loops:&lt;/STRONG&gt; Automated data factories and pipelines left running by developers who forgot to turn them off after testing, continuously burning CUs over weekends and holidays.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Unmonitored Sprawl:&lt;/STRONG&gt; Business units spinning up independent workspaces without designated capacity assignments, causing unpredictable spikes when heavy reporting cycles (like month-end financial closing) collide.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;2. Real-World Challenges: Why Monitoring is Hard&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Real-world operational challenges illustrated through capacity metrics app warnings and automated performance bottleneck notifications.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;&lt;STRONG&gt;Blind Spots in the Enterprise&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;Managing compute costs in Fabric is uniquely challenging because responsibility is decentralized.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Decentralized Ownership:&lt;/STRONG&gt; When business analysts build and manage their own workspaces, they rarely think about the underlying cluster compute footprint. They care about insights, not core optimization.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The Delayed Billing Shock:&lt;/STRONG&gt; Because usage metrics update dynamically, teams often don’t realize a workload has choked the capacity until after the performance degradation has already impacted end users.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Lack of Throttling Transparency:&lt;/STRONG&gt; Without proactive alert mechanisms, teams are caught entirely off guard when Fabric automatically pauses or throttles operations due to capacity exhaustion.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;3. Best Practices for Fabric FinOps and Capacity Governance&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Actionable three-step checklist highlighting core FinOps best practices for establishing sustainable capacity guardrails in Fabric.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;H5&gt;&lt;STRONG&gt;Taking Back Control of Your Compute Budget&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;To keep your cloud bill predictable and your performance lightning-fast, you need to embed FinOps principles directly into your governance strategy.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Isolate Workloads by Capacity Assignment:&lt;/STRONG&gt; Never mix heavy data engineering Spark jobs with executive Power BI semantic models on the exact same capacity tier. Separate your development, test and production workloads to protect critical business assets.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Master the Fabric Capacity Metrics App:&lt;/STRONG&gt; Make it a non-negotiable weekly habit for administrators to review the Microsoft Fabric Capacity Metrics app. Look closely at your &lt;EM&gt;Interactive&lt;/EM&gt; vs. &lt;EM&gt;Background&lt;/EM&gt; CU consumption spikes to pinpoint which specific semantic models or items are dragging down performance.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Set Up Proactive Alerting and Guardrails:&lt;/STRONG&gt; Use Azure Monitor or built-in notification hooks to alert your administrators when capacity utilization hits dangerous thresholds (e.g., crossing 80% sustained usage), allowing you to intervene before automatic throttling kicks in.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Enforce Workspace Lifecycle Policies:&lt;/STRONG&gt; Automatically archive or clean up abandoned workspaces and semantic models that haven’t been queried in over 90 days, saving both storage and compute metadata overhead.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H4&gt;&lt;STRONG&gt;4. Conclusion: Turning FinOps into a Competitive Advantage&lt;/STRONG&gt;&lt;/H4&gt;
&lt;img /&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;The ultimate goal of Fabric FinOps and Governance – transforming an unpredictable data swamp into a secure, high-performance and economically sustainable analytics powerhouse.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Governance in Microsoft Fabric isn’t just about security clearance lists and data privacy – it is about economic sustainability. By treating your capacity units as a finite, precious corporate asset, you protect your cloud budget from unexpected waste.&lt;/P&gt;
&lt;P&gt;When you combine robust workspace structuring, active Purview data labeling and diligent FinOps capacity monitoring, you turn your Fabric tenant from an unpredictable financial black hole into a predictable, high-performance enterprise analytics powerhouse.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What about you?&lt;/STRONG&gt; How is your organization currently keeping runaway Capacity Unit (CU) spikes and “noisy neighbor” workloads under control in Microsoft Fabric? Drop your strategies or biggest cost-management challenges in the comments below!&lt;/P&gt;</description>
      <pubDate>Wed, 23 Sep 2026 14:41:14 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/The-Hidden-Cost-of-the-Data-Swamp-Fabric-Capacity-Guardrails/ba-p/5368358</guid>
      <dc:creator>Pragati11</dc:creator>
      <dc:date>2026-09-23T14:41:14Z</dc:date>
    </item>
  </channel>
</rss>

