data hub
333 TopicsExport Power BI Report Page using Fabric Notebook
Hello Community, Is there a way to export a Power BI report page to PDF using Notebook while including all data contained within visuals that have scroll bar? I have Fabric Capacity and need to export a Power BI page to PDF while preserving the existing page layout and visual formatting. I can use Subscriptions, but the exported PDF only captures a snapshot of the data currently visible on the page. Some of my visuals contain vertical scroll bar, and any data that requires scrolling is not included in the PDF export. Has anyone found a way to export the full visual content, including the data beyond the visible scroll area, while retaining the report's formatting and layout using Notebook ?63Views0likes5CommentsFabric capacity metrics vs activity logs for cost attribution
I have been working on the backend of a packaged Fabric Spend Analyzer, and the difficult part has been reconciling usage rather than building the dashboard. Capacity metrics, activity data, and workload-level signals can behave differently around spikes, background operations, and delayed telemetry. We added pipeline checks for missing or late data before it reaches the spend model, and tightened the DAX calculations around those cases. A few “correct-looking” numbers turned out to be wrong once we traced them back to the underlying usage data. For those building Fabric capacity reporting, how are you validating cost attribution when the underlying telemetry is incomplete or arrives at different times?41Views0likes5CommentsI Let Fabric's New Data Engineering Agent Run My ETL: Here's What Happened
Last week I handed Microsoft Fabric's new Data Engineering Agent a messy ETL job that took me 11 hours to build by hand last quarter. It had a working, validated pipeline in front of me in under an hour. I still changed 3 of its 9 steps before I'd let it near anything important. That is the short version. The long version is more interesting, because the places where it went wrong tell you exactly how to use it well. Some context first. At FabCon Europe 2026 in Barcelona (September 28 to October 1), Microsoft announced the Data Engineering Agent in preview. It can plan and run migrations, ETL and performance work under guardrails that engineers define. It builds on technology from Osmos, the agentic data engineering startup Microsoft acquired in January 2026, and was demoed on stage as "Project Osmos". Copilot has been helping us write code for a while now. This is a different idea. You describe the outcome, and the agent does long-running, multi-step work on its own while you supervise. I wanted to know whether that holds up on a real, slightly ugly dataset rather than a keynote demo. So I tried it. What the Data Engineering Agent actually is The agent is an autonomous worker inside your Fabric workspace, not a chat assistant that suggests code. You give it a goal, and it does the multi-step work itself. Its roots are in Osmos, a Seattle startup whose "AI Data Engineer" already generated production-grade PySpark notebooks inside Fabric. Microsoft bought the company in January 2026 and folded the team into Fabric engineering. Based on Microsoft's FabCon session on Project Osmos, a typical run looks like this: Read the request. You describe the outcome, even loosely ("land the orders CSVs in a clean silver table"). Inspect the workspace. It looks at your existing code, Lakehouses and data layout before writing anything. Plan. It breaks the job into steps and can hand parts to sub-agents for long-running work. Build. It creates and updates notebooks and other Fabric items. Validate. It checks its own output so you can trust what was built. Hand back to you. A human reviews and approves. Microsoft is explicit that supervision stays part of the process. The headline use cases are migrations, ETL and performance tuning. I chose ETL, because that is where most of us spend our week. The test: a real pipeline, not a demo I picked a job I had already built by hand, so I could judge the agent's work line by line against my own. The data is sales orders from a mid-sized retail client . Every day their order system drops a CSV export into a Lakehouse folder. The business wants a clean orders table for analysts and a daily sales summary for a Power BI report. Item My setup Source data 14 daily CSV exports, 18.4 million rows, about 2.1 GB, in Files/raw/orders/ Target silver_orders (cleaned Delta table) and gold_daily_sales (aggregate by day, store and category) Known traps Duplicate order IDs from system retries, two date formats, a currency column with nulls, cancelled orders flagged as negative quantities Capacity F64 trial capacity, sandbox workspace Hand-built baseline About 11 hours across two days, including testing The exact prompt I gave it: Ingest the daily order CSVs in Files/raw/orders into a cleaned silver Delta table called silver_orders. Remove duplicates, standardise dates and currency, and exclude cancelled orders. Then build gold_daily_sales with total revenue, order count and average basket size by day, store and category. The pipeline must run incrementally each day. I deliberately kept the prompt a little vague. I didn't say which date formats exist, how cancellations are encoded, or which column identifies a duplicate. In real life, requirements rarely arrive as a perfect spec. I wanted to see whether the agent would investigate, ask, or just guess. What happened, step by step 1. It read the workspace before writing anything The first thing I noticed: it didn't start coding. For the first four minutes it profiled the data. It sampled each CSV, inferred the schema and looked at my existing notebooks in the workspace. It came back with a short summary of what it found. Two findings impressed me: It spotted both date formats (2026-09-14 and 14/09/2026) and flagged that files from 9 September onwards switched format. It noticed my existing notebooks used a nb_<layer>_<entity> naming pattern and said it would follow it. It missed one thing, which matters later: it reported quantity as "integer, some negative values" without asking what negative quantities meant. 2. The plan it proposed Next it produced a 9-step plan and stopped for my approval: Create a staging notebook to read all CSVs with an explicit schema Normalise both date formats to a single order_date column Fill null currency values from the store's default currency Deduplicate on order_id, keeping the latest record Remove cancelled orders Write silver_orders as a Delta table, partitioned by order_date Build gold_daily_sales with the three requested measures Add incremental logic based on the source file date Run validation checks and produce a summary report This is a sensible plan. It is roughly what I wrote on a whiteboard last quarter. But reading it closely, I changed three things before approving: Step 4: it planned to overwrite silver_orders on each run. I changed it to a MERGE on order_id, because late-arriving corrections are common in this data. Step 5: it planned to remove cancellations using a status column. That column exists, but this client never fills it. Cancellations show up as negative quantities. I told it so. Step 8: it wanted to detect new data by file modified time. I asked it to use the date in the file name instead, which is more reliable when files are re-uploaded. It accepted all three changes and rewrote the plan in a few seconds. 3. The build Once approved, it worked for 38 minutes without needing me. It created three notebooks (nb_stg_orders, nb_silver_orders, nb_gold_daily_sales) and a small pipeline to run them in order. The code was clean and readable. Here is its date handling, which is close to what I would write myself: from pyspark.sql import functions as F df = df.withColumn( "order_date", F.coalesce( F.to_date("order_date_raw", "yyyy-MM-dd"), F.to_date("order_date_raw", "dd/MM/yyyy") ) ) And the merge into silver, after my change in the plan: from delta.tables import DeltaTable silver = DeltaTable.forName(spark, "silver_orders") (silver.alias("t") .merge(updates.alias("s"), "t.order_id = s.order_id") .whenMatchedUpdateAll() .whenNotMatchedInsertAll() .execute()) It asked me one question mid-way: whether average basket size should be revenue per order or items per order. That was exactly the right question, and one I had to ask the client myself last time. 4. Self-validation When the build finished, it ran its own checks and produced a short report: Row counts reconciled from raw to staging to silver, with each dropped row explained (duplicates, cancellations) No nulls left in order_date, currency or store_id No duplicate order_id values in silver_orders Daily totals in gold_daily_sales matched a direct aggregate of silver_orders One check failed on the first pass. 41,200 rows had a null order_date after parsing. It traced the cause itself: a third date format (14-Sep-2026) appeared in two of the older files, which its initial sampling had missed. It added a third pattern to the coalesce, re-ran, and the check passed. That moment sold me on the validation step. A human could easily miss 0.2% of rows quietly disappearing. 5. My review against my own version I compared its output with the pipeline I built by hand last quarter, running both on the same 14 files. Measure Agent Me, by hand Time to working pipeline 52 minutes (incl. my review) About 11 hours Plan steps I changed 3 of 9 Not applicable Data issues found 4 of 4, after one self-correction 4 of 4 Full run time on 18.4M rows 6 min 40 s 5 min 55 s Silver row count 17,962,118 17,962,118 The row counts matched exactly. My hand-built version ran about 45 seconds faster, mostly because I had tuned partitioning. More on that below. Would I merge its code as-is? After my three plan changes, yes, with one small performance fix. Guardrails: the part you shouldn't skip An agent that can create and change items in your workspace needs limits before it needs a prompt. Microsoft designed this agent around guardrails that engineers define, and setting them up was the best 15 minutes of the whole test. What I set up before the run: A sandbox workspace. It's a preview feature, so it ran on a copy of the data, nowhere near production. Scoped data. It could read Files/raw/orders/ and write only to new tables. My existing tables were off limits. Approval points. It had to stop for my approval after the plan, and again before the first write to any Delta table. Git in the loop. The workspace was connected to a Git repo, so every notebook it created or changed landed as a diff I could review line by line. In practice, it never tried to step outside these limits. The approval after the plan turned out to be the most valuable one: that is where I caught all three of my changes. If you set only one guardrail, make it that one. Where it struggled No agent review is credible without the failures, so here are the three that mattered. It assumed instead of asking about business rules. It saw negative quantities and planned to use an empty status column for cancellations. Had I approved the plan without reading it, about 310,000 cancelled orders would have flowed into the gold table and inflated revenue. It asked a good question about basket size, but not this one. Its sampling missed a rare date format. The third format appeared in only two files. Its validation caught the problem, but only after the first run. On a much larger dataset, that first run costs real capacity. Correct, but not tuned. It partitioned silver_orders by order_date, which produced many small files for this data volume. Switching to monthly partitions and running OPTIMIZE closed most of the 45-second gap with my version. When I asked it to "make the silver write faster", it suggested the same fix, but it didn't do it unprompted. Three caveats worth knowing before you try it: It's a preview. Features, behaviour and pricing can change before general availability. Don't build production processes on it yet. Watch your capacity. Long-running agent work consumes capacity units on top of the Spark jobs themselves. Check the Capacity Metrics app after your first run so you know what a typical job costs. It doesn't know your business. It can read your schema, not your meeting notes. Every rule I wrote into the prompt was handled correctly. Every rule I left out was a guess. The verdict The Data Engineering Agent is like a fast, tireless junior engineer: excellent at the mechanics, careful about checking its own work, and still in need of a senior reviewing the plan. What I'd tell my team after this test: Spend your time on the prompt and the plan, not the code. Every problem I found was visible in the plan before a single line ran. Write business rules down explicitly. Cancellations, duplicates, currency defaults. If it's tribal knowledge, the agent will guess. Trust the validation step, but read its report. It caught a data loss bug I might have missed myself. Tune afterwards. Treat its first version as correct, then ask it for performance improvements. Try it now if you have a sandbox workspace, a backlog of repetitive ingestion or migration jobs, and someone who can review PySpark. Wait for GA if you need it in production, your pipelines are full of undocumented business logic, or your capacity budget is tight. The bigger shift is in our role. Going from 11 hours to under an hour didn't remove me from the work. It moved my effort from typing code to writing clear requirements, setting guardrails and reviewing output. That is a skill worth building now, preview or not. Have you tried the Data Engineering Agent yet? Tell me in the comments what you threw at it, and where it surprised you. Sources FabCon Europe 2026 announcements (Kanerika) From Prompt to Finished Project: Introducing Project Osmos (FabCon Europe 2026 session) Microsoft Acquires Osmos (Redmond Magazine) Fabric January 2026 Feature Summary (Microsoft Fabric Blog)Fabric Data Agent visualization through MCP
I'm testing the new Fabric Data Agent visualization capability in the September 2026 update. In the native Fabric Data Agent experience, a question can return an interactive chart successfully. I'm consuming the same published Data Agent through its MCP endpoint from an external Next.js application. The MCP response gives me the answer/data, but I don't see the visualization specification needed for the external client to reproduce the chart. What is the supported way for an external MCP client to retrieve the visualization specification generated by the Data Agent and is this specification currently exposed through the MCP response/assistant run steps, or is visualization rendering currently limited to the native Data Agent experience?78Views1like6CommentsUrgent Help Needed: Automating File Transfer from SharePoint
Subject: Urgent Help Needed: Automating File Transfer from SharePoint to Data Lakehouse Using Fabrics Hi everyone, I am trying to automate a process where a new file in a SharePoint folder, which is replaced every day with the same name, should be pushed to a Data Lakehouse using Fabrics. The file's arrival time is not specific, so I cannot use an event-based trigger. Therefore, I was thinking of using a notebook to trigger the process when a new file arrives in SharePoint. I have used GenFlow 2 to get the data, set the destination as Lakehouse, and selected "append data." Can anyone please help me with the right approach? I am new to Fabrics and data engineering concepts, and your guidance will be greatly appreciated. Thank you!Solved1.4KViews0likes7CommentsRequest for Free Microsoft Fabric Certification Exam Voucher
Hello Microsoft Fabric Team, I have completed all the modules and challenges required for the Fabric Data Days program, including the DP-700/DP-600 sessions. I am excited to apply my knowledge and would like to request the 100% discount exam voucher to schedule my certification exam. My Fabric Community username: KDMEENA Completed modules: All Fabric Data Days modules Thank you for providing this opportunity! I look forward to receiving the voucher and taking the exam. Best regards, Krishna Das Meena6.2KViews0likes11CommentsSCADA and SAP silos to operational intelligence with Microsoft Fabric
One pattern I keep seeing in industrial analytics is that the hardest part isn't building another dashboard. It's getting production, maintenance, and financial data to align. In a recent engagement with an oil & gas client, my team at DataToBiz worked with an operator managing 6+ oil fields and 800+ production assets. Data was spread across SCADA, SAP, maintenance systems, and field spreadsheets. Production reporting could also lag by 24 to 48 hours. The architecture was built around Microsoft Fabric: Data Pipelines and Event Streams handled batch and near real-time ingestion from operational and enterprise sources. OneLake + Fabric Lakehouse provided the centralized data layer, with Bronze, Silver, and Gold Delta tables. Fabric Notebooks with Apache Spark handled transformation, cleansing, and KPI standardization. Power BI semantic models provided the governed business layer, with DAX measures and RLS for role-based access. Power BI dashboards brought production, maintenance, downtime, and executive views into a common reporting environment. Fabric Data Science with Python supported predictive maintenance and anomaly-detection use cases. The important design decision was separating ingestion, transformation, and the semantic layer instead of pushing all the logic into Power BI. That became particularly important for production KPIs. Different operational systems can represent the same metric differently, and simply centralizing the data doesn't solve that problem. The implementation automated 20+ recurring reports and enabled dashboards for 75+ business users across operations, engineering, finance, and leadership. For teams implementing Fabric in industrial environments, how are you handling KPI definitions across SCADA, ERP, maintenance, and field systems? Do you maintain the business definitions in metadata, enforce them in the transformation layer, or manage them primarily through the semantic model?64Views1like4CommentsFabric Data agent integration with Rayfin/Fabric App
Hello Community, Is there a way where in we can integrate Fabric data agent within Fabric App? Also it is Possible where we can trigger any external REST API (based on it's own auth) via Fabric app by creating some button?Solved99Views1like4Comments