<?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>New blog articles in Microsoft Fabric Community</title>
    <link>https://community.fabric.microsoft.com/t5/</link>
    <description>Microsoft Fabric Community</description>
    <pubDate>Thu, 17 Sep 2026 23:05:26 GMT</pubDate>
    <dc:creator>Community</dc:creator>
    <dc:date>2026-09-17T23:05:26Z</dc:date>
    <item>
      <title>Upcoming changes to legacy Teams and Outlook activities in Fabric Data Factory pipelines</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Upcoming-changes-to-legacy-Teams-and-Outlook-activities-in/ba-p/5314499</link>
      <description>&lt;P&gt;Beginning October 30, 2026, users will no longer be able to add new legacy Teams or legacy Outlook activities to pipelines.&lt;/P&gt;
&lt;P&gt;These legacy activities will no longer appear as options when users add new activities to a pipeline. Existing legacy activity instances can still be edited and used in existing pipelines. New notification scenarios should instead use the modern Microsoft Teams and Outlook 365 Email activities.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 21:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Upcoming-changes-to-legacy-Teams-and-Outlook-activities-in/ba-p/5314499</guid>
      <dc:creator>conxu-ms</dc:creator>
      <dc:date>2026-09-17T21:00:00Z</dc:date>
    </item>
    <item>
      <title>Soft delete for On-premises data gateways in Microsoft Fabric (Preview)</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Soft-delete-for-On-premises-data-gateways-in-Microsoft-Fabric/ba-p/5365712</link>
      <description>&lt;P&gt;Deleting a gateway is currently permanent, so administrators must recreate it if it is removed accidentally. With soft delete, supported gateways are retained for 30 days after deletion, giving authorized administrators time to restore them before permanent deletion.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Soft&amp;nbsp;delete&amp;nbsp;feature currently is only available&amp;nbsp;for&amp;nbsp;standard mode of&amp;nbsp;on-premises data gateways in Microsoft Fabric (Preview).&amp;nbsp;Personal mode gateways&amp;nbsp;and virtual network data gateways are not&amp;nbsp;currently&amp;nbsp;supported.&amp;nbsp;&lt;/P&gt;&lt;H2&gt;What’s new&amp;nbsp;&lt;/H2&gt;&lt;P&gt;Soft delete introduces a recoverable deletion lifecycle for supported gateway types. When a supported gateway is&amp;nbsp;deleted, it is&amp;nbsp;retained&amp;nbsp;for&amp;nbsp;30 days&amp;nbsp;by default rather than being removed&amp;nbsp;immediately&amp;nbsp;and permanently. During the retention period, tenant admins and gateway admins can&amp;nbsp;recover&amp;nbsp;from&amp;nbsp;it.&amp;nbsp;&lt;/P&gt;&lt;P&gt;The gateway management page includes the Deleted gateways section which shows Deleted clusters and Deleted members. Gateway admins can view gateway clusters deleted within the 30-day retention window.&amp;nbsp;&amp;nbsp;Each entry in Deleted Clusters can show the gateway name, type, deletion timestamp and available actions, including Restore. Similarly, gateway admins can restore the deleted gateway members together in the Deleted member section. Where enabled, tenant admins may also permanently delete a gateway cluster or gateway members before the retention period ends.&amp;nbsp;&lt;/P&gt;&lt;H2&gt;Safer recovery for accidental deletion&amp;nbsp;&lt;/H2&gt;&lt;P&gt;Recovery is intended for accidental deletion. An authorized admin can select a deleted gateway and choose&amp;nbsp;Recover. The gateway is then restored at the cluster level with its&amp;nbsp;previous&amp;nbsp;metadata and permissions.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Recovery is not a backup and restore system. It does not recover individual gateway nodes, individual data sources, or partial permission sets as separate objects. Instead, the gateway is recovered as a gateway resource within the soft delete retention window.&amp;nbsp;&lt;/P&gt;&lt;P&gt;This distinction keeps the experience focused: if a gateway is deleted by mistake, admins have a clear path to bring it back without rebuilding the resource from scratch.&amp;nbsp;&lt;/P&gt;&lt;H2&gt;Governance and retention controls&amp;nbsp;&lt;/H2&gt;&lt;P&gt;Soft delete also gives organizations a clearer lifecycle model for gateway deletion. Deleted gateways are&amp;nbsp;retained&amp;nbsp;for&amp;nbsp;30 days&amp;nbsp;by default. After the retention period ends, the gateway is automatically and permanently&amp;nbsp;deleted, and recovery is no longer available.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Visibility and recovery are permission aware. Tenant admins and gateway admins can delete and recover gateways and, where supported, permanently delete them. Non-admin users cannot recover deleted gateways. If a user encounters a deleted gateway, the experience can direct them to contact a gateway admin for recovery.&amp;nbsp;&lt;/P&gt;&lt;H2&gt;API and audit support&amp;nbsp;&lt;/H2&gt;&lt;P&gt;API and audit logs aren't supported in the preview for soft delete.&lt;/P&gt;&lt;P&gt;Gateway soft delete is also planned for automation scenarios. Fabric and gateway APIs could expose soft-delete and recovery actions, helping admins include gateway lifecycle operations in existing workflows.&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the future, audit logs for deletion and recovery actions could help organizations track who deleted a gateway, when it was deleted, and when it was recovered. This information could support governance reviews and operational troubleshooting.&amp;nbsp;&lt;/P&gt;&lt;H2&gt;Get started&amp;nbsp;&lt;/H2&gt;&lt;P&gt;Gateway admins can remove and recover a supported gateway cluster.&amp;nbsp;&lt;/P&gt;&lt;img&gt;&lt;EM&gt;Figure: Option to remove a gateway cluster.&lt;/EM&gt;&lt;/img&gt;&lt;P&gt;To use gateway soft delete, select the gateway management page in Microsoft Fabric and select Deleted gateways&amp;nbsp;&lt;/P&gt;&lt;img&gt;&lt;EM&gt;Figure:List of data gateways with options to manage deleted gateways.&lt;/EM&gt;&lt;/img&gt;&lt;P&gt;Review gateways deleted within the retention window, confirm that you have the required admin permissions, and choose Restore for the gateway you want to restore.&amp;nbsp;&lt;/P&gt;&lt;img&gt;&lt;EM&gt;Figure: Deleted gateway clusters and nodes with an option to restore a deleted gateway.&lt;/EM&gt;&lt;/img&gt;&lt;P&gt;Accidental deletions shouldn't require rebuilding critical gateway resources from scratch. With gateway soft delete, administrators have a straightforward way to recover supported gateways and maintain operational continuity. Explore the feature in your Fabric environment and review the&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/data-integration/gateway/gateway-soft-delete" target="_blank" rel="noopener"&gt;gateway soft delete documentation&lt;/A&gt; to understand recovery, retention, and administration options.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 17:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Soft-delete-for-On-premises-data-gateways-in-Microsoft-Fabric/ba-p/5365712</guid>
      <dc:creator>goupadhy</dc:creator>
      <dc:date>2026-09-17T17:00:00Z</dc:date>
    </item>
    <item>
      <title>Mirroring for Google BigQuery in Microsoft Fabric (Generally Available)</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Mirroring-for-Google-BigQuery-in-Microsoft-Fabric-Generally/ba-p/5364851</link>
      <description>&lt;P&gt;Mirroring for Google BigQuery in Microsoft Fabric is now generally available. For organizations running critical workloads on BigQuery, this means a simpler, faster, and lower-cost path to bringing your data into the rest of your analytics estate — with production support, an enterprise SLA, and no pipelines to build or maintain.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 16:24:38 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Mirroring-for-Google-BigQuery-in-Microsoft-Fabric-Generally/ba-p/5364851</guid>
      <dc:creator>MichaelaIsaacs</dc:creator>
      <dc:date>2026-09-17T16:24:38Z</dc:date>
    </item>
    <item>
      <title>Manage semantic model settings in context with the default settings pane (Preview)</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Updates-Blog/Manage-semantic-model-settings-in-context-with-the-default/ba-p/5366792</link>
      <description>&lt;P&gt;The semantic model settings pane is becoming the default way to configure semantic models in the Power BI service. The pane opens alongside your workspace, so you can review and change settings without leaving the current page. It provides the same settings as the full semantic model settings page while keeping the surrounding context visible. The classic settings page remains available during this transition, but it no longer opens first. This change builds on the settings pane preview and provides a more focused experience for managing semantic models.&lt;/P&gt;&lt;H2&gt;Why it matters&lt;/H2&gt;&lt;P&gt;The pane helps you stay in context while you manage a semantic model. It opens on the right side of the browser window and keeps your workspace visible. Settings are organized into expandable sections and tabs, including refresh, data access, performance, and OneDrive and SharePoint. You can use the search box at the top of the pane to find a setting across all sections and tabs. For example, enter "re" and select &lt;STRONG&gt;View refresh history&lt;/STRONG&gt; to go directly to refresh history instead of opening sections one at a time. This organization is especially useful for semantic models with several connection, refresh, or performance settings. You can review a setting, make a change, and return to your work without navigating to a separate page.&lt;/P&gt;&lt;H2&gt;What's changing&lt;/H2&gt;&lt;P&gt;The settings pane was an optional experience earlier in the preview. As this change rolls out, the pane opens by default when you open settings for a semantic model. The rollout is gradual, so the timing can vary by environment.&lt;/P&gt;&lt;P&gt;The pane includes the settings available on the full settings page. Its main area groups related settings into expandable sections, and the tabs at the top organize settings by category. Use the search box when you know the setting you want or browse the sections to review related options together.&lt;/P&gt;&lt;P&gt;If you prefer the full-page experience, select &lt;STRONG&gt;Open settings page&lt;/STRONG&gt; at the bottom of the pane. The classic page opens in the same browser window. This option can help when you want to compare settings across semantic models or continue using a familiar workflow during the transition.&lt;/P&gt;&lt;P&gt;The classic settings page will be retired over time, so the switchback option is intended to support the transition. We're also working to consolidate related settings, including scheduled refresh and data connections. These planned improvements apply to the settings pane. The preview experience and behavior might change before general availability.&lt;/P&gt;&lt;img&gt;Figure: Switch from the semantic model settings pane to the classic settings page.&lt;/img&gt;&lt;H2&gt;Next steps&lt;/H2&gt;&lt;UL&gt;&lt;LI&gt;Understand &lt;A class="lia-external-url" href="https://learn.microsoft.com/power-bi/connect-data/service-datasets-permissions" target="_blank" rel="noopener"&gt;Semantic model permissions in Power BI&lt;/A&gt;.&lt;/LI&gt;&lt;LI&gt;Learn how to use the pane in &lt;A href="https://learn.microsoft.com/power-bi/connect-data/service-semantic-model-settings-pane" target="_blank" rel="noopener"&gt;Manage semantic model settings in the settings pane&lt;/A&gt;.&lt;/LI&gt;&lt;LI&gt;Open the settings for one of your semantic models and explore the grouped sections and search.&lt;/LI&gt;&lt;LI&gt;Share feature suggestions through &lt;A href="https://community.fabric.microsoft.com/" target="_blank" rel="noopener"&gt;Fabric Community Ideas&lt;/A&gt;.&lt;/LI&gt;&lt;LI&gt;Share feedback about the preview in the comments.&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Thu, 17 Sep 2026 16:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Updates-Blog/Manage-semantic-model-settings-in-context-with-the-default/ba-p/5366792</guid>
      <dc:creator>kayu</dc:creator>
      <dc:date>2026-09-17T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Sequence Modeling for Data Science in Microsoft Fabric</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Science-Community-Blog/Sequence-Modeling-for-Data-Science-in-Microsoft-Fabric/ba-p/4916966</link>
      <description>&lt;P&gt;In this edition, we're exploring&amp;nbsp;how sequence modeling changes the way one thinks about data, why treating rows as independent often leads to shallow insights, and how RNNs and GRUs step in to model memory. By the end, you should have a clear intuition for when simple recurrence is enough, when gating really matters, and how to start applying this mindset in Microsoft Fabric (without overengineering anything!)&lt;/P&gt;</description>
      <pubDate>Thu, 17 Sep 2026 13:56:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Science-Community-Blog/Sequence-Modeling-for-Data-Science-in-Microsoft-Fabric/ba-p/4916966</guid>
      <dc:creator>Sahir_Maharaj</dc:creator>
      <dc:date>2026-09-17T13:56:53Z</dc:date>
    </item>
    <item>
      <title>Dataflow Gen2 vs Copy Job vs Pipeline: Choosing by Workload, Not by Habit</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Dataflow-Gen2-vs-Copy-Job-vs-Pipeline-Choosing-by-Workload-Not/ba-p/5367375</link>
      <description>&lt;P&gt;Every Fabric team has a default tool. People who came from Azure Data Factory build a pipeline for everything. Power BI people open Dataflow Gen2 for everything. Newer teams might put every table into a Copy Job because the wizard is quick.&lt;/P&gt;
&lt;P&gt;Each tool does its own job very well. Problems start when it gets used for another tool's job: pipelines full of hand-built watermark logic, dataflows used only to copy tables, and Copy Jobs expected to handle transformations they were never built for.&lt;/P&gt;
&lt;P&gt;This post gives you a simple way to pick the right tool based on what the workload needs.&lt;/P&gt;
&lt;H3&gt;One sentence each&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;Copy Job&lt;/STRONG&gt; moves data from A to B, including incremental loads, with as little setup as possible.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dataflow Gen2&lt;/STRONG&gt; shapes data. It cleans, merges, reshapes and applies business rules using Power Query.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pipeline&lt;/STRONG&gt; coordinates work. It runs steps in order, handles dependencies and failures, and ties everything together.&lt;/P&gt;
&lt;P&gt;If you remember only one thing, remember this: &lt;STRONG&gt;Copy Job moves, Dataflow shapes, Pipeline orchestrates.&lt;/STRONG&gt;&lt;/P&gt;
&lt;H3&gt;Start with three questions about the workload&lt;/H3&gt;
&lt;P&gt;Ask these before you open any editor.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt; Am I moving data or changing it?&lt;/STRONG&gt;&lt;BR /&gt;If the data arrives at the destination looking mostly like the source, with only column mapping or type changes, you are moving data. If you are joining, deduplicating, deriving columns or applying business logic, you are transforming it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; How does the source change?&lt;/STRONG&gt;&lt;BR /&gt;A one-time or full reload is a different problem from an ongoing incremental sync. Incremental loads based on change data capture (CDC) are different again.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt; How many steps depend on each other?&lt;/STRONG&gt;&lt;BR /&gt;A single load on a schedule is one thing. "Load these, then validate, then transform, then run a stored procedure, then alert someone if it fails" is a workflow.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Your answers usually point clearly to one tool.&lt;/P&gt;
&lt;H3&gt;Copy Job: when the job is data movement&lt;/H3&gt;
&lt;P&gt;Copy Job is the newest of the three and the one most often overlooked by teams stuck in old habits. Microsoft's decision guide lists its main scenarios as incremental copy and replication (both watermark-based and native CDC), data lake and storage migration, medallion ingestion, and out-of-the-box multi-table copy. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The incremental support is the main reason to use it. In a pipeline, the Copy activity handles incremental copy through pipeline expressions and control tables, and only with watermarks. That means you build and maintain the control table, the lookup, the parameterized query and the watermark update yourself. Copy Job does this for you. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Copy Job when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You need to ingest many tables from a database into a lakehouse or warehouse.&lt;/LI&gt;
&lt;LI&gt;You want an initial full load followed by incremental updates, and you don't want to build watermark logic.&lt;/LI&gt;
&lt;LI&gt;The source supports CDC and you want inserts and updates merged into the destination automatically.&lt;/LI&gt;
&lt;LI&gt;The destination is outside Fabric. Copy Job supports 40+ destination connectors. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Microsoft's own example fits this well: an analyst who needs multi-table selection across regional SQL Server instances, a bulk initial load, and then CDC-based incremental merges picks Copy Job because it supports both watermark-based and native CDC incremental copying through a wizard, and automatically detects CDC-enabled tables. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose Copy Job when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You need real transformation. Its transformation support is rated low, and that is intentional. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The load is one step in a larger workflow with conditions, retries and downstream dependencies. That belongs in a pipeline.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Dataflow Gen2: when the job is shaping data&lt;/H3&gt;
&lt;P&gt;Dataflow Gen2 is Power Query running at Fabric scale. It is the right tool when the value lies in the transformation logic. It offers 170+ built-in connectors, 300+ transformation functions in a visual interface, and data profiling tools for checking data quality. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A common complaint is that dataflows are slow for large volumes. That used to be a fair criticism, but Fabric has added several performance features aimed at specific workloads:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Fast Copy&lt;/STRONG&gt; is for direct, high-throughput copies from a supported source with no transformations. It uses the same backend as the pipeline Copy activity. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;A href="https://blog.fabric.microsoft.com/vi-vn/blog/announcing-the-general-availability-of-fast-copy-in-dataflows-gen2?ft=All" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Modern Evaluator&lt;/STRONG&gt; helps when you are shaping data from connectors that don't fold, or only partly fold. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Partitioned Compute&lt;/STRONG&gt; is for large, partitioned or multi-file datasets that can be processed in parallel. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Staging&lt;/STRONG&gt; lets you land raw data first and transform it afterwards (ELT), so ingestion and transformation don't compete in one pass. &lt;A href="https://learn.microsoft.com/fabric/data-factory/decision-guide-data-transformation" target="_blank"&gt;microsoft&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Choose Dataflow Gen2 when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Business logic is the main work: cleansing, standardizing codes, merging sources, calculated columns.&lt;/LI&gt;
&lt;LI&gt;The people who own the logic know Power Query and would struggle to maintain Spark or SQL.&lt;/LI&gt;
&lt;LI&gt;You are combining files, APIs, SharePoint lists and databases into one clean dataset.&lt;/LI&gt;
&lt;LI&gt;You want visual data profiling while you build.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose Dataflow Gen2 when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;You are only copying tables. Fast Copy makes this workable, but Copy Job is simpler, gives you incremental loads without extra work, and has less to maintain.&lt;/LI&gt;
&lt;LI&gt;Your destination isn't supported. Dataflow Gen2 lists around 7+ destination connectors, compared with 40+ for the copy tools. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;The transformations are very complex or code-heavy. At that point a notebook is usually the better choice.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Pipeline: when the job is coordination&lt;/H3&gt;
&lt;P&gt;A pipeline is not mainly a data movement tool. It is the orchestrator. Microsoft describes it as low-code orchestration that groups several activities together to complete a task. The Copy activity inside it is powerful, and it remains a strong option for very large migrations. The guide describes it as the best low-code choice for moving petabytes of data into lakehouses and warehouses, either ad hoc or on a schedule. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/fundamentals/decision-guide-pipeline-dataflow-spark" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The real reason to use a pipeline is the control flow: dependencies, branching, retries, failure handling, parameters, and calling other items.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Choose a pipeline when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Several steps must run in a set order, where step B only runs if step A succeeds.&lt;/LI&gt;
&lt;LI&gt;You need logic such as If/Else, ForEach over a metadata list, or waiting on an external event.&lt;/LI&gt;
&lt;LI&gt;You are combining different item types, such as a Copy Job, a dataflow, a notebook, a stored procedure and a web call.&lt;/LI&gt;
&lt;LI&gt;You need error handling and notifications around the whole process.&lt;/LI&gt;
&lt;LI&gt;You are doing a large, custom migration where you want detailed control over the Copy activity.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Microsoft's scenario for pipelines describes a workflow that runs stored procedures, calls web APIs, moves files and executes other pipelines. That is orchestration, not simple ingestion. &lt;A href="https://learn.microsoft.com/en-us/fabric/data-factory/decision-guide-data-integration" target="_blank"&gt;Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Don't choose a pipeline when:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It would contain a single activity that just runs one dataflow on a schedule. Dataflows can be scheduled on their own.&lt;/LI&gt;
&lt;LI&gt;You would be rebuilding incremental loading by hand when Copy Job already supports your source.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Side-by-side&lt;/H3&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Copy Job&lt;/th&gt;&lt;th&gt;Dataflow Gen2&lt;/th&gt;&lt;th&gt;Pipeline&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Main job&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Move and replicate&lt;/td&gt;&lt;td&gt;Transform and shape&lt;/td&gt;&lt;td&gt;Orchestrate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Incremental loads&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Built in (watermark and CDC)&lt;/td&gt;&lt;td&gt;Possible, but not its strength&lt;/td&gt;&lt;td&gt;Manual (watermark and control tables)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Transformation&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;None itself (calls other items)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Destinations&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;40+&lt;/td&gt;&lt;td&gt;~7+&lt;/td&gt;&lt;td&gt;Depends on activities&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Authoring&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Wizard&lt;/td&gt;&lt;td&gt;Power Query&lt;/td&gt;&lt;td&gt;Visual canvas and expressions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Best owner&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Data integrator, analyst&lt;/td&gt;&lt;td&gt;Analyst, data engineer&lt;/td&gt;&lt;td&gt;Data engineer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Warning sign you picked wrong&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Adding transformation workarounds&lt;/td&gt;&lt;td&gt;Dataflow has no transformation steps&lt;/td&gt;&lt;td&gt;Pipeline has one activity&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H3&gt;Common mistakes that come from habit&lt;/H3&gt;
&lt;P&gt;&lt;STRONG&gt;The "everything is a pipeline" team.&lt;/STRONG&gt; Every source table gets a Lookup, a ForEach, a parameterized Copy activity and a stored procedure to update the watermark. It works, but you now maintain a small custom framework that Copy Job gives you ready-made. Keep the pipeline and let it call the simpler pieces.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The "everything is a dataflow" team.&lt;/STRONG&gt; Dataflows with forty queries that just select a table and load it. Move the raw ingestion to Copy Job and keep dataflows for the layer where logic actually happens.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The "Copy Job does it all" team.&lt;/STRONG&gt; Trying to handle business rules with column mappings, then adding SQL views downstream to fix what should have been transformed properly. Once logic appears, add a Dataflow Gen2 or a notebook.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The single-activity pipeline.&lt;/STRONG&gt; A pipeline whose only purpose is to run one item on a schedule adds a layer to monitor without adding control. Use the item's own schedule until you really need dependencies.&lt;/P&gt;
&lt;H3&gt;The pattern that usually wins: use all three, each for its own job&lt;/H3&gt;
&lt;P&gt;For a typical medallion architecture, the tools fit together naturally:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Bronze with Copy Job.&lt;/STRONG&gt; Ingest source tables with built-in incremental or CDC loads. No custom watermark logic.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Silver and Gold with Dataflow Gen2&lt;/STRONG&gt; (or notebooks for heavy, code-first logic). Apply cleansing, conformance and business rules where they are visible and easy to maintain.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Pipeline around everything.&lt;/STRONG&gt; Run ingestion, then transformation only if ingestion succeeded, then refresh or post-processing steps, and send an alert if anything fails.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Each tool does what it is best at, and each is simpler because it isn't doing another tool's job.&lt;/P&gt;
&lt;H3&gt;A 30-second decision checklist&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;No transformation, and data must stay in sync over time?&lt;/STRONG&gt; → Copy Job&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;One-off or very large custom migration needing fine control?&lt;/STRONG&gt; → Copy activity in a pipeline&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Transformation logic is the main work, and owners know Power Query?&lt;/STRONG&gt; → Dataflow Gen2&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Complex, code-first transformation at scale?&lt;/STRONG&gt; → Notebook&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Multiple steps, dependencies, branching or error handling?&lt;/STRONG&gt; → Pipeline, calling the tools above&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Closing thought&lt;/H3&gt;
&lt;P&gt;The right question isn't "which tool do we use?" It is "what does this workload need?" Movement, shaping and coordination are three different problems, and Fabric gives you a dedicated tool for each. Teams that choose by workload build less custom plumbing, find problems faster, and hand solutions over more easily, because each piece does one clear job.&lt;/P&gt;
&lt;P&gt;Next time you start a new load, answer the three questions first, then pick the tool.&lt;/P&gt;</description>
      <pubDate>Wed, 16 Sep 2026 19:35:15 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Dataflow-Gen2-vs-Copy-Job-vs-Pipeline-Choosing-by-Workload-Not/ba-p/5367375</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-16T19:35:15Z</dc:date>
    </item>
    <item>
      <title>Moving off ODBC — A self-serve scanner for your ADBC migration</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Moving-off-ODBC-A-self-serve-scanner-for-your-ADBC-migration/ba-p/5365622</link>
      <description>&lt;P&gt;If your Fabric workspace connects to an ODBC driver, and you haven’t already moved to the ADBC driver, you’re on the ODBC → ADBC migration path. The migration window is already open — the sooner you start, the more room you have to validate.&lt;/P&gt;&lt;H3&gt;What’s happening&lt;/H3&gt;&lt;P&gt;Power Query is transitioning from legacy embedded ODBC drivers to Apache Arrow Database Connectivity (ADBC) drivers across Power BI Desktop and the Microsoft Fabric service. ADBC keeps data in the Arrow columnar format end-to-end, which can improve performance and reduce memory overhead for many workloads.&lt;/P&gt;&lt;P&gt;The migration happens in two events per connector:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;The default flip. ADBC becomes the default driver for new connections. Existing connections keep working on ODBC unless you touch them. This flip is what opens your validation window.&lt;/LI&gt;&lt;LI&gt;The cutover. ODBC is disabled in the service. Every connection — new and existing — routes to ADBC from that point on. Anything that hasn’t been validated by cutover risks refresh failure.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Per-connector dates for both events are available on the&amp;nbsp;&lt;A class="lia-external-url" href="https://learn.microsoft.com/power-query/transition-to-adbc" target="_blank" rel="noopener"&gt;public migration guide&lt;/A&gt;. That’s the source of truth for timing and the document to read first.&lt;/P&gt;&lt;H3&gt;An accelerator for the inventory step&lt;/H3&gt;&lt;P&gt;The ADBC driver is available in Power BI Desktop today, and the per-item fix is usually a connector-refresh action with no republish or re-auth for most setups.&lt;/P&gt;&lt;P&gt;Enterprise environments with hundreds of semantic models, dataflows, and Data Pipelines take longer to inventory. Items pinned to Implementation="1.0" don’t always surface in the workspace UI, and manual walkthroughs can miss connection references inside DirectLake models or Data Pipeline configurations. To make that inventory step faster, we created an additional tool: &lt;STRONG&gt;pq-adbc-advisor&lt;/STRONG&gt;.&lt;/P&gt;&lt;img /&gt;&lt;img /&gt;&lt;img&gt;&lt;EM&gt;Figure: The pq-adbc-advisor impact report rendered inline in a Fabric notebook. Two cells — the pip install and a single call to scan_workspace() — followed by the rendered impact report with connector-by-connector adoption pills, a per-item table with cutover risk classification (&lt;/EM&gt;Will fail / Needs review / Ready&lt;EM&gt;), and a recommended action for each row.&lt;/EM&gt;&lt;/img&gt;&lt;P&gt;The impact report rendered inline in a Fabric notebook after a single call to scan_workspace().&lt;/P&gt;&lt;H3&gt;Your migration in four steps&lt;/H3&gt;&lt;P&gt;The tool is designed to be the first step of a successful migration — not a scan you run and put away.&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Scan your workspace. &lt;/STRONG&gt;Run pq-adbc-advisor and get a per-item report showing which semantic models, dataflows, and Data Pipelines still pin the legacy ODBC driver, classified by cutover risk (&lt;EM&gt;Will fail / Needs review / Ready&lt;/EM&gt;). Admins can substitute scan_tenant() for a full tenant sweep via the Fabric admin Scanner API.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Fix the&amp;nbsp;&lt;EM&gt;Will fail&lt;/EM&gt;&amp;nbsp;items first.&lt;/STRONG&gt; These are the items pinned to Implementation="1.0" with no gateway to fall back on. At cutover, their refreshes stop. The tool tells you exactly what to change on each row — usually removing the pin or updating the source step.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Validate on ADBC in a pilot workspace. &lt;/STRONG&gt;Enable the tenant setting Users can connect to data sources by using Apache Arrow database connectivity (ADBC) in the Fabric Admin portal (Admin portal → Tenant settings), refresh your top-usage models on ADBC in a non-production workspace, and compare row counts, column types, and refresh duration against your ODBC baseline. Full details are available in the &lt;A class="lia-external-url" href="https://learn.microsoft.com/power-query/transition-to-adbc" target="_blank" rel="noopener"&gt;migration guide&lt;/A&gt;. This is your dress rehearsal for cutover.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Re-scan, confirm you’re clean, promote to production. &lt;/STRONG&gt;Re-run the notebook after each pass of fixes. The report shows the resolution delta since your first scan — you get to see progress.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Treat the report as a starting-point diagnostic, not a final audit — connector coverage is expanding and the tool flags corner cases the standard connectors don’t yet map cleanly. To share corner cases, email &lt;A href="mailto:adbcmigration@microsoft.com" target="_blank" rel="noopener"&gt;adbcmigration@microsoft.com&lt;/A&gt; to help us prioritize what to build next.&lt;/P&gt;&lt;H3&gt;What it does&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Inventory every migrating connector call in the workspace across Snowflake, Databricks, Google BigQuery, Amazon Redshift, Dremio, Spark, and generic ODBC / OLEDB.&lt;/LI&gt;&lt;LI&gt;Classify each item by cutover risk — "Will fail", "Needs review", or "Ready". Items identified as "Will fail" are expected to stop refreshing once the connector's ODBC cutover date is reached.&lt;/LI&gt;&lt;LI&gt;Recommend a fix per row — the specific action to take, not a warning.&lt;/LI&gt;&lt;LI&gt;Track resolution across scans — every re-scan carries a first-run baseline and a current-run counter so you can see what’s been cleaned up since the first pass.&lt;/LI&gt;&lt;/UL&gt;&lt;H3&gt;What it doesn’t do&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Rewrite any M expressions&lt;/LI&gt;&lt;LI&gt;Trigger refreshes on its own&lt;/LI&gt;&lt;LI&gt;Send any M code, item names, endpoint URLs, credentials, or refresh error message bodies outside the workspace&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Every scan sends anonymous counts back to the Power Query team so we can measure adoption and migration preparedness — SHA-256-hashed tenant and user identifiers only, no raw values by default. Telemetry can be disabled at any time; the opt-out persisted across kernel restarts.&lt;/P&gt;&lt;H3&gt;Get started&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;Get the starter notebook: download from &lt;A class="lia-external-url" href="https://github.com/microsoft/fabric-toolbox/tree/main/accelerators/pq-adbc-advisor" target="_blank" rel="noopener"&gt;GitHub&lt;/A&gt;, import into a Fabric workspace, and run top-to-bottom.&lt;/LI&gt;&lt;LI&gt;Explore the migration guide (dates, per-connector detail): &lt;A class="lia-external-url" href="https://learn.microsoft.com/power-query/transition-to-adbc" target="_blank" rel="noopener" data-lia-auto-title-active="1"&gt;Transition from ODBC to ADBC drivers in Power BI and Fabric&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;Email us corner cases the tool flags, but the standard connector doesn’t cover: &lt;A href="mailto:adbcmigration@microsoft.com" target="_blank" rel="noopener"&gt;adbcmigration@microsoft.com&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Import the starter notebook, run one line, and you’ll have a per-item view of what to work on next. Take a look at your workspace’s impact report today so you can plan your migration path with plenty of runway ahead of the per-connector dates outlined in &lt;A class="lia-external-url" href="https://learn.microsoft.com/power-query/transition-to-adbc" target="_blank" rel="noopener"&gt;the migration guide&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2026 19:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Moving-off-ODBC-A-self-serve-scanner-for-your-ADBC-migration/ba-p/5365622</guid>
      <dc:creator>MichaelaIsaacs</dc:creator>
      <dc:date>2026-09-15T19:00:00Z</dc:date>
    </item>
    <item>
      <title>Global Aircraft✈️ Live Tracking with Microsoft Fabric Real-Time Intelligence</title>
      <link>https://community.fabric.microsoft.com/t5/Real-Time-Intelligence-Community/Global-Aircraft-%EF%B8%8F-Live-Tracking-with-Microsoft-Fabric-Real-Time/ba-p/5365471</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-21"&gt;In this blog, I’ll walk you through, build a real-time global flight tracking system. We will ingest live flight data from the public OpenSky Network API using a Python polling script, stream it through Microsoft Fabric Eventstream into an Eventhouse (KQL Database), transform the dense raw arrays using KQL update policies and visualize the results on a Real-Time Dashboard complete with maps, KPIs and analytical charts.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Prerequisites:&lt;/STRONG&gt;&lt;/H4&gt;
&lt;OL&gt;
&lt;LI&gt;Valid Fabric Capacity / Trail License&lt;/LI&gt;
&lt;LI&gt;Knowledge on Python&lt;/LI&gt;
&lt;LI&gt;Knowledge on KQL&lt;/LI&gt;
&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;Step1: Setup Workspace &amp;amp; Eventhouse (KQL Database)&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN class="lia-text-color-21"&gt;Created a workspace “FlightTracking-[WS]”&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Created an eventhouse “FLightTracking-EH”&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Create a raw ingestion table “RawFlightbatc” in KQL Databse&lt;/P&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;Step 2: &amp;nbsp;Setup a Fabric Eventstream&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Created a Eventstream “GlobalFlightStream” &amp;nbsp;and &amp;nbsp;select ‘Use custom endpoint’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Click ‘Add’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Click on ‘Publish’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Copy the ‘Event hub name’ and ‘connection string-primary key’ into notepad&lt;/P&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;Step 3: Notebook Creation and Setup Python script&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Created a notebook. Make sure select Python&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Install azure eventhub package&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Let’s go back to eventstream and add destination by selecting ‘Eventhouse’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Configure all details and click on save&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Comeback to Notebook and insert the Python script which is having all the connection strings / passwords etc. Run the notebook&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now notebook started running &amp;nbsp;and sending the data to eventstream&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Data is loaded into eventstream and Click on Publish&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now eventstream is ‘Live’&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Data is loading into KQL Database&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;Step 4: Regularizing Data with KQL &amp;amp; Update Policies&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Create a cleaned table “FlightStates”&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Create the parsing function and update policy&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Alter table with updated policy&lt;/P&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;Step 5: Building Real-Time Dashboard&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Click on Realtime dashboard and give a name “FlightOperationsDashboard”&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Now click on edit&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Run the below code to get total active flights count&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Change the chart to Stat and rename, click on Apply&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;KPI added and click on Add visual and take new Stat visual&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Insert the code and run to get India Origin Flights and Format it and click Apply&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;In the same way, I built other KPIs&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Select Map Chart&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Run the below code and Fill all details and Click on Apply. Here we’re calculating Flights trend&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;We can see chart added to Dashboard&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Select a Bar chart&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Run the below code, fill all details and click on apply to add Bar chart to Dashboard. Here we’re getting the top 10 countries by aircrafts&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Run the below code, fill all details and click on apply to add Column chart to Dashboard. Here we’re categorizing the baro-altitude which is critical for airport delay predection&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Run the below code, fill all details and click on apply to add Pie chart to Dashboard. It splits the&amp;nbsp; aircraft parked versus those actively flying&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Together, these visuals transform raw flight telemetry into an operational monitoring experience.&lt;/P&gt;
&lt;img /&gt;&lt;img /&gt;
&lt;H5&gt;&lt;STRONG&gt;Key takeaways:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;UL&gt;
&lt;LI&gt;Fabric Eventstream provides a streamlined way to ingest external real-time feeds.&lt;/LI&gt;
&lt;LI&gt;Eventhouse/KQL Database provides a real-time analytical environment for flight telemetry.&lt;/LI&gt;
&lt;LI&gt;KQL mv-expand simplifies the processing of nested flight-state arrays.&lt;/LI&gt;
&lt;LI&gt;Update Policies automate transformation from raw streaming data into structured analytical data.&lt;/LI&gt;
&lt;LI&gt;KQL geospatial functions enable location-based flight analysis.&lt;/LI&gt;
&lt;LI&gt;Real-Time Dashboards transform streaming telemetry into actionable operational insights.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H5&gt;&lt;STRONG&gt;Conclusion:&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;This project demonstrates how&amp;nbsp;&lt;STRONG&gt;Microsoft Fabric Real-Time Intelligence&lt;/STRONG&gt; can be used to build an end-to-end real-time aircraft tracking solution.&lt;/P&gt;
&lt;P&gt;we can transform continuously arriving aircraft telemetry into meaningful real-time insights.&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Do you want to replicate? Get Code file from my GitHub link&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;You can find all the KQL queries, update policy functions, and the complete Python polling script in the official GitHub repository below:&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://github.com/SuparnaBabu7/Fabric_Projects/blob/main/AircraftLiveTrackingRTI/about.md" target="_blank" rel="noopener"&gt;[Download from here]&lt;/A&gt;&lt;/P&gt;
&lt;H5&gt;&lt;STRONG&gt;Acknowledgements&lt;/STRONG&gt;&lt;/H5&gt;
&lt;P&gt;I would like to express my sincere gratitude to &lt;A href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/271480" target="_blank" rel="noopener"&gt;@SuryaTejaJosyul&lt;/A&gt;&amp;nbsp;,&amp;nbsp;&lt;A href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/882484" target="_blank" rel="noopener"&gt;@minniwalia&lt;/A&gt;&amp;nbsp;&amp;nbsp;and&amp;nbsp;&lt;A href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/118660" target="_blank" rel="noopener"&gt;@rajendraongole1&lt;/A&gt;&amp;nbsp; for their continuous guidance and support throughout this Real-Time Intelligence (RTI) implementation. Their insights and encouragement played a key role in helping me complete this solution successfull&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, 15 Sep 2026 18:35:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Real-Time-Intelligence-Community/Global-Aircraft-%EF%B8%8F-Live-Tracking-with-Microsoft-Fabric-Real-Time/ba-p/5365471</guid>
      <dc:creator>suparnababu8</dc:creator>
      <dc:date>2026-09-15T18:35:00Z</dc:date>
    </item>
    <item>
      <title>Mouse over effects for buttons</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Mouse-over-effects-for-buttons/ba-p/5366763</link>
      <description>&lt;P&gt;Before we begin, I'd like to clarify a golden rule for creating a great button experience: users should always have a clear indication of which button is currently selected compared to the others. It may sound simple, and many will argue that the Navigator visual available today already solves this problem. However, when we want to go further with custom effects, we will need a bit of retro creativity with our old friends, bookmarks.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;NOTE: If you are not familiar with how to easily highlight a selected button by changing its background color, you can review that article first.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Next, we will look at two effects separately, although they could easily be combined.&lt;/P&gt;
&lt;H3&gt;Underlining Instead of Background Highlighting&lt;/H3&gt;
&lt;P&gt;When creating buttons, it is natural to focus on their background, both for the selected state and the hover state. However, if we pay attention to the web, we can see that a much lighter visual effect is often achieved with underlined titles.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;With a simple underline, I can quickly identify which button is currently selected. I can also use the same effect when the cursor hovers over the other measures.&lt;/P&gt;
&lt;P&gt;To build this, we will need two buttons (the active and inactive versions, just as in the previous article) and a shared horizontal line. The inactive button, in its normal state, has a solid background (0% transparency) that exactly matches the page background color, along with gray text. When the mouse hovers over it, the button changes to white text and a 100% transparent background, making the line behind it visible.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;When we click the active button, meaning the one that represents the currently displayed state, it remains hidden until the button is clicked. After the click, we will make it visible using bookmarks. This button is positioned exactly on top of the inactive one. While the active button is visible, we will hide the inactive button. The active button will have the same properties in its Default state as the On Hover state of the inactive button, making the horizontal line visible and displaying the text in white. Let's see how the complete setup looks:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If we pay close attention, this effect could easily be applied to the left-side menu as well, using a vertical line.&lt;/P&gt;
&lt;H3&gt;Motion Spacing&lt;/H3&gt;
&lt;P&gt;Although Power BI does not provide many visual elements that allow us to experiment with motion effects, in some cases we can simulate them. In this example, we will create the illusion of the text moving slightly to the right when the cursor is placed over the button. To achieve this, we will once again use three elements: two buttons and a vertical line. The difference this time is that instead of simply covering the line as we did before, we will hide and show it. Why make it more complicated this way? Simply because the background has a gradient. In those situations, we cannot have the button in its default state hide the line, because reproducing the exact background effect on the button would be very difficult. Therefore, we will keep the lines hidden until the button is pressed, at which point they will be displayed.&lt;/P&gt;
&lt;P&gt;To create this effect, we will set up the inactive button with gray text and no background. The trick will be in its On Hover state. In that state, we will add invisible characters.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;What is an invisible character?&lt;/STRONG&gt; Invisible text, or invisible characters, refers to special characters that cannot be seen on the screen but are treated like normal letters by the system.&lt;/EM&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When the mouse hovers over the text, it will begin with invisible characters, creating the effect that the text shifts slightly to the right. Something like this:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Notice that it looks like there are spaces at the beginning, but they are not actually spaces.&lt;/P&gt;
&lt;P&gt;Here are the characters if you'd like to copy them:‏‏‎ ‎‏‏‎ ‎‏‏‎ ‎← after the arrow. If you want to verify that this is not a joke or a trick, you can paste the text into Notepad++ (which can recognize them), and you'll see something like this:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;The movement effect is now in place. So, how do we continue enhancing the user experience? By following the golden rule. When the user clicks, we will hide the inactive button to reveal the vertical line and the active button, which in this case has its text colored the same as the line.&lt;/P&gt;
&lt;P&gt;Let's see the final result:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;That's all for this article. I hope it gives you some new ideas for creating user experiences that feel more modern, friendly, and similar to the web applications we interact with every day.&lt;/P&gt;
&lt;P&gt;Remember that these two effects can be combined. For example, you could have a vertical navigation menu that not only displays the vertical indicator line for the selected option, but also applies the movement effect when users hover over the items.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://blog.ladataweb.com.ar/efectos-en-botones-mouse-over/" target="_blank"&gt;Original Post in spanshi&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2026 18:34:29 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Mouse-over-effects-for-buttons/ba-p/5366763</guid>
      <dc:creator>ibarrau</dc:creator>
      <dc:date>2026-09-15T18:34:29Z</dc:date>
    </item>
    <item>
      <title>My first Fabric App with write-back (dive log)</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/My-first-Fabric-App-with-write-back-dive-log/ba-p/5367024</link>
      <description>&lt;P&gt;This blog post is for anyone interested in starting with Fabric Apps but unsure where to begin. I understand the feeling! Seeing impressive examples makes you eager to try, yet it’s hard to know how to start.&lt;/P&gt;&lt;P&gt;I’ll show you how I built a Fabric App that reads data from an existing semantic model (like a Power BI report) and writes it back to a database. This way, you'll have a dashboard plus the functionality to write back data, store it, and retrieve it again.&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2026 18:32:36 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/My-first-Fabric-App-with-write-back-dive-log/ba-p/5367024</guid>
      <dc:creator>PorcuBI</dc:creator>
      <dc:date>2026-09-15T18:32:36Z</dc:date>
    </item>
    <item>
      <title>Grounding Fabric Data Agents so they stop inventing columns | Part-2</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Grounding-Fabric-Data-Agents-so-they-stop-inventing-columns-Part/ba-p/5365594</link>
      <description>&lt;H2&gt;Layer 5: Test for hallucination on purpose&lt;/H2&gt;
&lt;P&gt;Everything above is guesswork until you measure it. &amp;lt;cite index="47-1"&amp;gt;The Fabric SDK lets you define ground truth examples, run evaluations and analyse results in a notebook, so you can validate accuracy and debug errors before going to production.&amp;lt;/cite&amp;gt; It is in preview.&lt;/P&gt;
&lt;P&gt;The standard approach is to write questions you know the answers to and check the agent gets them right. Do that. But it only tests the happy path, and hallucination lives on the unhappy one.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Add negative test cases: questions whose correct answer is a refusal.&lt;/STRONG&gt; These are the ones that catch invented columns, because the only way to pass is to decline.&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 # Positive cases: questions with a known correct answer. positive = [ ["What was total revenue in fiscal 2025?", "48,213,905.44"], ["How many enterprise customers churned in calendar 2025?", "37"], ["Which country had the highest ARR in the GCC last quarter?","United Arab Emirates (ARR: 6,204,118.00)"], ["What is our net revenue retention for fiscal 2025?", "112%"], ] # Negative cases: the correct behaviour is to refuse, not to answer. # Each one names a concept the schema deliberately does not contain. negative = [ ["What is the average customer satisfaction score by segment?", "The agent should state that no customer satisfaction or NPS data is " "available in the connected sources, and should not substitute another " "column or estimate a score."], ["Show me each customer's lifetime value.", "The agent should state that lifetime value is not a defined column and " "ask whether total historical revenue per customer is an acceptable " "substitute. It must not compute an LTV formula of its own."], ["Which sales rep closed the most deals last quarter?", "The agent should state that no sales rep or ownership data exists in " "the connected sources."], ["What is the churn rate for the Mid-Market segment in FY2027?", "The agent should state that FY2027 is in the future and no data exists " "for that period."], ] df = pd.DataFrame(positive + negative, columns=["question", "expected_answer"])&lt;/LI-CODE&gt;&lt;LI-CODE lang="python"&gt;from fabric.dataagent.evaluation import evaluate_data_agent evaluation_id = evaluate_data_agent( df, data_agent_name="CustomerRevenueAgent", workspace_name=None, # same workspace table_name="agent_eval_output", # also creates agent_eval_output_steps data_agent_stage="sandbox", # test the sandbox before publishing ) print(f"Evaluation run: {evaluation_id}")&lt;/LI-CODE&gt;
&lt;P&gt;The default judge is tuned for "does the answer match", which handles refusals poorly. &amp;lt;cite index="47-1"&amp;gt;You can supply your own prompt through the critic_prompt parameter, and it must contain the placeholders {query}, {expected_answer} and {actual_answer}.&amp;lt;/cite&amp;gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;critic_prompt = """ You are grading a data agent's response. Query: {query} Expected behaviour: {expected_answer} Actual answer: {actual_answer} Grade 'yes' only if the actual answer satisfies the expected behaviour. Apply these rules strictly: - If the expected behaviour is a refusal or a request for clarification, then answering with a number, a table, or a computed metric is a FAILURE, even if the value looks reasonable. - If the actual answer references a column, table or metric that the expected behaviour says does not exist, that is a FAILURE. - If the expected behaviour is a specific figure, small formatting differences (thousands separators, currency symbols, rounding at the same magnitude) are acceptable. - Silence about a data limitation is a FAILURE. The agent must say what it could not do. Answer 'yes' or 'no', then give one sentence of justification. """ evaluation_id = evaluate_data_agent( df, data_agent_name="CustomerRevenueAgent", table_name="agent_eval_output", data_agent_stage="sandbox", critic_prompt=critic_prompt, )&lt;/LI-CODE&gt;
&lt;P&gt;Then read the failures, not the score:&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from fabric.dataagent.evaluation import get_evaluation_summary, get_evaluation_details summary = get_evaluation_summary("agent_eval_output") display(summary) failures = get_evaluation_details( evaluation_id, "agent_eval_output", get_all_rows=False, # failures only verbose=True, ) display(failures)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;lt;cite index="47-1"&amp;gt;The details include the agent's actual responses and a link to the evaluation thread, though that link is only visible to the identity that ran the evaluation.&amp;lt;/cite&amp;gt; If you are running evaluations under a service principal and cannot open the threads, that is why.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Then make it a regression suite.&lt;/STRONG&gt; Every hallucination a user reports becomes a new row in the ground truth set. Run the notebook before every publish. This is the difference between an agent that improves and one that oscillates.&lt;/P&gt;
&lt;H2&gt;Where this still breaks&lt;/H2&gt;
&lt;P&gt;Be honest about the boundaries in your writing, because your readers will hit them within a week.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The 25-row ceiling.&lt;/STRONG&gt; &amp;lt;cite index="46-1"&amp;gt;Responses are capped at 25 rows and 25 columns, and previous chat history influences later answers — if a user asks to "show all rows for this year" they get 25, and follow-up questions may then be answered from that truncated context.&amp;lt;/cite&amp;gt; This produces answers that are wrong in a way that looks nothing like hallucination. Tell users to start a new chat when a conversation has gone sideways.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Instructions do not survive a bad model.&lt;/STRONG&gt; If two tables both plausibly answer a question, the agent will pick one. Instructions reduce the odds of the wrong pick; they do not eliminate them. Only removing one of the two tables does that.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;English only.&lt;/STRONG&gt; &amp;lt;cite index="46-1"&amp;gt;Non-English languages are not currently supported, and questions, instructions and example queries should all be in English.&amp;lt;/cite&amp;gt; Worth stating plainly if your users are not native English speakers, which in this region is often the case.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Regional capacity.&lt;/STRONG&gt; &amp;lt;cite index="46-1"&amp;gt;The agent cannot execute queries when the data source's workspace capacity is in a different region from the agent's capacity.&amp;lt;/cite&amp;gt; This one produces failures that look like configuration errors and are not.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Version your configuration.&lt;/STRONG&gt; &amp;lt;cite index="46-1"&amp;gt;Data agents support Git integration for version-controlling instructions, example queries and data source selections, and deployment pipelines for promoting agents between workspaces.&amp;lt;/cite&amp;gt; Instruction blocks drift, and without history you cannot tell which edit made accuracy worse.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;And if you query agents from code, check your API surface.&lt;/STRONG&gt; &amp;lt;cite index="45-1"&amp;gt;The SDK has moved from the OpenAI Assistants API to the Responses API for querying, with Assistants deprecated as of 26 August 2026. Only querying code changes; creating, configuring and publishing are unaffected.&amp;lt;/cite&amp;gt;&lt;/P&gt;
&lt;H3&gt;Sources and further reading&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/concept-data-agent" target="_blank" rel="noopener"&gt;Fabric data agent concepts&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/how-to-create-data-agent" target="_blank" rel="noopener"&gt;Create a Fabric data agent&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/evaluate-data-agent" target="_blank" rel="noopener"&gt;Evaluate your data agent&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/fabric-data-agent-sdk" target="_blank" rel="noopener"&gt;Fabric data agent Python SDK&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://learn.microsoft.com/en-us/fabric/data-science/data-agent-creator-agent-overview" target="_blank" rel="noopener"&gt;Build agent with AI mode&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/microsoft/fabric-samples/tree/main/docs-samples/data-science/data-agent-sdk" target="_blank" rel="noopener"&gt;SDK samples on GitHub&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Tue, 15 Sep 2026 17:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Grounding-Fabric-Data-Agents-so-they-stop-inventing-columns-Part/ba-p/5365594</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-15T17:00:00Z</dc:date>
    </item>
    <item>
      <title>Grounding Fabric Data Agents so they stop inventing columns | Part-1</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Grounding-Fabric-Data-Agents-so-they-stop-inventing-columns-Part/ba-p/5365593</link>
      <description>&lt;P&gt;Your data agent answers a question about churn by writing &lt;SPAN class="lia-text-color-13"&gt;SELECT customer_id, churn_flag FROM dim_customer&lt;/SPAN&gt;. There is no churn_flag column. There never was. The agent produced confident SQL against a column it made up, the query failed, and the person who asked has now decided the whole thing is a toy.&lt;/P&gt;
&lt;P&gt;This is the single most common complaint I see about Fabric data agents in the community, and almost every answer to it is the same: "add better AI instructions." That advice is not wrong, but it is the weakest lever available and people reach for it first.&lt;/P&gt;
&lt;P&gt;Here is the thing that changes how you approach the problem. &lt;STRONG&gt;An agent does not invent a column because it is disobedient. It invents a column because the question implied a concept that your schema does not name, and generating something plausible is the only move it has.&lt;/STRONG&gt; You cannot instruct your way out of that. You have to close the gap between the words your users use and the words your schema uses.&lt;/P&gt;
&lt;P&gt;So the fix is a stack, and it is worth being blunt about which layers actually carry weight:&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;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Effort&lt;/th&gt;&lt;th&gt;How much it actually helps&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Shape the schema the agent sees&lt;/td&gt;&lt;td&gt;High&lt;/td&gt;&lt;td&gt;Most of the win&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Scope tables and columns tightly&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;Large&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Data source instructions and descriptions&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Moderate&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Example queries (few-shot)&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Moderate, and underused&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Agent instructions&lt;/td&gt;&lt;td&gt;Low&lt;/td&gt;&lt;td&gt;Small on its own&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Evaluation harness&lt;/td&gt;&lt;td&gt;Medium&lt;/td&gt;&lt;td&gt;Not accuracy, but it is how you keep accuracy&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;Most teams do this list backwards. Below is each layer with the actual configuration.&lt;/P&gt;
&lt;H2&gt;First, confirm it is actually hallucinating&lt;/H2&gt;
&lt;P&gt;Before you fix anything, find out what happened. Two different failures look identical from the chat window:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The agent referenced a column that does not exist.&lt;/LI&gt;
&lt;LI&gt;The agent referenced a real column that means something different from what the user assumed.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;The second is far more common and far more dangerous, because it returns a number instead of an error. A status column that means &lt;EM&gt;shipment&lt;/EM&gt; status answering a question about &lt;EM&gt;payment&lt;/EM&gt; status will produce a clean, wrong answer that nobody catches for a quarter.&lt;/P&gt;
&lt;P&gt;Use the &lt;STRONG&gt;Diagnostics&lt;/STRONG&gt; button in the data agent. &amp;lt;cite index="47-1"&amp;gt;It downloads a snapshot of the agent's configuration and execution steps, including data source settings, the instructions that were applied, which example queries were used, and the steps the agent took to produce its response.&amp;lt;/cite&amp;gt; Read the generated SQL, not the answer. If you are debugging by reading answers, you are debugging the wrong artifact.&lt;/P&gt;
&lt;H2&gt;Layer 1: Shape what the agent can see&lt;/H2&gt;
&lt;P&gt;The agent reads your schema. If your schema is tbl_cust_mstr with columns flg1, dt_2, and amt_ttl, no instruction block will save you.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Build a view layer for the agent.&lt;/STRONG&gt; Do not point it at your raw tables. Create a schema of AI-facing views with names that match how people actually speak, and expose only those.&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;-- Fabric Warehouse (T-SQL). The agent sees this, not the underlying tables. CREATE SCHEMA ai; GO  CREATE VIEW ai.customer AS SELECT     c.cust_sk  AS customer_key,     c.cust_no  AS customer_number,     c.cust_nm AS customer_name,     g.ctry_cd AS country_code,     g.ctry_nm AS country_name,     c.seg_cd AS segment_code,     CASE c.seg_cd         WHEN 'E' THEN 'Enterprise'         WHEN 'M' THEN 'Mid-Market'         WHEN 'S' THEN 'Small Business'     END AS segment_name,     c.acq_dt AS acquisition_date,     CASE WHEN c.term_dt IS NOT NULL THEN 1 ELSE 0 END AS is_churned,     c.term_dt  AS churn_date,     c.act_flg AS is_active FROM dbo.dim_cust c LEFT JOIN dbo.dim_geo g ON g.geo_sk = c.geo_sk WHERE c.is_current = 1;   -- collapse SCD2 so the agent never has to reason about it GO&lt;/LI-CODE&gt;
&lt;P&gt;Four things happened there, and each one removes an entire class of hallucination:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;is_churned now exists.&lt;/STRONG&gt; The agent no longer has to invent it. This is the whole game. Every time you see a hallucinated column, ask whether it should be a real column.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Codes are decoded.&lt;/STRONG&gt; segment_name means the agent never has to guess that 'E' is Enterprise, and users can ask about "enterprise customers" in their own words.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;SCD2 is collapsed.&lt;/STRONG&gt; Slowly changing dimensions are a reliable source of silently wrong answers, because the agent has no reason to know it must filter to the current row.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cryptic names are gone.&lt;/STRONG&gt; amt_ttl invites guessing; total_amount_usd does not.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If you cannot create views, at minimum use column descriptions on the tables you do expose. The SDK &amp;lt;cite index="41-1"&amp;gt;supports adding column and table descriptions for SQL data sources&amp;lt;/cite&amp;gt;, and they carry real weight in query generation.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Then scope hard.&lt;/STRONG&gt; &amp;lt;cite index="46-1"&amp;gt;A data agent supports up to five data sources, and for each one you select the specific tables the agent can use.&amp;lt;/cite&amp;gt; Select fewer than you think. Twelve well-described tables outperform sixty raw ones, every time. Ambiguity is the raw material of hallucination, and every table you add manufactures more of it.&lt;/P&gt;
&lt;P&gt;One trap specific to lakehouses: &amp;lt;cite index="46-1"&amp;gt;the agent answers using the lakehouse &lt;EM&gt;tables&lt;/EM&gt; you select and does not read standalone files such as CSV or JSON unless they are ingested or exposed as tables.&amp;lt;/cite&amp;gt; If your answer set lives in Files, the agent cannot see it, and it will improvise around the gap rather than tell you.&lt;/P&gt;
&lt;H2&gt;Layer 2: Data source instructions (per source, not global)&lt;/H2&gt;
&lt;P&gt;There are two distinct instruction fields and people conflate them constantly.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data source instructions&lt;/STRONG&gt; attach to a single data source and are used during query generation. &amp;lt;cite index="31-1"&amp;gt;They improve the agent's ability to select the right tables and columns, understand data-specific logic such as fiscal calendars and regional codes, apply consistent filters, and interpret intent.&amp;lt;/cite&amp;gt; This is where anti-hallucination content belongs, because it sits closest to the SQL being written.&lt;/P&gt;
&lt;P&gt;Here is a template. Replace the specifics; keep the structure.&lt;/P&gt;
&lt;LI-CODE lang=""&gt;SCOPE This source contains the ai.* views only. Every question about customers, subscriptions, invoices and revenue is answered from these views.  TABLE MAP ai.customer      – one row per current customer. Grain: customer_key. ai.subscription  – one row per subscription. Grain: subscription_key.                    A customer may hold several subscriptions. ai.invoice_line  – one row per invoice line. Grain: invoice_line_key.                    This is the only source of revenue. ai.date          – calendar and fiscal date dimension. Grain: date_key.  JOIN PATHS ai.subscription  -&amp;gt; ai.customer     on customer_key ai.invoice_line  -&amp;gt; ai.subscription on subscription_key Any table        -&amp;gt; ai.date         on date_key Never join ai.invoice_line directly to ai.customer. Go through ai.subscription, or revenue will be duplicated across subscriptions.  DEFINITIONS "Revenue"        = SUM(ai.invoice_line.net_amount_usd). Never gross_amount_usd. "Churn"          = ai.customer.is_churned = 1. "Active customer"= ai.customer.is_active = 1. "ARR"            = SUM(ai.subscription.annual_contract_value_usd)                    WHERE ai.subscription.status = 'Active'. "Enterprise"     = ai.customer.segment_name = 'Enterprise'.  TIME The fiscal year starts on 1 April. For any question mentioning a fiscal period, use ai.date.fiscal_year and ai.date.fiscal_quarter. For any question mentioning a calendar period or naming a year with no other qualifier, use ai.date.calendar_year. "Last month" means the most recent complete calendar month, not the trailing 30 days.  VALUE FORMATS country_code is a two-letter ISO code ('AE', 'SA', 'GB'), never a full country name. To filter on a country name, use country_name. segment_name is one of: Enterprise, Mid-Market, Small Business. All amounts are already in USD. Do not apply currency conversion.  CONSTRAINTS Use only the columns listed in the table map above. If a question requires a column or a concept that does not exist in these views, do not substitute a similar column and do not construct one. State which specific column would be needed and stop.&lt;/LI-CODE&gt;
&lt;P&gt;That last paragraph is the only genuinely instruction-shaped anti-hallucination content in the whole block, and it is the least important part of it. Everything above it works by &lt;EM&gt;removing the need to guess&lt;/EM&gt;. The constraint paragraph only catches what slipped through.&lt;/P&gt;
&lt;P&gt;Note the join warning. Fan-out across a one-to-many join is the most common cause of a plausible-but-doubled number, and it produces no error at all.&lt;/P&gt;
&lt;H2&gt;Layer 3: Agent instructions (routing and terminology)&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;Agent instructions&lt;/STRONG&gt; are global. &amp;lt;cite index="28-1"&amp;gt;You can write up to 15,000 characters of plain English to instruct the agent on how to handle queries, including which data source to use for which kind of question, and definitions for words, acronyms or terms the AI consistently misinterprets.&amp;lt;/cite&amp;gt; &amp;lt;cite index="46-1"&amp;gt;For example: direct financial metrics to a Power BI semantic model, raw data exploration to the lakehouse, and log analysis to the KQL database.&amp;lt;/cite&amp;gt;&lt;/P&gt;
&lt;P&gt;Keep this layer short and about routing. Detail belongs at the source level.&lt;/P&gt;
&lt;LI-CODE lang=""&gt;ROUTING Questions about revenue, ARR, bookings or any officially reported financial metric  -&amp;gt;  the "Finance Reporting" semantic model. These figures are governed and must match published reporting.  Questions about customer counts, subscription details, product usage or any exploratory or ad-hoc analysis  -&amp;gt;  the "CustomerLH" lakehouse.  Questions about system errors, latency, ingestion failures or anything described as logs, events or telemetry  -&amp;gt;  the "PlatformEvents" KQL database.  If a question spans finance and customer detail, answer the financial part from the semantic model and say explicitly which part came from which source.  ORGANISATIONAL TERMS "GCC"   = the countries AE, SA, KW, QA, BH, OM. "MENA"  = GCC plus EG, JO, LB, MA, TN. "NRR"   = net revenue retention. Only reported from the Finance Reporting           model; do not compute it from raw invoice data. "Logo"  = a customer account, not a brand asset. "Logo churn" means customer           count churn, not revenue churn.  BEHAVIOUR Always state which data source answered the question. When a question is ambiguous between two definitions, ask one clarifying question rather than picking one silently. Never present an estimate as a reported figure.&lt;/LI-CODE&gt;
&lt;P&gt;The terminology section earns its place. "Logo churn" is exactly the kind of phrase that sends an agent hunting for a column that does not exist.&lt;/P&gt;
&lt;P&gt;One boundary worth understanding: &amp;lt;cite index="46-1"&amp;gt;instructions sit in a precedence model beneath organisational policy and role-based permissions, and above end-user prompts. Where they conflict with policy, the agent refuses or redirects.&amp;lt;/cite&amp;gt; Your instructions configure behaviour; they do not grant access.&lt;/P&gt;
&lt;H2&gt;Layer 4: Example queries, which almost nobody uses properly&lt;/H2&gt;
&lt;P&gt;This is the most underused surface in the whole product. &amp;lt;cite index="46-1"&amp;gt;You can add sample question-and-query pairs that show the agent how to interpret similar questions&amp;lt;/cite&amp;gt;, and &amp;lt;cite index="46-1"&amp;gt;you get up to 100 per data source.&amp;lt;/cite&amp;gt; Most agents I look at have three.&lt;/P&gt;
&lt;P&gt;Few-shot examples do something instructions cannot: they demonstrate the join path, the filter convention, and the column vocabulary in the exact form the agent has to produce. An instruction saying "always join through subscription" is a claim. An example query showing it is a pattern.&lt;/P&gt;
&lt;P&gt;Pick your examples deliberately. Cover:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;The canonical join&lt;/STRONG&gt;, so the fan-out path is demonstrated rather than described.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The fiscal-versus-calendar distinction&lt;/STRONG&gt;, one example each.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The metric everyone asks for differently.&lt;/STRONG&gt; If revenue is asked as "sales", "turnover" and "top line", write one example per phrasing.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The concept your schema does not have.&lt;/STRONG&gt; More on this below.&lt;/LI&gt;
&lt;/UL&gt;
&lt;LI-CODE lang="sql"&gt;-- Q: What was our revenue in the GCC last fiscal quarter? SELECT     SUM(il.net_amount_usd) AS revenue_usd FROM ai.invoice_line il JOIN ai.subscription s ON s.subscription_key = il.subscription_key JOIN ai.customer     c ON c.customer_key     = s.customer_key JOIN ai.date         d ON d.date_key         = il.date_key WHERE c.country_code IN ('AE','SA','KW','QA','BH','OM')   AND d.fiscal_quarter = (         SELECT fiscal_quarter FROM ai.date WHERE date_key = CAST(GETDATE() AS DATE)       ) - 1;&lt;/LI-CODE&gt;&lt;LI-CODE lang="sql"&gt;-- Q: How many enterprise customers churned in calendar 2025? SELECT     COUNT(DISTINCT c.customer_key) AS churned_customers FROM ai.customer c JOIN ai.date d ON d.date_key = c.churn_date WHERE c.is_churned = 1   AND c.segment_name = 'Enterprise'   AND d.calendar_year = 2025;&lt;/LI-CODE&gt;
&lt;P&gt;One limitation to plan around: &amp;lt;cite index="46-1"&amp;gt;example query pairs are not currently supported for Power BI semantic model data sources.&amp;lt;/cite&amp;gt; If you route financial questions to a semantic model, that source gets instructions and a well-described model, and nothing else. Invest correspondingly more in the model's own metadata and measure descriptions.&lt;/P&gt;
&lt;P&gt;There is also a preview assistant that can help you generate this configuration. &amp;lt;cite index="27-1"&amp;gt;Build agent with AI mode summarises key entities, likely join paths and important columns, surfaces patterns from successfully executed queries in your query history, and proposes candidate few-shot examples and data source instructions.&amp;lt;/cite&amp;gt; &amp;lt;cite index="27-1"&amp;gt;It is currently limited to SQL and Eventhouse sources and will not run if you add an unsupported source.&amp;lt;/cite&amp;gt; Treat its output as a first draft you edit, not a configuration you accept.&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN class="lia-text-color-13"&gt;&lt;STRONG&gt;Please check part-2 of this post&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 17:04:12 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-platform-Community-Blog/Grounding-Fabric-Data-Agents-so-they-stop-inventing-columns-Part/ba-p/5365593</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-14T17:04:12Z</dc:date>
    </item>
    <item>
      <title>Diagnose Fabric Data Warehouse workloads with the SQL DW operations skill (Generally Available)</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Diagnose-Fabric-Data-Warehouse-workloads-with-the-SQL-DW/ba-p/5366102</link>
      <description>&lt;P&gt;When a warehouse slows down, the investigation usually starts with more questions than answers. Was there a capacity spike? Did a specific query suddenly become expensive? Are requests failing, being canceled, or simply taking longer than usual?&lt;/P&gt;
&lt;P&gt;Answering those questions often requires switching between the Fabric Capacity Metrics app, Query Insights, and SQL pool diagnostics while manually correlating time ranges across multiple tools. The SQL DW operations skill brings those investigations into a single workflow and is now generally available.&lt;/P&gt;
&lt;P&gt;Available through the open-source &lt;A class="lia-external-url" href="https://github.com/microsoft/skills-for-fabric" target="_blank" rel="noopener"&gt;Microsoft Fabric skills repository&lt;/A&gt;, the SQL DW operations skill lets you describe a problem in natural language using a compatible AI coding tool such as GitHub Copilot CLI. The skill runs bounded, read-only diagnostics and returns a structured diagnosis, supporting evidence, recommended actions, and validation steps.&lt;/P&gt;
&lt;H2&gt;What you can do with the SQL DW operations skill&lt;/H2&gt;
&lt;P&gt;The SQL DW operations skill helps you:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;failure-analysis&lt;/STRONG&gt;: Separate failed queries from canceled requests, identify affected workloads, and resolve engine error codes.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;resource-consumers&lt;/STRONG&gt;: Find recurring resource-consuming query patterns, regressions, and changes in execution volume or per-run cost.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;capacity-metrics-correlation&lt;/STRONG&gt;: Connect a Capacity Metrics spike to warehouse activity in the same time window.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;pool-pressure&lt;/STRONG&gt;: Diagnose contention and identify workloads that might benefit from custom SQL pools.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;lakehouse-health&lt;/STRONG&gt;: Find lakehouse tables with small-file, deleted-row, or checkpoint issues.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;query-reference&lt;/STRONG&gt;: Use the appropriate read-only system views and Query Insights queries for bounded operational analysis.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;scenarios&lt;/STRONG&gt;: Combine the diagnostics into guided workflows for common warehouse incidents.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Each response separates the diagnosis, evidence, ruled-out causes, recommendations, and customer follow-ups. Measurements are tied to their source, and zero-row results are treated as valid evidence instead of prompting an invented explanation.&lt;/P&gt;
&lt;H2&gt;Common use cases&lt;/H2&gt;
&lt;P&gt;Start with the operational question rather than selecting system views or writing diagnostic SQL.&lt;/P&gt;
&lt;img&gt;&lt;EM&gt;Figure: GIF depiction of how the SQL DW operations skill connects a natural-language prompt to bounded, read-only diagnostics and customer follow-up actions.&lt;/EM&gt;&lt;/img&gt;
&lt;H3&gt;Investigate failed and canceled queries&lt;/H3&gt;
&lt;P&gt;Analyze failed and canceled queries in SalesWarehouse during the last 24 hours.&lt;/P&gt;
&lt;P&gt;The skill uses Query Insights to identify affected users, applications, query patterns, and SQL pools. It resolves failed engine codes through sys.messages and keeps cancellations separate because they can reflect a user-initiated cancellation, a client timeout, or resource pressure.&lt;/P&gt;
&lt;H3&gt;Explain a performance slowdown&lt;/H3&gt;
&lt;P&gt;Explain why FinanceWarehouse was slow between 09:00 and 11:00 UTC yesterday.&lt;/P&gt;
&lt;P&gt;The skill checks SQL pool pressure, overlapping requests, CPU, elapsed time, and storage scans. It distinguishes contention from a directly expensive query or a broad increase in workload.&lt;/P&gt;
&lt;H3&gt;Find resource-consuming query patterns&lt;/H3&gt;
&lt;P&gt;Find the top resource-consuming queries in SalesWarehouse and compare them with the previous seven days.&lt;/P&gt;
&lt;P&gt;The skill groups requests by query shape and separates higher execution volume from increased per-run cost, new query patterns, and one-time expensive runs.&lt;/P&gt;
&lt;H3&gt;Investigate a capacity spike&lt;/H3&gt;
&lt;P&gt;Use the Fabric Capacity Metrics app to investigate the CU spike from 14:00 to 15:00 UTC, then identify expensive SQL users and query patterns.&lt;/P&gt;
&lt;P&gt;Following the warehouse metering update introduced in August 2026, Capacity Metrics shows when consumption occurred and how much was reported based on allocated warehouse compute over time. Query Insights explains what ran during the same period.&lt;/P&gt;
&lt;P&gt;The skill discovers the installed Capacity Metrics model, identifies a costly warehouse or SQL analytics endpoint, and analyzes Query Insights requests that overlap its time window. It doesn't join Capacity Metrics operation identifiers to Query Insights statement identifiers. Capacity consumption and warehouse CPU are complementary signals, not interchangeable measurements.&lt;/P&gt;
&lt;H3&gt;Assess custom SQL pool candidates&lt;/H3&gt;
&lt;P&gt;Assess whether recurring workloads in SalesWarehouse are candidates for custom SQL pools based on the last 30 days.&lt;/P&gt;
&lt;P&gt;If repeated pressure is associated with a consistent application name, such as an ingestion service or reporting application, the skill can recommend testing that workload in a custom SQL pool. It identifies the application to isolate and the pressure, latency, CPU, scan, and failure measures to compare before and after the pilot.&lt;/P&gt;
&lt;H2&gt;Get started&lt;/H2&gt;
&lt;H3&gt;Prerequisites&lt;/H3&gt;
&lt;P&gt;Before you start, make sure you have:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;GitHub Copilot CLI or another compatible AI coding tool.&lt;/LI&gt;
&lt;LI&gt;An active Fabric warehouse or lakehouse SQL analytics endpoint.&lt;/LI&gt;
&lt;LI&gt;Contributor or higher access to the workspace.&lt;/LI&gt;
&lt;LI&gt;The Microsoft Fabric Capacity Metrics app installed for capacity-spike investigations.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Add the Microsoft Fabric skills marketplace in GitHub Copilot CLI:&lt;/P&gt;
&lt;P&gt;/plugin marketplace add microsoft/skills-for-fabric&lt;/P&gt;
&lt;P&gt;Install the Fabric skills bundle:&lt;/P&gt;
&lt;P&gt;/plugin install fabric-skills@fabric-collection&lt;/P&gt;
&lt;P&gt;Then open Copilot CLI in a project folder and describe the warehouse issue you want to investigate. Include the workspace, warehouse or SQL analytics endpoint, and UTC time range when possible.&lt;/P&gt;
&lt;P&gt;For detailed permissions, setup, supported scenarios, and diagnostic time limits, see &lt;A class="lia-external-url" href="https://learn.microsoft.com/fabric/data-warehouse/skills-for-data-warehouse-operations" target="_blank" rel="noopener"&gt;Diagnose warehouse workloads with the SQL DW operations skill&lt;/A&gt;.&lt;/P&gt;
&lt;H2&gt;Next Steps&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;Install or update the &lt;A class="lia-external-url" href="https://github.com/microsoft/skills-for-fabric" target="_blank" rel="noopener"&gt;Microsoft Fabric skills bundle&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Review &lt;A class="lia-external-url" href="https://learn.microsoft.com/fabric/data-warehouse/query-insights" target="_blank" rel="noopener"&gt;Query Insights in Fabric Data Warehouse&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Review &lt;A class="lia-external-url" href="https://learn.microsoft.com/fabric/data-warehouse/monitoring-overview" target="_blank" rel="noopener"&gt;monitoring options for Fabric Data Warehouse&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;Learn about &lt;A class="lia-external-url" href="https://learn.microsoft.com/fabric/data-warehouse/custom-sql-pools" target="_blank" rel="noopener"&gt;custom SQL pools&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Mon, 14 Sep 2026 17:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/Diagnose-Fabric-Data-Warehouse-workloads-with-the-SQL-DW/ba-p/5366102</guid>
      <dc:creator>Mariyaali</dc:creator>
      <dc:date>2026-09-14T17:00:00Z</dc:date>
    </item>
    <item>
      <title>From Business Events, Fabric Events, and Azure Events to Real-Time Hub</title>
      <link>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/From-Business-Events-Fabric-Events-and-Azure-Events-to-Real-Time/ba-p/5365864</link>
      <description>&lt;P&gt;Welcome to the eighth and final post in our Business Events, Fabric Events, and Azure Events series for Microsoft Fabric. This series takes you from foundational event-driven concepts to practical implementation patterns that help teams turn meaningful business moments into trusted signals, decisions, and actions across Fabric.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 16:59:28 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/From-Business-Events-Fabric-Events-and-Azure-Events-to-Real-Time/ba-p/5365864</guid>
      <dc:creator>robece-msft</dc:creator>
      <dc:date>2026-09-14T16:59:28Z</dc:date>
    </item>
    <item>
      <title>Forecasting with Autoregression, ARIMA &amp; AIC / BIC for Data Science in Microsoft Fabric</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Science-Community-Blog/Forecasting-with-Autoregression-ARIMA-AIC-BIC-for-Data-Science/ba-p/4870627</link>
      <description>&lt;P&gt;In this edition, we’re exploring forecasting through Autoregression, ARIMA, and the model selection tools AIC and BIC. By the time you’re done reading, you’ll understand how data can actually learn from its own patterns, how ARIMA helps bring structure to unpredictable trends, and how AIC and BIC keep your models grounded by balancing accuracy with simplicity.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:57:38 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Science-Community-Blog/Forecasting-with-Autoregression-ARIMA-AIC-BIC-for-Data-Science/ba-p/4870627</guid>
      <dc:creator>Sahir_Maharaj</dc:creator>
      <dc:date>2026-09-14T13:57:38Z</dc:date>
    </item>
    <item>
      <title>How to Connect SAP to Power BI Through SAP BTP</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/How-to-Connect-SAP-to-Power-BI-Through-SAP-BTP/ba-p/5366349</link>
      <description>&lt;P&gt;Learn how to connect SAP to Power BI through SAP BTP using Metrica Software’s connector. This step-by-step guide covers creating reusable OData data sources, managing access, and loading SAP data into Power BI.&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:57:05 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/How-to-Connect-SAP-to-Power-BI-Through-SAP-BTP/ba-p/5366349</guid>
      <dc:creator>metrica</dc:creator>
      <dc:date>2026-09-14T13:57:05Z</dc:date>
    </item>
    <item>
      <title>Schema Compare in VS Code: Simplifying Fabric Warehouse Deployments</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Warehouse-Community-Blog/Schema-Compare-in-VS-Code-Simplifying-Fabric-Warehouse/ba-p/5366300</link>
      <description>&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Deploying databases shouldn't feel uncertain. Synchronizing development and production schemas in Microsoft Fabric Warehouse can be challenging as database objects evolve. A frequent issue arises when the .sqlproj file isn't configured with the Fabric-specific schema provider (SqlDbFabricDatabaseSchemaProvider). Misconfiguration may lead Schema Compare to flag supported Fabric objects as unsupported. To avoid this issue, explicitly specify the schema provider in the .sqlproj XML if the GUI does not offer that option.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;In this blog, let's take a quick look at how to get started.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Before using Schema Compare with Fabric Warehouse, make sure you have the following prerequisites.&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;You need access to an existing&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Warehouse item within a Microsoft Fabric workspace&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;, with &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Contributor or higher permissions&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;You also need&amp;nbsp;&lt;STRONG style="color: rgb(50, 49, 48);"&gt;&lt;SPAN data-preserver-spaces="true"&gt;Visual Studio Code&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="color: rgb(50, 49, 48);" data-preserver-spaces="true"&gt; installed on your workstation.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Next, install the&amp;nbsp;&lt;STRONG style="color: rgb(50, 49, 48);"&gt;&lt;SPAN data-preserver-spaces="true"&gt;.NET SDK&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="color: rgb(50, 49, 48);" data-preserver-spaces="true"&gt;, which is required to build and publish database projects.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Finally, install these two Visual Studio Code extensions:&lt;/LI&gt;
&lt;/OL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;SQL Database Projects&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;SQL Server (mssql)&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Both extensions are available directly from the Visual Studio Code Marketplace. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;After installing the extensions, open Visual Studio Code and select "Add Connection" to connect to Fabric Warehouse.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Enter the required server and authentication details, and complete the connection.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;After connecting, access the Warehouse directly in Visual Studio Code.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Open Schema Compare&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Now navigate to &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Database Projects&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt; in Visual Studio Code.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You should see your available database projects and connections. Right-click the database project or connection and select "Schema Compare."&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Schema Compare gives you an object-level view of the differences between the source and target.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You can compare schemas between:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;.dacpac files&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;Databases&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN data-preserver-spaces="true"&gt;SQL database projects&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Comparison results outline actions to align target with source.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Instead of treating the database as a single deployment unit, you can review individual changes and decide what should happen next.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;You can also selectively exclude actions from the comparison results when a particular change should not be deployed.&lt;/SPAN&gt;&lt;/P&gt;
&lt;img /&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Schema Compare with Fabric Warehouse&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;Schema Compare's integration with Fabric Warehouse allows developers to identify differences in database objects before implementing changes.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN data-preserver-spaces="true"&gt;Database Projects and Git&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN data-preserver-spaces="true"&gt;The database project becomes the artifact under review in the PR, not a raw DDL diff — schema changes get the same scrutiny as application code, and the deployment pipeline consumes a validated project state rather than an ad-hoc script.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;SPAN data-preserver-spaces="true"&gt;Schema Compare exposes Fabric Warehouse DDL limitations before deployment, helping you &lt;/SPAN&gt;&lt;SPAN data-preserver-spaces="true"&gt;proactively address issues and maintain greater control over the deployment process.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:55:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Warehouse-Community-Blog/Schema-Compare-in-VS-Code-Simplifying-Fabric-Warehouse/ba-p/5366300</guid>
      <dc:creator>techies</dc:creator>
      <dc:date>2026-09-14T13:55:53Z</dc:date>
    </item>
    <item>
      <title>Power BI Smart Table Visual: Excel style Column Filtering, Dynamic Column Headers, Grouping Columns</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Power-BI-Smart-Table-Visual-Excel-style-Column-Filtering-Dynamic/ba-p/5366517</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;For a smoother reading experience with clearer screenshots and easy code copying, I suggest [reading this article on my website](https://www.techietips.co.in/articles/powerbi-managed-6500measures-smartly). It’s free, ad-free, distraction-free, and dedicated solely to sharing knowledge.&lt;/P&gt;
&lt;P&gt;The Table is the most commonly used visual in Power BI. Anyone who has spent years in Excel expects to click a header and filter that column. They expect related columns to sit under a common heading. The native table visual does none of this.&lt;/P&gt;
&lt;P&gt;There are grid visuals in the Microsoft visual app source that do. Most developers never get to use them, for two reasons that have nothing to do with the features. The good ones are licensed per developers or user, and that cost has to be justified to someone. The free ones are usually not Microsoft certified, which means an uncertified third party script is running inside your report, and that is a fair thing for a security team to say no to.&lt;/P&gt;
&lt;P&gt;So I built one. It is called Smart Table, and I built it with Claude. This post walks through what it does.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Excel style column filtering&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Every column header carries a funnel button in its own divided cell. Click it and you get what you would expect from Excel: sort, a set of conditions appropriate to the column’s type, and a searchable checkbox list of that column’s values. The menu names the column it belongs to, counts what you have ticked, and stays open while you sort.&lt;/P&gt;
&lt;P&gt;The conditions follow the column type rather than offering one generic list:&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&lt;STRONG&gt;Sync: does the filter stay in the grid or reach the report&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Sync is on by default. Filters applied in the header are pushed to the model, so every other visual on the page responds, exactly as if the user had used a slicer. Turn Sync off: Filtering then narrows this grid only.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;Global search&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The toolbar has a search box with its own operator dropdown: contains, is exactly, starts with, ends with, does not contain. It searches across every column at once.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=biYBDeVU8xw" target="_blank"&gt;Power BI: Smart Table Excel Style Column Filtering&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Dynamic column headers, driven by a measure&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A column header name is normally a static label. Here it can be a DAX measure.&lt;/P&gt;
&lt;P&gt;Arrival Month is set to April, and the Key Metrics headers read Lead Time (Avg: 30.00), Room Nights (Avg: 1.00), ADR (Avg: 160.50). Change the month and they recompute.&lt;/P&gt;
&lt;P&gt;The header honors the filter context, including the filters applied inside the grid itself. Filter Property down to Resort Hotel with the funnel and the averages in the header follow.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=CRxdEWsqfzs" target="_blank"&gt;Power BI Smart Table: Measure Driven Column Headers (Dynamic Column names) - YouTube&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Column groups, without any extra tables&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Four groups across eleven columns: Reservation, Channel, Room Type, Key Metrics. Each one is a spanning header above its columns with its own colour.&lt;/P&gt;
&lt;P&gt;The thing to notice is what is not involved. No disconnected table. No field parameters. No two table visuals stacked on top of each other. No shapes placed in the background: which means your column groups move to the right along with your cursor.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.youtube.com/watch?v=xFi8LUcKWig" target="_blank"&gt;Power BI Smart Table: Grouping columns in a table without using a static table and a matrix visual - YouTube&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Known limits&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;All of these come down to one idea: some filtering reaches the model and some is local to the grid.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;30,000 rows That is the Power BI cap for a table mapping with this data reduction algorithm. Header filters push a real model filter, so filtering down to a workable set works fine. Do not point it at an unfiltered fact table.&lt;/LI&gt;
&lt;LI&gt;Value lists cap at 2,000 distinct values per column**, built from the loaded rows. On a high cardinality column like a guest name, use the search box in the menu.&lt;/LI&gt;
&lt;LI&gt;Ends with, Does not end with, and blank selections filter the grid only.** Power BI’s advanced filter operators have `StartsWith` and `Contains` but no `EndsWith`, and a blank has no equivalent in a model side `In` list. The menu tells you when you pick one of these.&lt;/LI&gt;
&lt;LI&gt;Bookmarks restore the data but not the ticked checkboxes.** The model filter is persisted by Power BI, so the rows come back correctly. The header checkboxes just will not show as ticked.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;I wrote this to make one point: the gaps in the built-in visuals are not permanent. Build your own, and with vibe coding that is no longer a months-long project.&lt;/P&gt;
&lt;P&gt;I am not sharing the .pbiviz file. It is an experiment, not tested for production grade reports. Feel free to checkout my [website](https://www.techietips.co.in) and reach out to me if you are interested to do these experiments along with me,&lt;/P&gt;
&lt;P&gt;I would like to continue developing this visual and will write detailed blogs in features explaining its features and implementations.&lt;/P&gt;
&lt;P&gt;I hope you learned something new. Feel free to share your thoughts in the comments section.&lt;/P&gt;
&lt;P&gt;Happy Learning!!!&lt;/P&gt;</description>
      <pubDate>Mon, 14 Sep 2026 13:55:10 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Power-BI-Smart-Table-Visual-Excel-style-Column-Filtering-Dynamic/ba-p/5366517</guid>
      <dc:creator>tharunkumarRTK</dc:creator>
      <dc:date>2026-09-14T13:55:10Z</dc:date>
    </item>
    <item>
      <title>My button &amp; slicer disappeared in Power BI Service. Here's why.</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/My-button-slicer-disappeared-in-Power-BI-Service-Here-s-why/ba-p/5366075</link>
      <description>&lt;P&gt;Imagine you have created a beautiful table in Power BI with a slicer and a button placed on top of it, overlapping the table area.&lt;/P&gt;
&lt;P&gt;The slicer is used to search for specific content. The button becomes clickable when exactly one row is selected and opens a detail page for that row.&lt;/P&gt;
&lt;P&gt;In Power BI Desktop, everything works perfectly.&lt;/P&gt;
&lt;P&gt;However, as soon as you publish your report to the Power BI service and start interacting with it, strange things may happen.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If you select one row, both the slicer and the button disappear.&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;If you leave the table area, both reappear.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;However, as soon as you hover over them, they disappear again.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Even more strangely, if you move in and out of the table a few times, it may happen that the button is available again.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;As it turns out, this is documented behaviour, not a bug. In reading view, Power BI brings the selected visual to the front layer, above anything that overlaps it. Selecting a table row selects the table, so the button and the slicer, which actually sit in front of the table, end up behind it and disappear.&lt;/P&gt;
&lt;P&gt;What I can't explain is the button becoming available again after moving in and out a few times. I haven't found anything documented on that.&lt;/P&gt;
&lt;P&gt;The good news: this default behaviour can be changed.&lt;/P&gt;
&lt;P&gt;To change it, there is an option. It's called 'Maintain layer order' and can be found in a visuals format pane under Properties &amp;gt; Advanced options.&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;Switch it on for the visual that jumps to the front, in my case the table.&lt;/P&gt;
&lt;P&gt;Have you run into this one? And on which visual did you end up switching it on?&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 21:28:14 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/My-button-slicer-disappeared-in-Power-BI-Service-Here-s-why/ba-p/5366075</guid>
      <dc:creator>Hans-Georg_Puls</dc:creator>
      <dc:date>2026-09-10T21:28:14Z</dc:date>
    </item>
    <item>
      <title>Ask vs. Act: Fabric Data Agents and Fabric Operations Agents Explained (with Industry Scenarios)</title>
      <link>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Ask-vs-Act-Fabric-Data-Agents-and-Fabric-Operations-Agents/ba-p/5366083</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Feature status (September 2026):&lt;/STRONG&gt; Fabric data agents and operations agents are both generally available. Investigator insights in operations agents is still in preview. Always check Microsoft Learn for the latest.&lt;/P&gt;
&lt;H2&gt;The core difference in one line&lt;/H2&gt;
&lt;P&gt;A &lt;STRONG&gt;Fabric data agent&lt;/STRONG&gt; waits for a question and answers it from governed data. A &lt;STRONG&gt;Fabric operations agent&lt;/STRONG&gt; doesn't wait for anyone: it continuously watches live data against business goals and raises its hand, or triggers an action, when a condition is met.&lt;/P&gt;
&lt;P&gt;A simple mental model: the data agent is the expert analyst you can message at any time; the operations agent is the control-room operator who never goes off shift.&lt;/P&gt;
&lt;H2&gt;Fabric data agent: conversational analytics on governed data&lt;/H2&gt;
&lt;P&gt;The data agent is a configurable Fabric item that lets anyone ask plain-English questions about data in OneLake. Behind the scenes, it decides which source can answer the question, then generates and runs a read-only query: SQL for lakehouses and warehouses, DAX for Power BI semantic models, and KQL for KQL databases (including Eventhouse). It can also work with ontologies and Microsoft Graph.&lt;/P&gt;
&lt;P&gt;One data agent can combine up to five sources. Authors improve accuracy by selecting relevant tables, writing agent instructions in business language (for example, "route revenue questions to the Finance semantic model"), and adding example question-and-query pairs, up to 100 per source (examples aren't currently supported for semantic models).&lt;/P&gt;
&lt;P&gt;Security is where the data agent is deliberately conservative. Every query runs with the &lt;STRONG&gt;asking user's own credentials&lt;/STRONG&gt;, so row-level and column-level security still apply, and Microsoft Purview controls such as DLP and access restriction policies are respected. It never creates, updates, or deletes data, and it doesn't trigger notebooks or other workflows.&lt;/P&gt;
&lt;P&gt;Once published, the agent can be consumed well beyond Fabric: in Microsoft 365 Copilot, Teams, Azure AI Foundry, or as a tool inside Microsoft Copilot Studio agents, where the integration is now generally available through the Fabric IQ Data MCP tool.&lt;/P&gt;
&lt;P&gt;It's built for conversational insight, not bulk extraction: responses are capped at 25 rows and 25 columns, and unstructured files like PDFs aren't supported.&lt;/P&gt;
&lt;H2&gt;Fabric operations agent: autonomous monitoring with human-in-the-loop action&lt;/H2&gt;
&lt;P&gt;The operations agent lives in the &lt;STRONG&gt;Real-Time Intelligence&lt;/STRONG&gt; workload. Instead of answering ad-hoc questions, you give it business goals, instructions, a knowledge source (an Eventhouse KQL database or an ontology), and the actions it's allowed to recommend.&lt;/P&gt;
&lt;P&gt;From that configuration, the agent generates a &lt;STRONG&gt;playbook&lt;/STRONG&gt;: the business entities and properties it will track and the rules that define what "needs attention" looks like. You can build this manually or describe your intent to the built-in Copilot chat ("monitor the turbines and alert me when motor temperature gets too high") and refine the proposed rules iteratively. Each rule is backed by an inspectable query that the agent evaluates every five minutes, using either &lt;STRONG&gt;state conditions&lt;/STRONG&gt; (such as &lt;EM&gt;is above&lt;/EM&gt; 80, which keeps signaling while true) or &lt;STRONG&gt;transition conditions&lt;/STRONG&gt; (such as &lt;EM&gt;crosses above&lt;/EM&gt; 80, which signals only on the change).&lt;/P&gt;
&lt;P&gt;When a rule is met, the agent sends a Teams message, to a person or a channel, through the Fabric Operations Agent Teams app, summarizing what it saw and what it recommends. Beyond messaging, you can configure actions that run a Fabric notebook or trigger a Power Automate flow, which opens the door to ServiceNow tickets, SAP work orders, emails, or any other Power Automate connector. For anomalies, Investigator insights (preview) adds correlated patterns and a likely root-cause summary directly in Teams.&lt;/P&gt;
&lt;P&gt;Two governance details matter. First, each operations agent gets its own &lt;STRONG&gt;Microsoft Entra Agent ID&lt;/STRONG&gt;, so its activity is auditable separately from human users. Second, it runs in delegated mode with its &lt;STRONG&gt;creator's permissions&lt;/STRONG&gt;: when a recipient approves a recommendation, the action executes with the creator's access. Choose agent owners deliberately.&lt;/P&gt;
&lt;H2&gt;Side-by-side comparison&lt;/H2&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="border-width: 1px;"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Fabric data agent&lt;/th&gt;&lt;th&gt;Fabric operations agent&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Core purpose&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Answer questions about data&lt;/td&gt;&lt;td&gt;Monitor data and drive action&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Interaction model&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Pull: a user asks&lt;/td&gt;&lt;td&gt;Push: the agent notifies&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Trigger&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;A human prompt&lt;/td&gt;&lt;td&gt;A rule condition being met&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Data sources&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Lakehouse, warehouse, semantic model, KQL database, mirrored database, ontology, Microsoft Graph (up to 5)&lt;/td&gt;&lt;td&gt;Eventhouse KQL database or ontology&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Configuration&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Tables, instructions, example queries&lt;/td&gt;&lt;td&gt;Goals, instructions, playbook rules, actions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Output&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Natural-language answers, small tables, summaries&lt;/td&gt;&lt;td&gt;Teams alerts with recommendations, notebook runs, Power Automate flows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Write / action capability&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Strictly read-only&lt;/td&gt;&lt;td&gt;Executes approved actions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Identity&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Asking user's credentials (RLS/CLS enforced)&lt;/td&gt;&lt;td&gt;Entra Agent ID using creator's delegated permissions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Time orientation&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;"What happened, and why?"&lt;/td&gt;&lt;td&gt;"What's happening now, and what should we do?"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;STRONG&gt;Where users meet it&lt;/STRONG&gt;&lt;/td&gt;&lt;td&gt;Fabric, Teams, M365 Copilot, Copilot Studio, Foundry&lt;/td&gt;&lt;td&gt;Primarily Teams (alerts, approvals, investigations)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;colgroup&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;col style="width: 33.33%" /&gt;&lt;/colgroup&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;H2&gt;Industry scenarios&lt;/H2&gt;
&lt;H3&gt;1. Manufacturing: from vibration spike to work order&lt;/H3&gt;
&lt;P&gt;A discrete manufacturer streams CNC machine telemetry (spindle vibration, motor temperature, cycle time) through Eventstream into an Eventhouse.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Its goal is to minimize unplanned downtime. A rule watches for vibration crossing above tolerance on any machine. When it fires, the maintenance supervisors' Teams channel receives an alert with the machine, recent readings, and a recommendation to schedule an inspection. On approval, a Power Automate flow creates a work order in the maintenance system.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; Preparing for a quarterly review, the plant manager asks: &lt;EM&gt;"Which lines had the most unplanned downtime last quarter, and how did OEE compare to target?"&lt;/EM&gt; The agent queries the production lakehouse and OEE semantic model and returns a ranked answer, with no report-building required.&lt;/P&gt;
&lt;H3&gt;2. Retail and CPG: protecting a flash promotion&lt;/H3&gt;
&lt;P&gt;During a weekend promotion, point-of-sale and inventory events land in Eventhouse in near real time.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; It monitors store-level inventory for promoted SKUs and flags any item dropping below safety stock. The regional replenishment lead gets a Teams recommendation to trigger an emergency transfer from a nearby store or distribution center, executed through Power Automate after approval.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; On Monday, the category manager asks: &lt;EM&gt;"How did the promotion perform versus the same weekend last year, by region, and which stores ran out of stock?"&lt;/EM&gt; The agent blends the sales semantic model with lakehouse inventory history to answer in seconds.&lt;/P&gt;
&lt;H3&gt;3. Energy and utilities: pipeline pressure and grid load&lt;/H3&gt;
&lt;P&gt;An oil and gas operator ingests SCADA readings (pressure, flow rate, compressor status) from field assets; a utility does the same for substations.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Rules detect pressure exiting its normal operating range at a pumping station, or transformer load crossing a critical threshold during a heatwave. The control room is alerted with context and a recommended response, such as dispatching a field technician via a flow. Human approval stays in the loop. Note that operations agents complement, and never replace, certified safety instrumented systems.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; An asset integrity engineer asks: &lt;EM&gt;"Which ten assets had the most pressure excursions in the last 12 months, and when were they last serviced?"&lt;/EM&gt;&lt;/P&gt;
&lt;H3&gt;4. Financial services: payment gateway degradation&lt;/H3&gt;
&lt;P&gt;A bank streams card authorization events by gateway, merchant category, and channel.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; Its goal is protecting payment success rates. When a gateway's decline rate crosses above its threshold, the payments operations team gets an alert with a breakdown and a recommendation to reroute traffic to a secondary processor, an action that runs only after an engineer approves it.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; A relationship manager asks: &lt;EM&gt;"Which of my corporate clients saw failed payments above 2% this month?"&lt;/EM&gt; Because the agent runs under the manager's own identity, row-level security ensures they only see their own portfolio.&lt;/P&gt;
&lt;H3&gt;5. Pharma logistics: cold-chain integrity&lt;/H3&gt;
&lt;P&gt;A logistics provider moving vaccines and biologics collects IoT temperature and GPS data from refrigerated containers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Operations agent:&lt;/STRONG&gt; A transition rule fires the moment a shipment's temperature exits the 2–8°C range. The control tower is notified with location and excursion details, a notebook action flags the batch for quality review, and a flow alerts the receiving site.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Data agent:&lt;/STRONG&gt; A quality lead asks: &lt;EM&gt;"Which lanes and carriers had the highest excursion rates this year?"&lt;/EM&gt;&lt;/P&gt;
&lt;H2&gt;Better together: detect, decide, explain&lt;/H2&gt;
&lt;P&gt;The strongest architectures use both agents on the same data foundation. Picture an airport operations team. An operations agent watches baggage-system events in Eventhouse and alerts the duty manager when belt throughput drops below target during a peak arrival wave. The manager approves the recommended action: rerouting bags to an alternate belt via Power Automate.&lt;/P&gt;
&lt;P&gt;Then, without leaving Teams, the manager asks a Copilot Studio agent grounded by a Fabric data agent over the same Eventhouse and historical lakehouse: &lt;EM&gt;"How often has this belt degraded at this time of day over the past 90 days?"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The operations agent handles &lt;STRONG&gt;detection and response&lt;/STRONG&gt;. The data agent handles &lt;STRONG&gt;explanation and learning&lt;/STRONG&gt;. Because both point at the same governed data in OneLake, the alert and the analysis never disagree about the numbers.&lt;/P&gt;
&lt;H2&gt;How to choose&lt;/H2&gt;
&lt;P&gt;Choose a &lt;STRONG&gt;data agent&lt;/STRONG&gt; when the need is exploratory and question-driven: executive self-service, analyst acceleration, or bringing trusted data into Copilot experiences. Choose an &lt;STRONG&gt;operations agent&lt;/STRONG&gt; when you have a specific, repeatable business process with measurable conditions, where minutes matter and someone should be told (or something should happen) without anyone having to ask.&lt;/P&gt;
&lt;P&gt;A quick test: if you hear &lt;EM&gt;"someone should check this dashboard every hour,"&lt;/EM&gt; you need an operations agent. If you hear &lt;EM&gt;"I just need to know X before Friday's meeting,"&lt;/EM&gt; you need a data agent.&lt;/P&gt;
&lt;H2&gt;Practical tips before you build&lt;/H2&gt;
&lt;P&gt;&lt;STRONG&gt;For data agents:&lt;/STRONG&gt; curate tightly by selecting only the tables users need, write instructions in business terms, and invest in example queries, which are often the biggest accuracy lever. Use Git integration and deployment pipelines to promote agents from development to production.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;For operations agents:&lt;/STRONG&gt; scope one agent to one business process, flatten nested JSON columns in Eventhouse tables before configuring, and review each rule's generated query before starting the agent. Remember that approvals execute with the creator's permissions, trial capacities aren't supported, and agents consume capacity units, so track them in the Fabric Capacity Metrics app.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;For both:&lt;/STRONG&gt; confirm your tenant admin has enabled the required Copilot and Azure OpenAI settings, including cross-geo AI processing where your capacity region requires it.&lt;/P&gt;
&lt;H2&gt;Wrapping up&lt;/H2&gt;
&lt;P&gt;Fabric data agents and operations agents are two sides of the same coin. The data agent democratizes &lt;STRONG&gt;understanding&lt;/STRONG&gt;: anyone can ask a question and get a governed answer. The operations agent operationalizes &lt;STRONG&gt;response&lt;/STRONG&gt;: the business stops depending on people watching dashboards and starts reacting to events as they happen.&lt;/P&gt;
&lt;P&gt;Start with the scenario that hurts most today, build on a shared OneLake foundation, and grow from there.&lt;/P&gt;
&lt;P&gt;How are you using these agents in your industry? Share your scenarios in the comments!&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2026 21:26:37 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Power-BI-Community-Blog/Ask-vs-Act-Fabric-Data-Agents-and-Fabric-Operations-Agents/ba-p/5366083</guid>
      <dc:creator>FarhanJeelani</dc:creator>
      <dc:date>2026-09-10T21:26:37Z</dc:date>
    </item>
  </channel>
</rss>

