<?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>Microsoft Graph Data Connect for SharePoint Blog articles</title>
    <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/bg-p/Microsoft_Graph_Data_Connect_for_SharePo</link>
    <description>Microsoft Graph Data Connect for SharePoint Blog articles</description>
    <pubDate>Sun, 12 Apr 2026 13:37:15 GMT</pubDate>
    <dc:creator>Microsoft_Graph_Data_Connect_for_SharePo</dc:creator>
    <dc:date>2026-04-12T13:37:15Z</dc:date>
    <item>
      <title>MGDC for SharePoint FAQ: How to Run a PoC without Pulling Your Entire Tenant</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-run-a-poc-without-pulling-your/ba-p/4509716</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Overview&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;When getting started with SharePoint data in Microsoft Graph Data Connect (MGDC) for SharePoint, many teams want to validate scenarios - such as reporting or analytics &lt;EM&gt;before&lt;/EM&gt; committing to a full production deployment.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;A common first instinct is to pull a complete dataset from a production tenant. While this delivers the most comprehensive view of SharePoint usage, it also:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Requires broad administrative authorization&lt;/LI&gt;
&lt;LI&gt;Consumes the most Azure compute and storage resources&lt;/LI&gt;
&lt;LI&gt;Increases MGDC extraction and processing costs&lt;/LI&gt;
&lt;LI&gt;Adds complexity to early experimentation&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Fortunately, MGDC for SharePoint provides multiple ways to run low‑cost experiments or proof‑of‑concept (POC) deployments using partial or scoped datasets.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;This guide presents these options using a uniform comparison model, helping you choose the right approach based on:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Cost&lt;/LI&gt;
&lt;LI&gt;Representativeness of production behavior&lt;/LI&gt;
&lt;LI&gt;Implementation effort&lt;/LI&gt;
&lt;LI&gt;Dataset completeness&lt;/LI&gt;
&lt;LI&gt;Supported datasets&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Archimedes planning...&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 1: Use a Dev or Test Tenant&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Use an existing development or test tenant (or create a new trial tenant) to enable MGDC and run initial experiments.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Smaller datasets reduce MGDC and Azure costs&lt;/LI&gt;
&lt;LI&gt;Easier to obtain administrative permissions&lt;/LI&gt;
&lt;LI&gt;Lower operational impact&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;May not reflect production‑scale usage patterns&lt;/LI&gt;
&lt;LI&gt;Some SharePoint features or integrations may be missing&lt;/LI&gt;
&lt;LI&gt;Requires simulated user activity to generate meaningful data&lt;/LI&gt;
&lt;LI&gt;Trial tenants are time‑limited&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/office" target="_blank" rel="noopener"&gt;Microsoft 365 Trial Options&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://www.microsoft.com/azure" target="_blank" rel="noopener"&gt;Azure Trial Options&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 2: Start with the SharePoint Sites Dataset&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;The Sites dataset is typically the smallest MGDC dataset for SharePoint and provides tenant‑wide metadata for all site collections.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Lower cost compared to Files or Permissions datasets&lt;/LI&gt;
&lt;LI&gt;Provides organization‑wide coverage&lt;/LI&gt;
&lt;LI&gt;Minimal MGDC configuration beyond standard onboarding&lt;/LI&gt;
&lt;LI&gt;Small dataset can be handled directly by a variety of analysis tools&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Does not include permission or file details&lt;/LI&gt;
&lt;LI&gt;Limited insight compared to full datasets&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-estimate-my-azure-bill-updated/4284157" target="_blank" rel="noopener"&gt;How can I estimate my Azure bill? Updated! &lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563" target="_blank" rel="noopener"&gt;Gather a detailed dataset on SharePoint Sites &lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 3: Sample a Limited Number of Rows&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Some MGDC SharePoint datasets support returning only a subset of rows in query results. This is supported across the top 5 SharePoint datasets in MGDC (Sites, Permissions, Groups, Files and File Actions).&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Minimal and predictable extraction cost&lt;/LI&gt;
&lt;LI&gt;Enables rapid schema inspection&lt;/LI&gt;
&lt;LI&gt;Provides total dataset row count in request metadata&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Rows are not returned in a predictable order&lt;/LI&gt;
&lt;LI&gt;Sample is not randomized. It is not reproducible and could be biased&lt;/LI&gt;
&lt;LI&gt;Results should not be used to draw tenant‑level conclusions&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-sample-or-estimate-the-number-objects-in-a-dat/4094689" target="_blank" rel="noopener"&gt;How can I sample or estimate the number of objects in a dataset?&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 4: Filter by SiteId&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Because SharePoint data is partitioned by site collection, MGDC filtering allows you to extract data from a single site or a small group of representative sites. This supports Sites, Permissions, Groups, Files and File Actions datasets.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enables realistic workload simulation&lt;/LI&gt;
&lt;LI&gt;Reduces total extraction volume&lt;/LI&gt;
&lt;LI&gt;Simplifies downstream reporting&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;May introduce sampling bias&lt;/LI&gt;
&lt;LI&gt;Not suitable for tenant‑wide reporting&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-filter-rows-on-a-dataset/4094712" target="_blank" rel="noopener"&gt;How can I filter rows on a dataset?&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 5: Filter by TemplateId&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Instead of selecting individual sites, filter by site template to isolate specific workloads. For example, you could filter for OneDrives or SharePoint Embedded.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Consistent dataset scope&lt;/LI&gt;
&lt;LI&gt;Useful for workload‑specific analysis&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Limited dataset support (supported only for Sites, Files and File Actions)&lt;/LI&gt;
&lt;LI&gt;May not reflect cross‑workload usage patterns&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-filter-rows-on-a-dataset/4094712" target="_blank" rel="noopener"&gt;How can I filter rows on a dataset?&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Option 6: Use Delta State Datasets&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Description&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;Delta datasets allow you to retrieve only changes since your last data transfer for supported SharePoint State datasets.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enables recurring analytics with lower extraction costs&lt;/LI&gt;
&lt;LI&gt;Supports daily or weekly trend analysis&lt;/LI&gt;
&lt;LI&gt;Reduces data movement after initial ingestion&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Requires an initial full dataset pull&lt;/LI&gt;
&lt;LI&gt;Adds complexity to downstream merge processing&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Learn More&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-use-delta-state-datasets/4078925" target="_blank" rel="noopener"&gt;How can I use Delta State Datasets?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-do-i-process-deltas/4078949" target="_blank" rel="noopener"&gt;How do I process Deltas?&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;MGDC for SharePoint provides multiple approaches to extract targeted subsets of tenant data, allowing teams to:&lt;/P&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;
&lt;UL class="lia-indent-padding-left-30px"&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;Run proof‑of‑concept deployments&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;Validate analytics pipelines&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;Test governance or migration scenarios&lt;/LI&gt;
&lt;LI class="lia-indent-padding-left-30px"&gt;Estimate ongoing MGDC and Azure costs&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;By selecting the right combination of dataset scope, filtering strategy, sampling method or delta tracking, you can balance cost, representativeness, and implementation effort before scaling to a full production deployment.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;For additional guidance on MGDC for SharePoint, visit &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;SharePoint Data in MGDC&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Apr 2026 19:01:16 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-run-a-poc-without-pulling-your/ba-p/4509716</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2026-04-08T19:01:16Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: Which dates to use for the Files dataset?</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-which-dates-to-use-for-the-files-dataset/ba-p/4460137</link>
      <description>&lt;P&gt;The SharePoint Files dataset became publicly available in Microsoft Graph Data Connect (MGDC) on August 20, 2024. With its release came a unique pricing model ( $0.75 per 50,000 objects, significantly lower than the standard $0.75 per 1,000 objects for other MGDC datasets) and a unique update frequency (data is refreshed weekly, not daily).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Archimedes sculpting a file&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;Weekly Refresh&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Unlike other SharePoint datasets, the Files dataset is refreshed only once a week, over the weekend. This timing helps avoid performance conflicts with tenant activity, as the dataset is typically massive. You can learn more about dataset behavior in the &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;MGDC for SharePoint FAQ: Dataset types and features&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So, which dates should you use for your data pulls? There are two main scenarios: full data pulls and delta pulls.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Full Data Pulls&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;For a complete snapshot, treat the SharePoint Files dataset like other state-based datasets (Sites, Groups, Permissions). Use the same start and end date to indicate a full pull. Since MGDC data is always delayed by two days, you’ll want to target the most recent refresh.&lt;/P&gt;
&lt;P&gt;For instance, if today is Wednesday, October 8, 2025 (2025-10-08), set both your start and end date to Monday, October 6, 2025 (2025-10-06). This aligns with the weekend refresh and ensures you're pulling the latest available data as soon as possible.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Calendar&lt;/img&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: Time values don’t matter for MGDC for SharePoint. Feel free to leave them at 00:00:00 for both start and end date.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Delta Pulls&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To keep your dataset current, use delta pulls. These capture all file additions, updates, and deletions. Details on how delta datasets work are available in the &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;MGDC for SharePoint FAQ: How can I use Delta State Datasets&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Since the dataset updates weekly, pulling deltas more often than that won’t yield new data. Stick to a Wednesday schedule, targeting the previous Monday’s data.&lt;/P&gt;
&lt;P&gt;In summary, here's a good strategy for using deltas with Files:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Initial full pull:&lt;/STRONG&gt; Run on Wednesday, using Monday’s date for both start and end.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Ongoing delta pulls:&lt;/STRONG&gt; Every Wednesday, set the end date to the most recent Monday and the start date to the Monday before that.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For more guidance and documentation, visit&amp;nbsp;&lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;MGDC for SharePoint&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Oct 2025 22:05:00 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-which-dates-to-use-for-the-files-dataset/ba-p/4460137</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-10-08T22:05:00Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: Which regions are supported? Updated in September 2025</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-which-regions-are-supported-updated-in/ba-p/4456384</link>
      <description>&lt;P&gt;&lt;STRONG&gt;1. Overview&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When gathering SharePoint data through Microsoft Graph Data Connect (MGDC), you need to pay attention to an important detail:&amp;nbsp;regions. That includes both the region of your Microsoft 365 tenant (the data source), the region of the Azure Storage account (the data destination) and the region of your workspace where you run your pipelines.&lt;/P&gt;
&lt;P&gt;In this blog, we’ll investigate the importance of understanding regions, which regions are supported by SharePoint on MGDC, the requirement to use a matching region in Azure, and how to handle a tenant with data in multiple regions. We will also share the additional regions supported as of September 2025.&lt;/P&gt;
&lt;img&gt;Archimedes looking at the globe&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;2. Regions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When you use MGDC to pull data from your SharePoint tenant to an Azure account, you always do this in the context of a region. The region is the geographic location where Microsoft stores your data. MGDC and SharePoint support extracting data from several Microsoft 365 regions. As I write this blog, those regions include all three macro regions (Asia-Pacific, Europe and North America), plus many of the go-local regions (like Australia, Brazil and Canada).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3.Which regions are supported by SharePoint on MGDC?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;To move data from Microsoft 365 tenant to your Azure account, both must map to a supported region for MGDC. On the Microsoft 365 side, the data location for the SharePoint data must be supported. On the Azure side, the region for your storage account, your Synapse workspace and your Azure Data Factory instance must be supported.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Here is the list of Microsoft 365 and Azure regions supported:&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table class="lia-align-center" border="1" style="border-width: 1px; border-spacing: 2px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Microsoft 365 region&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Azure region&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;SharePoint&lt;BR /&gt;&lt;/STRONG&gt;&lt;STRONG&gt;Datasets*&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;&lt;STRONG&gt;All Other&lt;BR /&gt;Datasets&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Asia-Pacific (APC)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;East Asia&lt;BR /&gt;Southeast Asia&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Australia (AUS)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Australia East&lt;BR /&gt;Australia Southeast&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Brazil (BRA)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Brazil South&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Canada (CAN)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Canada Central&lt;/P&gt;
&lt;P&gt;Canada East&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Europe (EUR)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;North Europe&lt;BR /&gt;West Europe&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;France (FRA)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;France Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Germany (DEU)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Germany West Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;India (IND)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;South India&lt;BR /&gt;Central India&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Israel (ISR)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Israel Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Italy (ITA)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Italy North&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Japan (JPN)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Japan West&lt;BR /&gt;Japan East&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Korea (KOR)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Korea Central&lt;BR /&gt;Korea South&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Mexico (MEX)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Mexico Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;North America (NAM)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Central US&lt;BR /&gt;East US&lt;BR /&gt;East US 2&lt;BR /&gt;North Central US&lt;BR /&gt;South Central US&lt;BR /&gt;West Central US&lt;BR /&gt;West US&lt;BR /&gt;West US 2&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Norway (NOR)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Norway East&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Poland (POL)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Poland Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Qatar (QAT)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Qatar Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;South Africa (ZAF)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;South Africa North&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Spain (ESP)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Spain Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Sweden (SWE)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Sweden Central&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;N&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Switzerland (CHE)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Switzerland North&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;UAE (UAE)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;UAE North&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;United Kingdom (GBR)&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;UK South&lt;BR /&gt;UK West&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;td style="padding: 2px;"&gt;
&lt;P&gt;Y&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;Note: Some of the regions (the ones that were added most recently) are supported only for the SharePoint datasets in Microsoft Graph Data Connect. That includes Sites, Groups, Permissions, File and File Actions. These recently added regions are not supported for OneDrive, Exchange, Teams and other Microsoft Graph Data Connect datasets.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. The regions must match&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;So, you need both your Microsoft 365 (Office) region and your Azure region to be supported (listed in the table above). Beyond that, you must also make sure that the Microsoft 365 regions and the Azure regions match.&amp;nbsp;For instance, if your Office region is Europe, you must use an Azure storage account in either North Europe or West Europe.&lt;/P&gt;
&lt;P&gt;If you try to pull data for a tenant in the Australia Office region from an Azure account in West US, it will not work. You will basically get no data in this scenario. Even though these are both supported regions, they do not match.&lt;/P&gt;
&lt;P&gt;Please note that Microsoft 365 offers local regions in certain geographies, like Germany, France and Norway. Although these are countries in Europe, these country-specific Microsoft 365 regions (also known as go-locals) are not included in the Microsoft 365 Europe region.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5. How do I find my Microsoft 365 (Office) region?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You can use the Microsoft 365 Admin Center to find the region for your tenant. The URL for the Admin center is&amp;nbsp;&lt;A href="https://admin.microsoft.com/" target="_blank"&gt;https://admin.microsoft.com&lt;/A&gt;.&amp;nbsp; You will find this information under “Show all”, “Settings”, “Org settings”. Then select the tab for “Organizational Settings” and select “Data location”.&lt;/P&gt;
&lt;P&gt;Here are some sample screenshots:&lt;/P&gt;
&lt;img&gt;Data Location in Org Settings&lt;/img&gt;&lt;img&gt;Data Location per Service&lt;/img&gt;
&lt;P&gt;If your tenant is not in one of the supported SharePoint on MGDC regions, please reach out to help us prioritize which regions we should add in the future.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6. How do I find my Azure account region?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;When you create Azure resources like a Storage account, you must specify the region where you want your data to be stored. This also applies to other resources in Azure like your Azure Synapse workspace or your Azure Data Factory instance.&lt;/P&gt;
&lt;P&gt;See below a list of storage accounts in Azure, showing the region (location):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Azure Storage Account Location&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7. What if my tenant uses multiple regions?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;It is possible for a Microsoft 365 tenant to have data in multiple regions. This single tenant can choose to have some OneDrive and SharePoint sites in one region and another set of OneDrive and SharePoint sites in a different region. This multi-geo capability is commonly used by large, multi-national companies.&lt;/P&gt;
&lt;P&gt;For these tenants, MGDC for SharePoint will only allow you to pull data for one region at a time, using an Azure account that matches that region. For instance, if your tenant has sites in North America and Europe, you will need to pull data from an Azure account in North America to get the north American sites and another Azure account in Europe to pull the European sites.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;The priority is to keep the data from the different regions separate, for compliance reasons. Once the multiple datasets are transferred to the multiple Azure accounts, you could join them into a single account, if your tenant’s compliance requirements allow for that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;8. What kind of error will I see?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you use an unsupported region, you will see an error like this:&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Operation on target &amp;lt;ActivityName&amp;gt; failed:
ErrorCode=UserErrorOffice365DataLoaderError,
‘Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,
Message=Office365 data loading failed to execute.
office365LoadErrorType: PermanentError.
Dataset: &amp;lt;DatasetName&amp;gt; is not available in the region: &amp;lt;UnsupportedRegion&amp;gt;,
Source=Microsoft.DataTransfer.ClientLibrary,’&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;9. Summary&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This blog announced additional Microsoft 365 and Azure regions supported in MGDC for SharePoint. For more information about SharePoint Data in MGDC, please visit the collection of links at &lt;A href="https://aka.ms/SharePointData" target="_blank"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 24 Sep 2025 20:55:12 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-which-regions-are-supported-updated-in/ba-p/4456384</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-09-24T20:55:12Z</dc:date>
    </item>
    <item>
      <title>Capacity Template v2 with Microsoft Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/capacity-template-v2-with-microsoft-fabric/ba-p/4451459</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;1. Capacity Scenario&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;One of the most common scenarios for Microsoft Graph Data Connect (MGDC) for SharePoint is Capacity. This scenario focuses on identifying which sites and files are using the most storage, along with understanding the distribution of these large sites and files by properties like type and age.&lt;/P&gt;
&lt;P&gt;The MGDC datasets for this scenario are SharePoint Sites and SharePoint Files. If you’re not familiar with these datasets, you can find details in the schema definitions at &lt;A href="https://aka.ms/SharePointDatasets" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointDatasets&lt;/A&gt;.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To assist you in using these datasets, the team has developed a Capacity Template. Initially published as a template for Azure Synapse, we now have a new Microsoft Fabric template that is simpler and offers more features.&lt;/P&gt;
&lt;P&gt;This SharePoint Capacity v2 Template, based on Microsoft Fabric, is now publicly available.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;2. Instructions&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The template comes with a set of detailed instructions at&amp;nbsp;&lt;A href="https://aka.ms/fabriccapacitytemplatesteps" target="_blank" rel="noopener"&gt;https://aka.ms/fabriccapacitytemplatesteps&lt;/A&gt;. These instructions include:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;How to install the Microsoft Fabric and Microsoft Graph Data Connect prerequisites&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;How to import the pipeline template from the Microsoft Fabric gallery and set it up&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;How to import the Power BI template and configure the data source settings&amp;nbsp;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;See below some additional details about the template.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;3. Microsoft Fabric Pipeline&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;After you import the pipeline template, it will look like this:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;4. Pipeline in Microsoft Fabric&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The Capacity template for Microsoft Fabric includes a few key improvements:&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The new template uses delta datasets to update the SharePoint Sites and SharePoint Files datasets. It keeps track of the last time the datasets were pulled by this pipeline, requesting just what changed since then.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The new template uses views to do calculations and create new properties like size bands or date bands. In our previous template, this was done in Power Query, when importing into Power BI. &lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;The new template also uses a view to aggregate file data, grouping the data by file extension. &lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;You can find details on how to find and deploy the Microsoft Fabric template in the instructions (see item 3).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;5. Microsoft Fabric Report&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The typical result from this solution is a set of Power BI dashboards pulled from the Microsoft Fabric data source. Here are some examples:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&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;These dashboards serve as examples or starting points and can be modified as necessary for various visualizations of the data within these datasets.&lt;/P&gt;
&lt;P&gt;The instructions (see item 3) include details on how to find and deploy a few sample Power BI Capacity templates.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;6. Conclusion&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;I hope this provides a good overview of the Capacity template for Microsoft Fabric. You can read more about the Microsoft Graph Data Connect for SharePoint at &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;. There you will find many details, including a list of datasets available, other common scenarios and frequently asked questions.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Sep 2025 23:26:04 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/capacity-template-v2-with-microsoft-fabric/ba-p/4451459</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-09-05T23:26:04Z</dc:date>
    </item>
    <item>
      <title>Using Copilot (GPT-5) to turn schema into SQL and write queries</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/using-copilot-gpt-5-to-turn-schema-into-sql-and-write-queries/ba-p/4450643</link>
      <description>&lt;P&gt;This article shows a few ways you can use Copilot to help with Microsoft Graph Data Connect for SharePoint. This includes turning a schema into a SQL CREATE TABLE statement and summarizing data from that. Make sure to use the Copilot option to use GPT-5 for best results.&lt;/P&gt;
&lt;img&gt;Archimedes sculpting SQL in marble&lt;/img&gt;
&lt;P&gt;&lt;STRONG&gt;Scenario 1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This first scenario just builds a CREATE TABLE statement from the dataset schema definition in markdown notation. I provide a few instructions on how to handle the flattening of the objects.&lt;/P&gt;
&lt;P&gt;Me:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Given the schema at this URL: https://github.com/microsoftgraph/dataconnect-solutions/blob/main/Datasets/data-connect-dataset-sharepointsites.md, give me a CREATE TABLE statement for a SQL Server. Just include the single SQL command in the output. Each column should have a comment with a short description. Don't include any information about keys or constraints. This dataset is flattened. One column in the table for every row, except those of type object. Column names to be flattened with a prefix. Use an underline to separate the prefix.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Copilot:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;CREATE TABLE SharePointSites (
    ptenant NVARCHAR(255) -- Id of the tenant
    ,Id NVARCHAR(255) -- GUID of the site
    ,Url NVARCHAR(2048) -- URL for the site
    ,ArchiveState NVARCHAR(50) -- Archive state of the site: None, Archiving, Archived, or Reactivating
    ,SiteArchivedBy NVARCHAR(255) -- Who archived the site, null if not archived
    ,SiteArchivedTime DATETIME -- When the site was archived, null if not archived
    ,RootWeb_Id NVARCHAR(255) -- Root web id
    ,RootWeb_Title NVARCHAR(512) -- Root web title
    ,RootWeb_WebTemplate NVARCHAR(255) -- Root web template name
    ,RootWeb_WebTemplateId INT -- Root web template id
    ,RootWeb_Configuration INT -- Root web template configuration id
    ,RootWeb_LastItemModifiedDate DATETIME -- Date when an item in the root web was last modified
    ,WebCount BIGINT -- Number of webs (subsites) in the site
    ,StorageQuota BIGINT -- Total storage in bytes allowed for this site
    ,StorageUsed BIGINT -- Total storage in bytes used by this site
    ,StorageMetrics_MetadataSize BIGINT -- Total metadata size for the site in bytes
    ,StorageMetrics_TotalFileCount BIGINT -- Total number of files for the site
    ,StorageMetrics_TotalFileStreamSize BIGINT -- Total size of latest version of files in bytes
    ,StorageMetrics_AdditionalFileStreamSize BIGINT -- Total size of additional file streams in bytes
    ,StorageMetrics_TotalSize BIGINT -- Total size of all files for the site in bytes
    ,GroupId NVARCHAR(255) -- Id of the group associated with this site
    ,GeoLocation NVARCHAR(50) -- Geographic region where the data is stored
    ,IsInRecycleBin BIT -- Indicates if the site is in the recycle bin
    ,RecycleBinItemCount BIGINT -- Number of items in the recycle bin
    ,RecycleBinItemSize BIGINT -- Size of items in the recycle bin
    ,SecondStageRecycleBinStorageUsage BIGINT -- Size of items in the second stage recycle bin
    ,IsTeamsConnectedSite BIT -- Indicates if the site is connected to Teams
    ,IsTeamsChannelSite BIT -- Indicates if the site is a channel site
    ,TeamsChannelType NVARCHAR(50) -- Type of channel if site is a Teams channel site
    ,IsHubSite BIT -- Indicates if the site is associated with a hub site
    ,HubSiteId NVARCHAR(255) -- Id of the hub site for this site
    ,IsCommunicationSite BIT -- Indicates if the site is a communication site
    ,IsOneDrive BIT -- Indicates if the site is a OneDrive
    ,BlockAccessFromUnmanagedDevices BIT -- Site blocks access from unmanaged devices
    ,BlockDownloadOfAllFilesOnUnmanagedDevices BIT -- Site blocks download of all files from unmanaged devices
    ,BlockDownloadOfViewableFilesOnUnmanagedDevices BIT -- Site blocks download of viewable files from unmanaged devices
    ,ShareByEmailEnabled BIT -- Site enables share by e-mail
    ,ShareByLinkEnabled BIT -- Site enables share by link
    ,IsExternalSharingEnabled BIT -- Indicates if external sharing is enabled
    ,SiteConnectedToPrivateGroup BIT -- Indicates if site is connected to a Private Group
    ,Privacy NVARCHAR(50) -- Privacy of the site: Private or Public
    ,SensitivityLabelInfo_Id NVARCHAR(255) -- Id of the Sensitivity Label for the site
    ,SensitivityLabelInfo_DisplayName NVARCHAR(255) -- Display name of the Sensitivity Label for the site
    ,Classification NVARCHAR(255) -- Classification of the site
    ,IBMode NVARCHAR(50) -- Information Barriers Mode
    ,IBSegments NVARCHAR(MAX) -- List of organization segments if IB mode is Explicit
    ,Owner_AadObjectId NVARCHAR(255) -- AAD Object Id of the owner
    ,Owner_Email NVARCHAR(320) -- Email of the owner
    ,Owner_UPN NVARCHAR(320) -- User Principal Name of the owner
    ,Owner_Name NVARCHAR(255) -- Name of the owner
    ,SecondaryContact_AadObjectId NVARCHAR(255) -- AAD Object Id of the secondary contact
    ,SecondaryContact_Email NVARCHAR(320) -- Email of the secondary contact
    ,SecondaryContact_UPN NVARCHAR(320) -- User Principal Name of the secondary contact
    ,SecondaryContact_Name NVARCHAR(255) -- Name of the secondary contact
    ,ReadLocked BIT -- Whether the site is locked for read access
    ,ReadOnly BIT -- Whether the site is in read-only mode
    ,CreatedTime DATETIME -- When the site was created (UTC)
    ,LastSecurityModifiedDate DATETIME -- When security on the site was last changed (UTC)
    ,LastUserAccessDate DATETIME -- Last access by a real user (UTC)
    ,LastContentChange DATETIME -- When the site contents were last changed (UTC)
    ,SnapshotDate DATETIME -- When this site information was captured (UTC)
    ,Operation NVARCHAR(50) -- Extraction mode of this row
);
&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Scenario 2&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now I use the CREATE TABLE as the base to ask for a SELECT statement.&lt;/P&gt;
&lt;P&gt;Me:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Give me a list of sites that have more than 5GB of files. Give me a single SQL statement using the tables described below. &amp;lt;create table statements included here&amp;gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Copilot:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT
    Id AS SiteId,
    Url AS SiteUrl,
    RootWeb_Title AS SiteTitle,
    StorageMetrics_TotalSize AS TotalSizeInBytes,
    CAST(StorageMetrics_TotalSize / (1024.0 * 1024 * 1024) AS DECIMAL(10,2)) AS TotalSizeInGB
FROM 
    SharePointSites
WHERE 
    StorageMetrics_TotalSize &amp;gt; (5 * 1024 * 1024 * 1024)
ORDER BY 
    StorageMetrics_TotalSize DESC;
&lt;/LI-CODE&gt;
&lt;P&gt;Note: Interesting choice of columns and order, without any specific prompting to that effect.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Scenario 3&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now for a more challenging scenario using two tables and a more complex requirement.&lt;/P&gt;
&lt;P&gt;Me:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Given the tables below, write a SELECT statement to give me a list of sites with the name of the site, the total storage size and the top 3 file extensions by size. &amp;lt;create table statements for Sites and Files included here&amp;gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Copilot:&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;WITH ExtensionTotals AS (
    SELECT
        f.SiteId,
        f.Extension,
        SUM(f.SizeInBytes) AS TotalSize
    FROM SharePointFiles f
    WHERE f.Extension IS NOT NULL
    GROUP BY f.SiteId, f.Extension
),
RankedExtensions AS (
    SELECT
        et.SiteId,
        et.Extension,
        et.TotalSize,
        ROW_NUMBER() OVER (PARTITION BY et.SiteId ORDER BY et.TotalSize DESC) AS rn
    FROM ExtensionTotals et
),
TopExtensions AS (
    SELECT
        SiteId,
        STRING_AGG(Extension + ' (' + CAST(TotalSize AS VARCHAR(20)) + ')', ', ') WITHIN GROUP (ORDER BY TotalSize DESC) AS Top3Extensions
    FROM RankedExtensions
    WHERE rn &amp;lt;= 3
    GROUP BY SiteId
)
SELECT
    s.RootWeb_Title AS SiteName,
    s.StorageMetrics_TotalSize AS TotalStorageSize,
    te.Top3Extensions
FROM SharePointSites s
LEFT JOIN TopExtensions te ON s.Id = te.SiteId
ORDER BY s.StorageMetrics_TotalSize DESC;&lt;/LI-CODE&gt;
&lt;P&gt;Notes: Scenario is nicely handled, using both the Files and Sites tables. Complex aggregation is coded correctly.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Scenario 4&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this one, I skip the step of using a SQL CREATE TABLE statement and go directly from the markdown for the two schemas (Sites and Files) to a SQL SELECT statement. I also let GPT-5 add his comments and notes this time, to make sure it's thinking correctly...&lt;/P&gt;
&lt;P&gt;Me:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Consider a SQL table for SharePoint Sites based on the schema at https://github.com/microsoftgraph/dataconnect-solutions/blob/main/Datasets/data-connect-dataset-sharepointsites.md - This dataset is flattened. There is one column in the SQL table for every row, except those of type object. Column names are flattened with a prefix. Column names use an underline to separate the prefix. Also consider a SQL table for SharePoint Files based on the schema at https://github.com/microsoftgraph/dataconnect-solutions/blob/main/Datasets/data-connect-dataset-sharepointfiles.md - Use the same assumptions as the previous one. Now write a SELECT statement to give me a list of sites with the name of the site, the total storage size and the top 3 file extensions by size.&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Copilot:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;Got it — you want to join the&amp;nbsp;&lt;STRONG&gt;flattened SharePoint Sites&lt;/STRONG&gt; table with the &lt;STRONG&gt;flattened SharePoint Files&lt;/STRONG&gt; table, aggregate storage usage, and then find the &lt;STRONG&gt;top 3 file extensions by size&lt;/STRONG&gt; for each site. Here’s a SQL example that works with the flattened column naming convention you described:&lt;BR /&gt;&lt;BR /&gt;&lt;LI-CODE lang="sql"&gt;WITH FileSizeByExtension AS (
    SELECT
        f.SiteId,
        f.Extension,
        SUM(f.SizeInBytes) AS TotalExtensionSize
    FROM SharePointFiles f
    GROUP BY f.SiteId, f.Extension
),
RankedExtensions AS (
    SELECT
        SiteId,
        Extension,
        TotalExtensionSize,
        ROW_NUMBER() OVER (PARTITION BY SiteId ORDER BY TotalExtensionSize DESC) AS rn
    FROM FileSizeByExtension
),
Top3Extensions AS (
    SELECT
        SiteId,
        STRING_AGG(Extension, ', ' ORDER BY TotalExtensionSize DESC) AS TopExtensions
    FROM RankedExtensions
    WHERE rn &amp;lt;= 3
    GROUP BY SiteId
)
SELECT
    s.RootWeb_Title AS SiteName,
    s.StorageMetrics_TotalSize AS TotalStorageBytes,
    t.TopExtensions
FROM SharePointSites s
LEFT JOIN Top3Extensions t
    ON s.Id = t.SiteId
ORDER BY s.StorageMetrics_TotalSize DESC;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;How it works&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;FileSizeByExtension: Groups files by SiteId and Extension to sum their sizes.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;RankedExtensions: Uses ROW_NUMBER() to rank extensions by size within each site.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Top3Extensions: Filters to the top 3 per site and concatenates them into a comma-separated list.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Final SELECT: Joins back to the Sites table to get the site name and total storage size.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notes&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;RootWeb_Title comes from flattening the RootWeb object in the Sites dataset.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;StorageMetrics_TotalSize is the flattened column for total site storage (excluding recycle bin).&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;STRING_AGG works in SQL Server 2017+, Azure SQL, and some other RDBMS.&lt;/P&gt;
&lt;P&gt;If your SQL dialect doesn’t support it, you’d need a different aggregation method.&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;This query orders sites by total storage size so the largest sites appear first.&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Note: Nicely done in one prompt with the proper explanations.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I hope these examples help you see the potential of getting Copilot's help with your queries. This is one more reason to load your MGDC for SharePoint tables directly into Microsoft Fabric, where you can run SQL queries against tables in the OneLake...&lt;/P&gt;</description>
      <pubDate>Thu, 04 Sep 2025 20:10:51 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/using-copilot-gpt-5-to-turn-schema-into-sql-and-write-queries/ba-p/4450643</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-09-04T20:10:51Z</dc:date>
    </item>
    <item>
      <title>Microsoft Graph Data Connect for SharePoint is Generally Available</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/microsoft-graph-data-connect-for-sharepoint-is-generally/ba-p/4428915</link>
      <description>&lt;P&gt;General Availability (GA) for Microsoft Graph Data Connect was announced on August 2023, about two years ago. Details can be found at&amp;nbsp;&lt;A href="https://devblogs.microsoft.com/microsoft365dev/microsoft-graph-data-connect-pricing-updates-2/" target="_blank"&gt;Microsoft Graph Data Connect updates&lt;/A&gt;. At that time, the SharePoint datasets for Microsoft Graph Data Connect entered public preview.&lt;/P&gt;
&lt;P&gt;As of July 2025, Microsoft Graph Data Connect for SharePoint, which includes datasets for OneDrive and SharePoint, has reached General Availability (GA), following an extended public preview period. There are no changes to the datasets or features at this time.&lt;/P&gt;
&lt;P&gt;For more information about the datasets, visit &lt;A href="https://aka.ms/OneDriveAndSharePointDatasets" target="_blank"&gt;https://aka.ms/OneDriveAndSharePointDatasets&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;</description>
      <pubDate>Tue, 01 Jul 2025 15:52:58 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/microsoft-graph-data-connect-for-sharepoint-is-generally/ba-p/4428915</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-07-01T15:52:58Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: How to List SharePoint Webs or Subsites?</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-list-sharepoint-webs-or-subsites/ba-p/4423363</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;SharePoint uses a known object hierarchy to store your files, including, in order:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Site Collection (site, SPSite)&lt;/LI&gt;
&lt;LI&gt;Web (site, subsite, SPWeb)&lt;/LI&gt;
&lt;LI&gt;List (SPList, Document Library, SPDocumentLibrary)&lt;/LI&gt;
&lt;LI&gt;Folder (SPFolder)&lt;/LI&gt;
&lt;LI&gt;List Item (documents, files, SPListItem, SPFile)&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If you are not familiar with all those, you can read more about them at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-what-is-in-the-permissions-dataset/4075447" target="_blank" rel="noopener"&gt;What is in the Permissions dataset?&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2.What we have in MGDC for SharePoint&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The SharePoint Sites dataset in Microsoft Graph Data Connect offers a list of all sites (site collections) in your tenant. The SharePoint Files will give you details about each file (document). However, there are no MGDC datasets that will give you one object per SharePoint Web (subsite) or SharePoint List (library).&lt;/P&gt;
&lt;P&gt;There is a workaround, though. If you pay attention to the schema for the SharePoint Sites and SharePoint Files datasets in MGDC, you will find that Sites includes a few interesting details about the Root Web (the main web in the site collection) and the total number of webs (subsites) in each site. Also, the Files dataset includes details about the web (subsite) and the list (library) where the file lives. You could group on these columns to expose more information about webs and lists.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. One Web&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;These days, if you create a modern SharePoint site, you will get one web (called the Root Web) and no obvious mechanism to create subsites or additional webs. For any sites created in the last few years, you likely have no additional webs outside the Root Web.&lt;/P&gt;
&lt;P&gt;Your SharePoint might have existed for many years and your company could have sites using old templates with multiple subsites. If you’re trying to find out if that’s the case for your tenant, the information is available in MGDC, if you are willing to&amp;nbsp; dig a little deeper.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Finding Old Subsites&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The main task here is to create a custom query to join the Sites and Files datasets. You would then group that in a particular way to enumerate each subsites (Webs). You might also tag the Webs that are a Root Web, so that you can identify subsites that are not at the top of the Site hierarchy.&lt;/P&gt;
&lt;P&gt;If you pulled the Sites and Files datasets into a SQL Server or a Lakehouse in Microsoft Fabric, this is what that query could look like:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT
    Webs.SiteId,
    Sites.RootWeb.Title AS SiteTitle,
    Sites.Url AS SiteUrl,
    Sites.WebCount,
    Webs.WebId,
    CASE
        WHEN Root.RootWeb.Id IS NOT NULL
        THEN 1
        ELSE 0
    END AS IsRootWeb,
    Webs.FileCount,
    Webs.TotalSize,
    Webs.TotalSizeWithVersions
FROM (
    SELECT
        SiteId,
        WebId,
        COUNT(*) AS FileCount,
        SUM(SizeInBytes) AS TotalSize,
        SUM(SizeInBytesWithVersions) AS TotalSizeWithVersions
    FROM Files
    GROUP BY SiteId, WebId
) AS Webs
LEFT JOIN Sites AS Sites
    ON Webs.SiteId = Sites.Id
LEFT JOIN Sites AS Root
    ON Webs.SiteId = Root.Id
    AND Webs.WebId = Root.RootWeb.Id&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Empty Webs, Web properties&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This technique will get you a nice list of Webs, but there are a few problems.&lt;/P&gt;
&lt;P&gt;First, if a specific web has no files, we won’t see that web in the Files dataset and therefore the query will fail to list that particular web. You would still see that Web counted in the WebCount property of the Sites dataset, but there would be no listing of that web in the query proposed above, since it has no files.&lt;/P&gt;
&lt;P&gt;Another problem is that there is no way to find in MGDC the details properties of the Web, like the Title. You get some of those for the Root Web in the Sites dataset, but not for the other Webs. For that, you would have to query the Web object using another source like the &lt;A href="https://learn.microsoft.com/en-us/graph/api/site-get" target="_blank" rel="noopener"&gt;Graph API&lt;/A&gt; or &lt;A href="https://learn.microsoft.com/en-us/powershell/module/sharepoint-server/get-spweb" target="_blank" rel="noopener"&gt;PowerShell&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG style="color: rgb(30, 30, 30);"&gt;5. Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I hope this article helped you find details about enumerating SharePoint Webs using the Microsoft Graph Data Connect. For recent deployments of SharePoint Online, you should have only one web per site and the Sites dataset (with Root Web details) should give you plenty of details. However, this might come in handy if you want to manage some of the old subsites of a slightly older SharePoint deployment.&lt;/P&gt;
&lt;P&gt;Finally, if you’re looking for a challenge, I would suggest adapting the SQL code above to enumerate all the document libraries using the Files dataset. It can be done following a similar pattern…&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 12 Jun 2025 19:02:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-list-sharepoint-webs-or-subsites/ba-p/4423363</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-06-12T19:02:39Z</dc:date>
    </item>
    <item>
      <title>Book of Archimedes, Copilot and SharePoint Agents</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/book-of-archimedes-copilot-and-sharepoint-agents/ba-p/4405106</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Book of Archimedes is a single PDF that contains all posts in the Microsoft Graph Data Connect for SharePoint blog. This includes 40 articles and nearly 400 pages, which is handy for searching for specific keywords quickly across the many articles.&lt;/P&gt;
&lt;P&gt;The PDF is provided as an attachment to the main MGDC for SharePoint article at&amp;nbsp;&lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;. You can also download it directly from &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;Book of Archimedes&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2.&amp;nbsp;&lt;/STRONG&gt;&lt;STRONG&gt;Using the Book with Copilot&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Beyond searching inside the PDF, you can feed the Book of Archimedes as grounding to your favorite AI tool to get answers to your questions about MGDC for SharePoint. Let's look at an example.&lt;/P&gt;
&lt;P&gt;You can use this with Copilot or any AI tool that accepts attached files. In my case, I used &lt;A href="https://copilot.cloud.microsoft/" target="_blank" rel="noopener"&gt;https://copilot.cloud.microsoft/&lt;/A&gt; to access my work Copilot, the secure and compliant Copilot integrated with my enterprise account.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I start with the “+” button and then the “add content” button.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then I used the up-arrow icon to “upload from this device” and selected the local copy of the Book of Archimedes I downloaded earlier.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After that, I added my question as a prompt. I tried “What is Project Archimedes?”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I got a summary of Microsoft Graph Data Connect for SharePoint, including key scenarios. From there, I could ask any question. If the book contains the answer, Copilot will find it for you.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.8529%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 10px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Project Archimedes&lt;/STRONG&gt; is the early codename for &lt;STRONG&gt;Microsoft Graph Data Connect for SharePoint&lt;/STRONG&gt;. This project aims to deliver rich data assets to OneDrive and SharePoint tenants, enabling them to run their own analytics, derive insights from their data, and understand how they use these products. The data is transferred to an Azure account owned by the tenant, where tools like Azure Synapse, Power BI, or Microsoft Fabric can be used to transform this data into insightful reports and dashboards &lt;A href="https://microsoft-my.sharepoint-df.com/personal/josebda_microsoft_com/Documents/Microsoft%20Copilot%20Chat%20Files/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;Key Scenarios of Project Archimedes:&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Security&lt;/STRONG&gt;: Understanding permissions in SharePoint and OneDrive tenants to ensure content is properly protected.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity&lt;/STRONG&gt;: Understanding site lifecycle, ownership, and storage used by SharePoint sites and OneDrives.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sync Health&lt;/STRONG&gt;: Ensuring users are properly using OneDrive for Business to protect their files by synchronizing them with the cloud &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Datasets Provided:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sites&lt;/STRONG&gt;: Information about SharePoint sites.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Groups&lt;/STRONG&gt;: Details about SharePoint groups.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Permissions&lt;/STRONG&gt;: Information about sharing permissions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Files&lt;/STRONG&gt;: Data about files stored in SharePoint and OneDrive.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;File Actions&lt;/STRONG&gt;: Details about actions performed on files.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sync Health&lt;/STRONG&gt;: Information about devices running OneDrive Sync.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sync Errors&lt;/STRONG&gt;: Details about errors encountered by OneDrive Sync clients &lt;A href="https://microsoft-my.sharepoint-df.com/personal/josebda_microsoft_com/Documents/Microsoft%20Copilot%20Chat%20Files/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Example Use Cases:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Security Scenario&lt;/STRONG&gt;: Answering questions about oversharing, external sharing, sensitive data sharing, and permissions.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity Scenario&lt;/STRONG&gt;: Tracking storage usage, site lifecycle, and identifying large or inactive sites.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Sync Health Scenario&lt;/STRONG&gt;: Monitoring device health, folder backup status, and sync errors &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;For more detailed information, you can refer to the &lt;STRONG&gt;Book of Archimedes&lt;/STRONG&gt; which contains comprehensive guides, FAQs, and step-by-step instructions related to Microsoft Graph Data Connect for SharePoint&lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank"&gt; [1]&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank"&gt;[1]: Book of Archimedes.pdf&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The more impressive capabilities of Copilot are shown when you ask for something that is not just a direct quote from the Book. For instance, I asked about pricing for a specific scenario: "If a tenant has 1,000 SharePoint sites, how much would it cost to get the SharePoint Sites and SharePoint permissions for that tenant using MGDC?"&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.8529%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 10px;"&gt;
&lt;P&gt;To estimate the cost of getting the SharePoint Sites and SharePoint Permissions datasets for a tenant using Microsoft Graph Data Connect (MGDC), you can follow these guidelines:&lt;/P&gt;
&lt;H3&gt;Pricing Information:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SharePoint Sites and Permissions&lt;/STRONG&gt;: The price to pull 1,000 objects from the available MGDC for SharePoint datasets (Sites, Groups, and Permissions) in the US is $0.75, plus the cost for infrastructure like Azure Storage, Azure Data Factory, or Azure Synapse &lt;A href="https://microsoft-my.sharepoint-df.com/personal/josebda_microsoft_com/Documents/Microsoft%20Copilot%20Chat%20Files/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;SharePoint Files&lt;/STRONG&gt;: This dataset is billed at $0.75 per 50,000 objects due to its typical high volume &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Estimating Costs:&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Number of Objects&lt;/STRONG&gt;:
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sites&lt;/STRONG&gt;: The number of objects in your SharePoint Sites dataset will be equal to the number of sites in your tenant.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Permissions&lt;/STRONG&gt;: The average number of SharePoint permissions per site is around 61 &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank"&gt;[1].&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cost Calculation&lt;/STRONG&gt;:&lt;/LI&gt;
&lt;/OL&gt;
&lt;img /&gt;
&lt;H3&gt;Example Calculation:&lt;/H3&gt;
&lt;P&gt;For a tenant with 1,000 sites:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sites Dataset Cost&lt;/STRONG&gt;: $0.75&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Permissions Dataset Cost&lt;/STRONG&gt;: $45.75&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Total Cost&lt;/STRONG&gt;: $0.75 + $45.75 = $46.50&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Additional Costs:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Storage&lt;/STRONG&gt;: Costs for storing the data in Azure Storage.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Azure Synapse&lt;/STRONG&gt;: Costs for running pipelines to move the data.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;For more precise estimates, you can sample the dataset to get a total object count without pulling the entire dataset &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank"&gt;[1]: Book of Archimedes.pdf&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Copilot will also answer questions in other languages. You just ask the question in whatever language you want, and it gets detected… Here’s an example using Brazilian Portuguese. I asked&amp;nbsp;"Quais são os datasets que fazem parte do cenário de segurança?"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.8529%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 10px;"&gt;
&lt;P&gt;Os datasets que fazem parte do cenário de segurança no &lt;STRONG&gt;Project Archimedes&lt;/STRONG&gt; são:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Sites&lt;/STRONG&gt;: Informações sobre os sites do SharePoint.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Permissions&lt;/STRONG&gt;: Informações sobre as permissões de compartilhamento.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Groups&lt;/STRONG&gt;: Detalhes sobre os grupos do SharePoint.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Esses datasets ajudam a entender se o conteúdo está devidamente protegido, respondendo a perguntas como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Está ocorrendo compartilhamento excessivo?&lt;/LI&gt;
&lt;LI&gt;Está ocorrendo compartilhamento externo?&lt;/LI&gt;
&lt;LI&gt;Dados sensíveis estão sendo compartilhados?&lt;/LI&gt;
&lt;LI&gt;Quanto compartilhamento ocorre por rótulo de sensibilidade?&lt;/LI&gt;
&lt;LI&gt;Dados sensíveis são compartilhados com usuários externos?&lt;/LI&gt;
&lt;LI&gt;Quais domínios externos estão sendo compartilhados?&lt;/LI&gt;
&lt;LI&gt;Quais sites foram mais compartilhados?&lt;/LI&gt;
&lt;LI&gt;Quais níveis de compartilhamento estão sendo usados?&lt;/LI&gt;
&lt;LI&gt;Quais permissões um usuário específico possui?&lt;/LI&gt;
&lt;LI&gt;Quais extensões de arquivo são mais compartilhadas?&lt;/LI&gt;
&lt;LI&gt;Quanto compartilhamento ocorre no nível de Web, Pasta, Lista ou Arquivo?&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Esses datasets são fundamentais para garantir a segurança e a conformidade dos dados dentro do ambiente do SharePoint e OneDrive &lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank" rel="noopener"&gt;[1]&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A class="lia-external-url" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/attachments/gxcuf89792/Microsoft_Graph_Data_Connect_for_SharePo/1/7/Book%20of%20Archimedes.pdf" target="_blank"&gt;[1]: Book of Archimedes.pdf&lt;/A&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Using the Book to create a SharePoint agent&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can also use the book to create a SharePoint agent. This will make it easy to ask questions about Microsoft Graph Data Connect for SharePoint without having to upload the PDF every time.&lt;/P&gt;
&lt;P&gt;To start, upload the Book of Archimedes to a SharePoint document library.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Next, select the file and use the option to “create an agent”.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That’s it. Your agent is created, and you can start using it immediately.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The agent shows up in the document library as a file with the “.agent” extension. You can simply open that file in SharePoint to run the agent.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once you open the agent, it offers you a text box to ask questions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the agent response to “What are the main questions about SharePoint capacity that MGDC for SharePoint can answer?”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; border-width: 1px;"&gt;&lt;colgroup&gt;&lt;col style="width: 99.8529%" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding: 10px;"&gt;
&lt;P&gt;The &lt;STRONG&gt;Book of Archimedes&lt;/STRONG&gt; provides detailed answers to several key questions about SharePoint capacity using Microsoft Graph Data Connect (MGDC). Here are the main questions it addresses:&lt;/P&gt;
&lt;H3&gt;Key Questions about SharePoint Capacity:&lt;/H3&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;How much storage is being used by SharePoint sites?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;This includes understanding the total size of the latest versions of files, previous versions, metadata size, and deleted files in the recycle bin 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;What are the different storage sizes reported for a SharePoint site?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Storage Used&lt;/STRONG&gt;: Includes all storage, metadata, previous versions, and recycle bins.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Total Size&lt;/STRONG&gt;: Includes metadata and previous versions but excludes recycle bins.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Metadata Size&lt;/STRONG&gt;: Storage used by file metadata.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Total File Stream Size&lt;/STRONG&gt;: Size of the latest versions of files.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Previous Versions Size&lt;/STRONG&gt;: Size of previous versions of files.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Recycle Bin Size&lt;/STRONG&gt;: Size of deleted files in the recycle bins 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How can administrators check the amount of storage being used by SharePoint sites?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;SharePoint client UX&lt;/STRONG&gt;: Viewing storage while using SharePoint as a site user or Site Collection administrator.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;PowerShell cmdlets&lt;/STRONG&gt;: Using command-line tools to query site storage information.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;SharePoint Admin Center reports&lt;/STRONG&gt;: Viewing usage reports in the Admin Center.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Graph Data Connect&lt;/STRONG&gt;: Pulling detailed datasets for SharePoint sites and OneDrives 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How can administrators create test sites to understand storage reporting tools?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Creating different types of test sites (empty site, site with files, site with deleted files, site with previous versions) and analyzing how storage sizes are reported 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How can administrators estimate Azure costs for MGDC usage?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Estimating the number of objects (sites, groups, permissions, files) and understanding the billing rates for different datasets 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;How can administrators use MGDC to run detailed analysis of SharePoint and OneDrive storage metrics?&lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Using detailed data in MGDC to analyze storage metrics and understand the impact of metadata, versions, and deleted files 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;H3&gt;Tools and Templates:&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Capacity Template&lt;/STRONG&gt;: Includes instructions, ARM template, Azure Synapse pipeline template, and Power BI template to help administrators use MGDC datasets for capacity analysis 1.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H3&gt;Conclusion:&lt;/H3&gt;
&lt;P&gt;The Book of Archimedes provides comprehensive guidance on leveraging MGDC to gather, store, and analyze SharePoint data, ensuring effective data management and security. It is a valuable resource for administrators and developers working with SharePoint and OneDrive data using MGDC 1.&lt;/P&gt;
&lt;P&gt;Would you like more specific information on any of these questions or tools?&lt;/P&gt;
&lt;P&gt;1: &amp;lt;File&amp;gt;Book of Archimedes&amp;lt;/File&amp;gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As we did with Copilot, you can also ask any question on a topic addressed in the book. You can also use languages other than English.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can experiment with editing the agent to rename it, change the description, add more sources, adjust its behavior, offer sample starter prompts, include specific instructions or even customize with Copilot Studio. Just use the option to "edit the agent". You can also share the agent just like you share any file in SharePoint.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can learn more about SharePoint agents in this YouTube video by Vesa Juvonen: &amp;nbsp;&lt;A href="https://www.youtube.com/watch?v=pYvK76SVEv4" target="_blank" rel="noopener"&gt;https://www.youtube.com/watch?v=pYvK76SVEv4&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. &lt;/STRONG&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I hope you enjoy using the Book of Archimedes as grounding for your AI tools.&lt;/P&gt;
&lt;P&gt;As usual, remember that AI tools may make mistakes and you should always double-check the answers you receive.&lt;/P&gt;
&lt;P&gt;There is also a chance that a particular AI tool might not be able to handle a large document like the Book of Archimedes, currently weighing in at around 10MB.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Jun 2025 20:02:14 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/book-of-archimedes-copilot-and-sharepoint-agents/ba-p/4405106</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-06-12T20:02:14Z</dc:date>
    </item>
    <item>
      <title>Understanding the Notebooks in the Oversharing Template v2 (Microsoft Fabric)</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/understanding-the-notebooks-in-the-oversharing-template-v2/ba-p/4402625</link>
      <description>&lt;P&gt;&lt;STRONG&gt;Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The Microsoft Graph Data Connect for SharePoint team published two notebooks used with Microsoft Fabric in the Information Oversharing v2 template. This blog explains what each code block inside these notebooks does. The goal was to help you understand what the notebooks do.&lt;/P&gt;
&lt;P&gt;Note that this document was written with help from Copilot, using simple prompts like “Analyze each section of this Jupyter notebook with PySpark and Scala code.&amp;nbsp; Describe what each section does.”&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Notebook 1: Read Last Snapshot Dates&lt;/STRONG&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This first notebook runs right as the pipeline starts. It checks the environment, verifies if the Sites and Permission tables exist in the Lakehouse, checks the last day data was gathered from MGDC and calculates the start and end date to use. It also cleans the staging tables and stores a few commands that are used in later steps.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 0 – Set the Default Lakehouse for Notebook to Run&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;%%configure
{
    "defaultLakehouse": {
        "name": {
                  "parameterName": "lakehouseName",
                  "defaultValue": "defaultlakehousename"
        }
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section uses the %%configure magic command to set a JSON configuration that defines a parameter (lakehouseName) with the default value "defaultlakehousename". This setting ensures that when the notebook is launched through a pipeline, it dynamically selects the target Lakehouse.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 1 – Initialize Parameters&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.UUID
import java.text.SimpleDateFormat
import java.time.{LocalDate, LocalDateTime, Period}
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.Calendar
import java.sql.Timestamp
val runId  = "00000000-0000-0000-0000-000000000000"
val workspaceId = spark.conf.get("trident.workspace.id")
val workspaceName = "LakeHouseTesting"
val lakehouseId = spark.conf.get("trident.lakehouse.id")
val lakehouseName = "IMAXDefault"
val sitesStagingTableName = "Sites_Staging"
val sitesFinalTableName = "Sites"
val permissionsStagingTableName = "Permissions_Staging"
val permissionsFinalTableName = "Permissions"
val endTime  = "2024-11-15T00:00:00Z"
spark.conf.set("spark.sql.caseSensitive", true)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section imports various libraries for date/time handling and initializes key parameters for the ETL process. These include a run identifier (runId), workspace and Lakehouse information (with some values coming from Spark configuration), table names for staging and final datasets, and a fallback endTime. It also enforces case sensitivity in Spark SQL.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 2 – Checking Required Final Tables Exist or Not&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;val lakehouse  = mssparkutils.lakehouse.get(lakehouseName)
val lakehouseId  = lakehouse.id
val workspaceName = notebookutils.runtime.context("currentWorkspaceName")
val permissionsStagingLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${permissionsStagingTableName}"
val sitesStagingLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${sitesStagingTableName}"
val sitesFinalLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${sitesFinalTableName}"
val permissionsFinalLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${permissionsFinalTableName}"
val tables = spark.catalog.listTables()
val siteTableCount = tables.filter(col("name") === lit(sitesFinalTableName)  and array_contains(col("namespace"), lakehouseName) ).count()
val permissionsTableCount = tables.filter(col("name") === lit(permissionsFinalTableName) and array_contains(col("namespace"), lakehouseName)).count()
val siteStagingTableCount = tables.filter(col("name") === lit(sitesStagingTableName)  and array_contains(col("namespace"), lakehouseName) ).count()
val permissionsStagingTableCount = tables.filter(col("name") === lit(permissionsStagingTableName) and array_contains(col("namespace"), lakehouseName)).count()&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section retrieves the Lakehouse object and uses it to construct ABFS paths for both staging and final tables (for Sites and Permissions). It then checks for the existence of these tables by listing them in Spark’s catalog and filtering by name and namespace.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 3 – Getting Snapshot Dates from Last Successful Extracts&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import org.apache.spark.sql.functions.{col, _}
import org.apache.spark.sql.types._
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.storage.StorageLevel
val dtCurrentDateFormatt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")
val dtRequiredtDateFormatt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")
var siteDataExists: Boolean = false
var permissionsDataExists: Boolean = false
val siteSnapshotDate = {
    if (siteTableCount == 1) {
        val dfSites = spark.sql(s"SELECT MAX(SnapshotDate) AS SnapshotDate FROM ${lakehouseName}.${sitesFinalTableName} ")
        val rowSites: Row = dfSites.select("SnapshotDate").head(1)(0)
        if (rowSites.get(0) == null)
            endTime
        else {
            siteDataExists = true
            println(s"Sites data Exists: ${siteDataExists}")
            LocalDateTime.parse(rowSites.get(0).toString(), dtCurrentDateFormatt)
              .format(dtRequiredtDateFormatt)
        }
    }
    else {
        endTime
    }
}
val permissionsSnapshotDate = {
    if (permissionsTableCount == 1) {
        val dfPermissions = spark.sql(s"SELECT MAX(SnapshotDate) AS SnapshotDate FROM ${lakehouseName}.${permissionsFinalTableName} ")
        val rowPermissions: Row = dfPermissions.select("SnapshotDate").head(1)(0)
        if (rowPermissions.get(0) == null)
            endTime
        else {
            permissionsDataExists = true
            println(s"Permissions data Exists: ${permissionsDataExists}")
            LocalDateTime.parse(rowPermissions.get(0).toString(), dtCurrentDateFormatt)
              .format(dtRequiredtDateFormatt)
        }
    }
    else {
        endTime
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section queries the final tables to retrieve the latest SnapshotDate for both Sites and Permissions. It then reformats the date into an ISO-compliant format. If no snapshot date is found, it defaults to the predefined endTime, and two boolean flags (siteDataExists and permissionsDataExists) are toggled accordingly.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 4 – Generate View Script for Sites&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;val sitesView: String = s"""
CREATE OR ALTER VIEW vw${sitesFinalTableName}  
AS
SELECT  *,
       [StorageQuotaFriendly] =  (case
                when StorageQuota &amp;lt; 1048576 then concat(ceiling(StorageQuota / 1024.0), ' KB')
                when StorageQuota &amp;lt; 1073741824 then concat(ceiling(StorageQuota / 1048576.0), ' MB')
                when StorageQuota &amp;lt; 1099511627776  then concat(ceiling(StorageQuota / 1073741824.0), ' GB')
                when StorageQuota &amp;lt; 1125899906842624  then concat(ceiling(StorageQuota / 1099511627776.0), ' TB')
                else concat(ceiling(StorageQuota / 1125899906842624.0), ' PB')
            end ),
       [StorageUsedFriendly] =  (case
                when StorageUsed &amp;lt; 1048576 then concat(ceiling(StorageUsed / 1024.0), ' KB')
                when StorageUsed &amp;lt; 1073741824 then concat(ceiling(StorageUsed / 1048576.0), ' MB')
                when StorageUsed &amp;lt; 1099511627776  then concat(ceiling(StorageUsed / 1073741824.0), ' GB')
                when StorageUsed &amp;lt; 1125899906842624  then concat(ceiling(StorageUsed / 1099511627776.0), ' TB')
                else concat(ceiling(StorageUsed / 1125899906842624.0), ' PB')
            end )           
  FROM ${sitesFinalTableName}
""".stripMargin.replaceAll("[\n\r]"," ")
println(sitesView)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here a SQL view (vwSites) is dynamically generated for the Sites final table. The view adds two computed columns (StorageQuotaFriendly and StorageUsedFriendly) that convert byte values into more digestible units such as KB, MB, GB, etc. This script will be stored and executed later.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 5 – Generate View Script for Permissions&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;val permissionsView: String = s"""
CREATE OR ALTER VIEW vw${permissionsFinalTableName}        
    AS     
SELECT *,
       ShareeDomain = CASE
                        WHEN CHARINDEX('@', SharedWith_Email) &amp;gt; 0
                             AND CHARINDEX('.', SharedWith_Email) &amp;gt; 0
                        THEN SUBSTRING(SharedWith_Email,CHARINDEX('@', SharedWith_Email)+1,LEN(SharedWith_Email))
                        ELSE ''
                      END,
       ShareeEMail = CASE
                       WHEN CHARINDEX('@', SharedWith_Email) &amp;gt; 0
                       THEN SharedWith_Email
                       ELSE ''
                     END,
       PermissionsUniqueKey = CONCAT(SiteId,'_',RoleDefinition,'_',ScopeId,'_',COALESCE(LinkId,'00000000-0000-0000-0000-000000000000')),
       EEEUPermissionsCount = SUM(CASE WHEN SharedWith_Name LIKE 'Everyone except external users' THEN 1 ELSE NULL END ) OVER(
                                  PARTITION BY CONCAT(SiteId,'_',RoleDefinition,'_',ScopeId,'_',COALESCE(LinkId,'00000000-0000-0000-0000-000000000000'),SharedWith_Name)
                                ),
       ExternalUserCount = SUM(CASE WHEN SharedWith_TypeV2 LIKE 'External' THEN 1 ELSE NULL END ) OVER(
                                 PARTITION BY CONCAT(SiteId,'_',RoleDefinition,'_',ScopeId,'_',COALESCE(LinkId,'00000000-0000-0000-0000-000000000000'),SharedWith_Name)
                              ),
       B2BUserCount = SUM(CASE WHEN SharedWith_TypeV2 LIKE 'B2BUser' THEN 1 ELSE NULL END ) OVER(
                          PARTITION BY CONCAT(SiteId,'_',RoleDefinition,'_',ScopeId,'_',COALESCE(LinkId,'00000000-0000-0000-0000-000000000000'),SharedWith_Name)
                        )
FROM ${permissionsFinalTableName}
""".stripMargin.replaceAll("[\n\r]"," ")
println(permissionsView)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section builds a SQL view (vwPermissions) for the Permissions final table. It derives additional columns like ShareeDomain, ShareeEMail, and a composite key (PermissionsUniqueKey) while applying window functions to compute counts (e.g., for external or B2B users). This script will also be stored and executed later.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 6 – Truncate the Staging Tables from Previous Runs&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;if (siteStagingTableCount == 1) {
    spark.sql(s"DELETE FROM ${lakehouseName}.${sitesStagingTableName} ")
    println(s"Staging table deleted: ${lakehouseName}.${sitesStagingTableName}")
} else {
    println(s"Staging table ${lakehouseName}.${sitesFinalTableName} not found")
}
if (permissionsStagingTableCount == 1) {
    spark.sql(s"DELETE FROM ${lakehouseName}.${permissionsStagingTableName} ")
    println(s"Staging table deleted: ${lakehouseName}.${permissionsStagingTableName}")
} else {
    println(s"Staging table ${lakehouseName}.${permissionsStagingTableName} not found")
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section checks if the staging tables exist (by count) and, if found, issues a SQL DELETE command to remove existing data so that new data can be loaded. It prints messages indicating the action taken.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 7 – Return Snapshot Dates Back to Pipeline&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import mssparkutils.notebook
val returnData = s"""{\"LakehouseId\": \"${lakehouseId}\", \"SitesStagingTableName\": \"${sitesStagingTableName}\", \"SitesFinalTableName\": \"${sitesFinalTableName}\",  \"SitesSnapshotDate\": \"${siteSnapshotDate}\", \"SitesDataExists\": ${siteDataExists}, \"SitesView\": \"${sitesView}\",  \"PermissionsStagingTableName\": \"${permissionsStagingTableName}\", \"PermissionsFinalTableName\": \"${permissionsFinalTableName}\", \"PermissionsSnapshotDate\": \"${permissionsSnapshotDate}\", \"EndSnapshotDate\": \"${endTime}\", \"PermissionsDataExists\": ${permissionsDataExists}, \"PermissionsView\": \"${permissionsView}\"}"""
println(returnData)
mssparkutils.notebook.exit(returnData)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This concluding section aggregates the key metadata—including Lakehouse information, table names, snapshot dates, existence flags, and the generated view scripts—into a JSON string. It then exits the notebook by returning that JSON to the pipeline.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Notebook 2: Merge Sites and Permissions to Final Table&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This notebook runs after the Sites and Permissions data from MGDC has been collected successfully into the staging tables. If this is the first collection, it handles them as full datasets, storing the data directly in the final tables. If this is using MGDC for SharePoint delta datasets, it merges the new, updated or deleted objects from the staging tables into the final tables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: The word "Delta" here might refer to Delta Parquet (an efficient data storage format used by tables in a Microsoft Fabric Lakehouse) or to the MGDC for SharePoint Delta datasets (how MGDC can return only the objects that are new, updated or deleted between two dates). It can be a bit confusing, so be aware of the two interpretations of the word.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 0 – Set the Default Lakehouse for Notebook to Run&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;%%configure
{
    "defaultLakehouse": {
        "name": {
                  "parameterName": "lakehouseName",
                  "defaultValue": "defaultlakehousename"
        }
    }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section uses the same Lakehouse configuration as in Notebook 1. It sets the default Lakehouse through a parameter (lakehouseName) to support dynamic running of the notebook in different environments.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 1 – Initialize Parameters&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.UUID
import java.text.SimpleDateFormat
import java.time.{LocalDate, LocalDateTime, Period}
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.Calendar
val runId  = "00000000-0000-0000-0000-000000000000"
val workspaceId = spark.conf.get("trident.workspace.id")
val workspaceName = "LakeHouseTesting"
val lakehouseId = spark.conf.get("trident.lakehouse.id")
val lakehouseName = spark.conf.get("trident.lakehouse.name")
val sitesStagingTableName = "Sites_Staging"
val sitesFinalTableName = "Sites"
val permissionsStagingTableName = "Permissions_Staging"
val permissionsFinalTableName = "Permissions"
spark.conf.set("spark.sql.caseSensitive", true)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section is like Notebook 1’s Section 1 but here lakehouseName is retrieved from the configuration. It initializes variables needed for merging, such as run IDs, workspace/Lakehouse identifiers, and table names.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 2 – Read Sites Dataset from Staging Table&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;val lakehouse  = mssparkutils.lakehouse.get(lakehouseName)
val lakehouseId  = lakehouse.id
val workspaceName = notebookutils.runtime.context("currentWorkspaceName")
println("Started reading Sites dataset")
val sitesStagingLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${sitesStagingTableName}"
val dfSitesStaging = spark.read.format("delta").load(sitesStagingLocation)
println("Completed reading Sites dataset")&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section constructs the ABFS path for the Sites staging table and reads the dataset into a DataFrame using the Delta Parquet format. It includes print statements to track progress.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 3 – Read Permissions Dataset from Staging Table&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;println("Started reading Permissions dataset")
val permissionsStagingLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${permissionsStagingTableName}"
val dfPermissionsStaging = spark.read.format("delta").load(permissionsStagingLocation)
println("Completed reading Permissions dataset")&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section performs the analogous operation for the Permissions staging table, loading the dataset into a DataFrame and providing console output for monitoring.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 4 – Check Final Tables Exist or Not&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import io.delta.tables.DeltaTable
val sitesFinalLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${sitesFinalTableName}"
val permissionsFinalLocation = s"abfss://${workspaceName}@onelake.dfs.fabric.microsoft.com/${lakehouseName}.Lakehouse/Tables/${permissionsFinalTableName}"
val sitesFinalTableExists = DeltaTable.isDeltaTable(spark, sitesFinalLocation)
if (!sitesFinalTableExists) {
    println("Final Sites table not exists. Creating final Sites table with schema only")
    dfSitesStaging.filter("1=2").write.format("delta").mode("overwrite").save(sitesFinalLocation)
    println("Final Sites table created")
} else {
    println("Final Sites table exists already")
}
val permissionsFinalTableExists = DeltaTable.isDeltaTable(spark, permissionsFinalLocation)
if (!permissionsFinalTableExists) {
    println("Final Permissions table not exists. Creating final Permissions table with schema only")
    dfPermissionsStaging.filter("1=2").write.format("delta").mode("overwrite").save(permissionsFinalLocation)
    println("Final Permissions table created")
} else {
    println("Final Permissions table exists already")
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section checks whether the final tables for Sites and Permissions exist. If a table does not exist, it creates an empty table (schema only) from the staging DataFrame by filtering out data (filter("1=2")).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 5 – Merge Sites Data from Staging Table to Final Table&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import io.delta.tables._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.{Window, WindowSpec}
import org.apache.spark.sql.functions.{coalesce, lit, sum, col, _}
import org.apache.spark.sql.types.{StructField, _}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.storage.StorageLevel
val deltaTableSource = DeltaTable.forPath(spark, sitesStagingLocation)
val deltaTableTarget = DeltaTable.forPath(spark, sitesFinalLocation)
import spark.implicits._
val dfSource = deltaTableSource.toDF
//Delete records that have Operation as Deleted
println("Merging Sites dataset from current staging table")
deltaTableTarget
  .as("target")
  .merge(
    dfSource.as("source"),
    "source.Id = target.Id")
  .whenMatched("source. Operation = 'Deleted'")
  .delete()
  .whenMatched("source.Operation != 'Deleted'")
  .updateAll()
  .whenNotMatched("source.Operation != 'Deleted'")
  .insertAll()
  .execute()
println("Merging of Sites dataset completed")&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section performs a Delta Lake merge (upsert) operation on the Sites data. The merge logic deletes matching records when the source’s Operation is 'Deleted', updates other matching records, and inserts new records that are not marked as 'Deleted'.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 6 – Merge Permissions Data from Staging Table to Final Table&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;import io.delta.tables._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.{Window, WindowSpec}
import org.apache.spark.sql.functions.{coalesce, lit, sum, col, _}
import org.apache.spark.sql.types.{StructField, _}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.storage.StorageLevel
val deltaTablePermissionsSource = DeltaTable.forPath(spark, permissionsStagingLocation)
val deltaTablePermissionsTarget = DeltaTable.forPath(spark, permissionsFinalLocation)
import spark.implicits._
val dfPermissionsSource = deltaTablePermissionsSource.toDF
//Delete records that have Operation as Deleted
println("Merging Permissions dataset from current staging table")
deltaTablePermissionsTarget
  .as("target")
  .merge(
    dfPermissionsSource.as("source"),
    """source.SiteId = target.SiteId and source.ScopeId = target.ScopeId and source.LinkId = target.LinkId and source.RoleDefinition = target.RoleDefinition and
     coalesce(source.SharedWith_Name,"") = coalesce(target.SharedWith_Name,"") and coalesce(source.SharedWith_TypeV2,"") = coalesce(target.SharedWith_TypeV2,"") and
     coalesce(source.SharedWith_Email,"") = coalesce(target.SharedWith_Email,"") and coalesce(source.SharedWith_AADObjectId,"") = coalesce(target.SharedWith_AADObjectId,"") """)
  .whenMatched("source. Operation = 'Deleted'")
  .delete()
  .whenMatched("source.Operation != 'Deleted'")
  .updateAll()
  .whenNotMatched("source.Operation != 'Deleted'")
  .insertAll()
  .execute()
println("Merging of Permissions dataset completed")&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This section performs a merge operation on the Permissions data. The merge condition is more complex—comparing multiple columns (including handling nulls with coalesce) to identify matching records. The operation applies deletion for rows marked as 'Deleted', updates others, and inserts records where no match exists.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Section 7 – Read and Display Sample TOP 10 Rows&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="scala"&gt;var sqlQuery = s"SELECT * FROM ${lakehouseName}.${sitesFinalTableName} order by SnapshotDate DESC LIMIT 10"
val dfSitesAll = spark.sql(sqlQuery)
display(dfSitesAll)
sqlQuery = s"SELECT * FROM ${lakehouseName}.${permissionsFinalTableName}  order by SnapshotDate DESC LIMIT 10"
val dfPermissionsAll = spark.sql(sqlQuery)
display(dfPermissionsAll)&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This final section executes SQL queries to retrieve and display the top 10 rows from both the Sites and Permissions final tables. The rows are ordered by SnapshotDate in descending order. This is typically used for sample or debugging purposes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I hope this article helped you understand the notebooks included in the template. This might help you customize it later. These templates are intended as starting points for your work with many scenarios.&lt;/P&gt;
&lt;P&gt;Read more about MGDC for SharePoint at &lt;A class="lia-external-url" href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 09 Apr 2025 23:35:19 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/understanding-the-notebooks-in-the-oversharing-template-v2/ba-p/4402625</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-04-09T23:35:19Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint: New Columns in Q1 CY2025</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-new-columns-in-q1-cy2025/ba-p/4397779</link>
      <description>&lt;P&gt;The MGDC for SharePoint team continues to improve the available datasets.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This time around, we are introducing additional columns to some of our existing datasets.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;2 new archive-related properties in the Sites dataset&lt;/LI&gt;
&lt;LI&gt;2 new storage-related properties in the Sites dataset&lt;/LI&gt;
&lt;LI&gt;4 new owner and member properties in the Groups dataset&lt;/LI&gt;
&lt;LI&gt;1 new sharee property in the Permissions dataset&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is a summary of the 9 changes in the 3 datasets (Sites, Groups and Permissions):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;&lt;table border="1" style="width: 100%; height: 585.714px; border-width: 1px;"&gt;&lt;tbody&gt;&lt;tr style="height: 30.5714px;"&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Dataset&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Column&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 30.5714px;"&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;SiteArchivedBy&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;Who archived the site. Null if not archived&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 30.5714px;"&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;SiteArchivedTime&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;DateTime&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;When the site was archived. Null if not archived&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 58.5714px;"&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;LastContentChange&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;DateTime&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;When the site contents were last changed (in UTC)&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 86.5714px;"&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;StorageMetrics.&lt;BR /&gt;AdditionalFileStreamSize&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;int64&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Total size of additional file streams in bytes, excluding the latest version, previous versions and metadata&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 86.5714px;"&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Owner.&lt;BR /&gt;LoginName&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Login name of group owner. If ending with _o, this should be expanded using the owners of the group, not the members&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 30.5714px;"&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;Owner.&lt;BR /&gt;UPN&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 30.5714px; border-width: 1px;"&gt;
&lt;P&gt;User Principal Name of group owner&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 86.5714px;"&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Member.&lt;BR /&gt;LoginName&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Login name of group member. If ending with _o, this should be expanded using the owners of the group, not the members&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 58.5714px;"&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;Member.&lt;BR /&gt;UPN&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 58.5714px; border-width: 1px;"&gt;
&lt;P&gt;User Principal Name of group member&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;tr style="height: 86.5714px;"&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Permissions&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;SharedWith.&lt;BR /&gt;UserLoginName&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;String&lt;/P&gt;
&lt;/td&gt;&lt;td style="height: 86.5714px; border-width: 1px;"&gt;
&lt;P&gt;Login name for the sharee. If ending with _o, this should be expanded using the owners of the group, not the members&lt;/P&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* When the LoginName ends with _o, that means that this group should be expanded using the owners of the group, not the members of the group.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These changes are non-breaking, which means that your existing pipelines will continue to run. We also let this change sit for 21 days, so that delta datasets are also not impacted.&lt;/P&gt;
&lt;P&gt;Anyone starting fresh with MGDC for SharePoint will automatically get the new columns in their pipelines. If you have existing pipelines and want to use the new columns, you will need to update your MGDC application, get that update approved and then update your pipeline to pull the new schema.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For more details about updating your pipelines to include new columns, or to see how these can be leveraged in specific scenarios, see these articles:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-track-the-lifecycle-of-a-sharepoint-site/4174833" target="_blank"&gt;How can I track the lifecycle of a SharePoint site?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-are-sharepoint-groups-and-security-groups-used-toget/4229869" target="_blank"&gt;How are SharePoint Groups and Security Groups used together?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-deal-with-schema-changes/ba-p/4128875" target="_blank"&gt;MGDC for SharePoint FAQ: How to deal with schema changes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Main MGDC for SharePoint article: &lt;A href="https://aka.ms/SharePointData" target="_blank"&gt;https://aka.ms/SharePointData&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To view the complete schema for all SharePoint datasets in MGDC, visit &lt;A class="lia-external-url" href="https://aka.ms/SharePointDatasets" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointDatasets&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;</description>
      <pubDate>Fri, 28 Mar 2025 16:35:18 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-new-columns-in-q1-cy2025/ba-p/4397779</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-03-28T16:35:18Z</dc:date>
    </item>
    <item>
      <title>Information Oversharing v2 Template with Microsoft Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/information-oversharing-v2-template-with-microsoft-fabric/ba-p/4390870</link>
      <description>&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;1. Security Scenario&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;One of the most common scenarios for Microsoft Graph Data Connect (MGDC) for SharePoint is Information Oversharing. This security scenario focuses on identifying which items are being widely shared within the tenant and understanding how permissions are applied at each level.&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The MGDC datasets for this scenario are SharePoint Sites and SharePoint Permissions. If you’re not familiar with these datasets, you can find details in the schema definitions at &lt;/SPAN&gt;&lt;A href="https://aka.ms/SharePointDatasets" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/SharePointDatasets&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;To assist you in using these datasets, the team has developed an Information Oversharing Template. Initially published as a template for Azure Synapse, we now have a new Microsoft Fabric template that is simpler and offers more features.&lt;/P&gt;
&lt;P&gt;The SharePoint Information Oversharing v2 template, based on Microsoft Fabric, is now publicly available.&lt;/P&gt;
&lt;H3&gt;2. Instructions&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The template comes with a set of detailed instructions at&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://aka.ms/fabricoversharingtemplatesteps" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/fabricoversharingtemplatesteps&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;. These instructions include:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;How to install the Microsoft Fabric and Microsoft Graph Data Connect prerequisites&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;How to import the pipeline template from the Microsoft Fabric gallery and set it up&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="" data-font="Symbol" data-listid="22" data-list-defn-props="{&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Symbol&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;How to import the Power BI template and configure the data source settings&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-ccp-props="{}"&gt;See below some additional details about the template.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;3. Microsoft Fabric Pipeline&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;After you import the pipeline template, it will look like this:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Pipeline in Microsoft Fabric&lt;/img&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The Information Oversharing template for Microsoft Fabric includes a few key improvements:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI data-leveltext="-" data-font="Aptos" data-listid="24" data-list-defn-props="{&amp;quot;335551671&amp;quot;:4,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Aptos&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;It uses the new UserCount and TotalUserCount properties in the SharePoint Permissions dataset, which means you do not need to pull the SharePoint Groups or the three Microsoft Entra ID Group datasets to calculate the number of users being granted access. This optimization will greatly reduce the cost to get a report of the sites shared with the most users.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;UL&gt;
&lt;LI data-leveltext="-" data-font="Aptos" data-listid="24" data-list-defn-props="{&amp;quot;335551671&amp;quot;:4,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Aptos&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-contrast="auto"&gt;The new template also uses delta datasets to update the SharePoint Sites and SharePoint Permissions datasets. It keeps track of the last time the datasets were pulled by this pipeline, requesting just what changed since then.&amp;nbsp;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI data-leveltext="-" data-font="Aptos" data-listid="24" data-list-defn-props="{&amp;quot;335551671&amp;quot;:4,&amp;quot;335552541&amp;quot;:1,&amp;quot;335559685&amp;quot;:720,&amp;quot;335559991&amp;quot;:360,&amp;quot;469769226&amp;quot;:&amp;quot;Aptos&amp;quot;,&amp;quot;469769242&amp;quot;:[8226],&amp;quot;469777803&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;469777804&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;469777815&amp;quot;:&amp;quot;hybridMultilevel&amp;quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"&gt;&lt;SPAN data-ccp-props="{}"&gt;As the previous template, this one also flattens the SharePoint Permissions dataset, creating one permission row for each "Shared With" inside the permission. So, if a file is shared with three people, the SharePoint dataset will show one row, but the flattened data stored in Microsoft Fabric will show three rows.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;You can find details on how to find and deploy the Microsoft Fabric template in the instructions (see item 3).&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;4. Microsoft Fabric Report&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The typical result from this solution is a set of Power BI dashboards pulled from the Microsoft Fabric data source. Here is an example:&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;img&gt;Power BI Sample Dashboard&lt;/img&gt;
&lt;P&gt;These dashboards serve as examples or starting points and can be modified as necessary for various visualizations of the data within these datasets.&lt;/P&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;The instructions (see item 3) include details on how to find and deploy a few sample Power BI Information Oversharing templates.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN data-contrast="auto"&gt;5. Conclusion&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN data-contrast="auto"&gt;I hope this provides a good overview of the Information Oversharing template for Microsoft Fabric. You can read more about the Microsoft Graph Data Connect for SharePoint at &lt;/SPAN&gt;&lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;&lt;SPAN data-contrast="none"&gt;&lt;SPAN data-ccp-charstyle="Hyperlink"&gt;https://aka.ms/SharePointData&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN data-contrast="auto"&gt;. There you will find many details, including a list of datasets available, other common scenarios and frequently asked questions.&lt;/SPAN&gt;&lt;SPAN data-ccp-props="{}"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 07 Mar 2025 22:54:05 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/information-oversharing-v2-template-with-microsoft-fabric/ba-p/4390870</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-03-07T22:54:05Z</dc:date>
    </item>
    <item>
      <title>Error: Consent not found</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-consent-not-found/ba-p/4377896</link>
      <description>&lt;P&gt;If you have been using Microsoft Graph Data Connect for a while, you might have configured a recurring pipeline that has been running for several months. In that case, you might run into this error:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang=""&gt;Operation on target &amp;lt;name&amp;gt; failed:
ErrorCode=UserErrorOffice365DataLoaderError,
'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,
Message=Office365 data loading failed to execute.
office365LoadErrorType: PermanentError.
Consent not found.
The consent for application [xx] was either never granted or expired.
Learn more at https://aka.ms/mgdcdocs/appconsent.,
Source=Microsoft.DataTransfer.ClientLibrary,'&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The main error is really " The consent for application [x] was either never granted or expired.” If this is the first time you are running this pipeline, you could be missing the consent in Azure (it was not yet approved by your Microsoft 365 Administrator). If this was working before, it has likely been more than 6 months since it was approved, and the consent has expired.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The solution is simple, done in just 2 steps:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;In the Azure Portal, go to the Microsoft Graph Data Connect application and update it.&lt;/LI&gt;
&lt;LI&gt;In the Microsoft 365 Admin Center, approve the application update.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To update the application, search for the “Microsoft Graph Data Connect” service in the Azure Portal at &lt;A href="https://portal.azure.com" target="_blank" rel="noopener"&gt;https://portal.azure.com&lt;/A&gt; or navigate directly to &lt;A href="https://aka.ms/MGDCinAzure" target="_blank" rel="noopener"&gt;https://aka.ms/MGDCinAzure&lt;/A&gt; to get started. Once there, click on the MGDC Application your created previously (that is the request for consent), click on Properties on the left navigation bar and then click on the “Update Properties” button. You do not need to change any of the properties.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After you update the consent request, you need to approve the update in the Microsoft 365 Admin Center. This process is described in item “1h. Approve the Microsoft Graph Data Connect Application” in the&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563#:~:text=1h.%20Approve%20the%20Microsoft%20Graph%20Data%20Connect%20Application" target="_blank" rel="noopener"&gt;step-by-step&lt;/A&gt; guide.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Before you update the application properties in the Azure Portal, it will show in the list in the Microsoft 365 Admin Center as “Expired”. After you update the properties, it will show in the list as “Update Available”. Once you approve and everything is ready, it will show as “Approved.”&lt;/P&gt;
&lt;P&gt;Just click on the app and follow the steps to approve it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That is it! Now you can just run the pipeline again and everything will work as before. Until it is time to update the consent again in 6 months…&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can avoid this issue completely by keeping track of the MGDC Application consent date and updating it ahead of time. You can update the application and continue to use the earlier consent until the Microsoft 365 Administrator approves the new one, allowing for this consent rotation to be done proactively.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For more about MGDC for SharePoint, visit the main article at&amp;nbsp;&lt;A class="lia-external-url" href="https://aka.ms/SharePointData" target="_blank"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 13 Feb 2025 01:16:39 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-consent-not-found/ba-p/4377896</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-02-13T01:16:39Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint and SharePoint Embedded</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-and-sharepoint-embedded/ba-p/4366205</link>
      <description>&lt;P&gt;&lt;STRONG&gt;1. MGDC for SharePoint and SharePoint Embedded&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this post, we’ll discuss how to use data from Microsoft Graph Data Connect (MGDC) for SharePoint to understand how SharePoint Embedded is being configured and used in your tenant. If you’re new to MGDC, get an overview at &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;If you’re not familiar with SharePoint Embedded, check this &lt;A href="https://learn.microsoft.com/en-us/sharepoint/dev/embedded/overview" target="_blank" rel="noopener"&gt;Overview of SharePoint Embedded&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;SharePoint Embedded is an API-only solution to use the power of the Microsoft 365 file and document storage platform. You can use it to build applications that expose Microsoft 365 features including those from Office, Purview and Copilot. The SharePoint Embedded files are stored in “File Storage Containers”, created by your enterprise applications or a third-party application.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;SharePoint Embedded Diagram&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. MGDC for SharePoint and SharePoint Embedded&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;One important detail is that MGDC for SharePoint sees these containers and files used by SharePoint Embedded. You can see the Containers (under Sites), the permissions granted and even each individual file inside the Containers.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Web Template Id&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To filter sites for SharePoint Embedded containers, just look for SharePoint Sites in MGDC that have the RootWeb.WebTemplateId of 70. This is used to differentiate this scenario, in the same way that OneDrives are sites with the RootWeb.WebTemplateId of 21. You can also check for the RootWeb.Template, which shows as “CSPCONTAINER” for SharePoint Embedded.&lt;/P&gt;
&lt;P&gt;A typical container for SharePoint Embedded will show in the SharePoint Sites datasets like this:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
    "ptenant": "00000001-0000-0000-0000-000000000000",
    "Id": "00000002-0000-0000-0000-000000000000",
    "Url": "https://tenantname.sharepoint.com/contentstorage/CSP_00000009-0000-0000-0000-000000000000",
    "ArchiveState": "None",
    "RootWeb": {
        "Configuration": 0,
        "Id": "00000003-0000-0000-0000-000000000000",
        "Title": "Ideas",
        "WebTemplate": "CSPCONTAINER",
        "WebTemplateId": 70,
        "LastItemModifiedDate": "2025-01-10T22:55:18.000Z"
    },
    "WebCount": 1,
    "StorageQuota": 27487790694400,
    "StorageUsed": 149186,
    "StorageMetrics": {
        "MetadataSize": 8506,
        "TotalFileCount": 2,
        "TotalFileStreamSize": 41924,
        "TotalSize": 149186
    },
    "GroupId": "00000000-0000-0000-0000-000000000000",
    "GeoLocation": "CAN",
    "IsInRecycleBin": false,

    "RecycleBinItemCount": 0,
    "RecycleBinItemSize": 0,
    "SecondStageRecycleBinStorageUsage": 0,
    "IsTeamsConnectedSite": false,
    "IsTeamsChannelSite": false,
    "TeamsChannelType": "None",
    "IsCommunicationSite": false,
    "IsHubSite": false,
    "HubSiteId": "00000000-0000-0000-0000-000000000000",
    "IsOneDrive": false,
    "BlockAccessFromUnmanagedDevices": false,
    "BlockDownloadOfAllFilesOnUnmanagedDevices": false,
    "BlockDownloadOfViewableFilesOnUnmanagedDevices": false,
    "IsExternalSharingEnabled": true,
    "ShareByEmailEnabled": true,
    "ShareByLinkEnabled": true,
    "SensitivityLabelInfo": {},
    "IBMode": "Open",
    "RelatedGroupId": "00000000-0000-0000-0000-000000000000",
    "Owner": {
        "Name": "System Account"
    },
    "SecondaryContact": {},
    "ReadLocked": false,
    "ReadOnly": false,
    "CreatedTime": "2025-01-09T22:54:50Z",
    "LastSecurityModifiedDate": "2025-01-09T22:57:11Z",
    "Operation": "Full",
    "LastUserAccessDate": "2025-01-09T22:54:51Z",
    "SnapshotDate": "2025-01-11T00:00:00Z"
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: In all the sample JSON objects shown in this post, ids were redacted with zeros.&lt;/P&gt;
&lt;P&gt;You can learn more about how SharePoint uses WebTemplateId to identify the type of site at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-is-onedrive-included/4073916" target="_blank" rel="noopener"&gt;MGDC for SharePoint FAQ: Is OneDrive included?&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5. Permissions&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The SharePoint Permissions dataset includes all the permissions granted for all the several types of SharePoint content, including OneDrive, Teams-connected sites, and SharePoint Embedded containers. Granular permissions by folder and individual files are also included.&lt;/P&gt;
&lt;P&gt;Here’s a typical object from the SharePoint Permissions dataset:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
    "ptenant": "00000001-0000-0000-0000-000000000000",
    "SiteId": "00000002-0000-0000-0000-000000000000",
    "WebId": "00000003-0000-0000-0000-000000000000",
    "ListId": "00000004-0000-0000-0000-000000000000",
    "ItemType": "File",
    "ItemURL": "contentstorage/CSP_00000009-0000-0000-0000-000000000000/Document Library/LoopAppData/ProjectBlue.loop",
    "FileExtension": "loop",
    "RoleDefinition": "Contribute",
    "LinkId": "00000005-0000-0000-0000-000000000000",
    "ScopeId": "00000006-0000-0000-0000-000000000000",
    "LinkScope": "Organization",
    "SharedWithCount": [],
    "SharedWith": [],
    "Operation": "Full",
    "SnapshotDate": "2025-01-11T00:00:00Z",
    "ShareCreatedBy": {
        "Type": "User",
        "Name": "Test User",
        "Email": "test@tenantname.onmicrosoft.com",
        "UPN": "test@tenantname.onmicrosoft.com"
    },
    "ShareCreatedTime": "2025-01-09T22:55:51Z",
    "ShareLastModifiedBy": {
        "Type": "User",
        "Name": "Test User",
        "Email": "test@tenantname.onmicrosoft.com",
        "UPN": "test@tenantname.onmicrosoft.com"
    },
    "ShareLastModifiedTime": "2025-01-09T22:55:51Z",
    "ListItemId": 4,
    "UniqueId": "00000007-0000-0000-0000-000000000000"
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: The example above shows a single Contribute permission to a Loop file using a sharing link. Loop uses SharePoint Embedded to store files and it’s something you can easily configure and test in your tenant.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;MGDC for SharePoint will show all permissions granted in SharePoint Embedded containers, included permissions granted at various levels of the SharePoint hierarchy (site, web, library, folder, or file) and diverse types of security principals (users, SharePoint groups and Entra ID groups, internal or external).&lt;/P&gt;
&lt;P&gt;You can learn more about it at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-what-is-in-the-permissions-dataset/4075447" target="_blank" rel="noopener"&gt;MGDC for SharePoint FAQ: What is in the Permissions dataset?&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6. Files&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Finally, you can get a complete list of every file inside the SharePoint Embedded containers, including details like file name, size, author, last modifier and more.&lt;/P&gt;
&lt;P&gt;Here’s a typical object from the SharePoint Files dataset:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
    "ptenant": "00000001-0000-0000-0000-000000000000",
    "SiteId": "00000002-0000-0000-0000-000000000000",
    "Author": {
        "Name": "Test User",
        "Email": "test@tenantname.onmicrosoft.com"
    },
    "DirName": "Document Library/LoopAppData",
    "Extension": "loop",
    "FileName": "ProjectBlue.loop",
    "IsLabelEncrypted": false,
    "ItemId": "00000008-0000-0000-0000-000000000000",
    "ListId": "00000004-0000-0000-0000-000000000000",
    "ListServerTemplate": "DocumentLibrary",
    "MajorVersion": 4,
    "MinorVersion": 0,
    "ModifiedBy": {
        "Name": "Test User",
        "Email": "test@tenantname.onmicrosoft.com"
    },
    "Operation": "Full",
    "ScopeId": "00000006-0000-0000-0000-000000000000",
    "SensitivityLabelInfo": {},
    "SiteUrl": "https://tenantname.sharepoint.com/contentstorage/CSP_00000009-0000-0000-0000-000000000000",
    "SizeInBytes": 24301,
    "SizeInBytesWithVersions": 57765,
    "TimeCreated": "2025-01-09T22:55:08Z",
    "TimeLastModified": "2025-01-09T22:56:13Z",
    "WebId": "00000003-0000-0000-0000-000000000000",
    "WebTemplateId": 70,
    "SnapshotDate": "2025-01-11T00:00:00Z"
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note: SharePoint Embedded does not support minor versions, so the “MinorVersion” column in the Files dataset will always show zero in this scenario.&lt;/P&gt;
&lt;P&gt;For details, check the&amp;nbsp;&lt;A href="https://github.com/microsoftgraph/dataconnect-solutions/blob/main/Datasets/data-connect-dataset-sharepointfiles.md" target="_blank" rel="noopener"&gt;schema for the SharePoint Files dataset&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7. Filtering&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;You can easily download entire datasets and use Azure Data Tools to filter for rows where WebTemplateId is 70. For Sites and Files, there is also a mechanism to filter at the source, so you pull from Microsoft Graph Data Connect only the data related to SharePoint Embedded. The same filtering mechanism can be used to pull data just for a specific site, filtered by Id.&lt;/P&gt;
&lt;P&gt;For details, check this article about &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-can-i-filter-rows-on-a-dataset/4094712" target="_blank" rel="noopener"&gt;Filtering SharePoint dataset at the source&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;8. Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I hope this post helped you understand how to use MGDC for SharePoint to gather information about SharePoint Embedded containers and files. For more information, visit &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 15 Jan 2025 00:45:54 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-and-sharepoint-embedded/ba-p/4366205</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-01-15T00:45:54Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: How to use Excel for analytics</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-use-excel-for-analytics/ba-p/4356642</link>
      <description>&lt;P&gt;&lt;STRONG&gt;MGDC for SharePoint – Dataset types and features&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this post, we’ll discuss how to use Microsoft Excel to consume the data from Microsoft Graph Data Connect (MGDC) for SharePoint. If you’re new to MGDC, get an overview at &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Introduction&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In most examples on how to analyze the data from MGDC for SharePoint, we use Azure Synapse in combination with Power BI Desktop, which is a very capable tool that can turn your data into coherent, visually immersive, and interactive insights.&lt;/P&gt;
&lt;P&gt;But keep in mind that, when pulling datasets from MGDC with Azure Synapse, the data becomes available in an Azure storage account as a set of JSON files. From there, you can use many different tools beyond Power BI. In this article, we will focus on how to read and analyze that data using Microsoft Excel.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Get the data into Azure storage&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The first step in the process is to get your data from MGDC. I have a blog post that describes that process at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563" target="_blank" rel="noopener"&gt;Step-by-step: (Synapse) Gather a detailed dataset on SharePoint Sites using MGDC&lt;/A&gt;. Section 1 if that blog shows how to setup the Microsoft Graph Data Connect and section 2 describes how to run an Azure Synapse pipeline to pull the data. If you complete these first two sections, you will end up with your SharePoint Sites data in Azure.&lt;/P&gt;
&lt;P&gt;You can skip section 3 of that blog, that describes how to get the data into a Power BI dashboard. You will replace that section with the information in this article, which takes the data to Microsoft Excel instead.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3. Bring the data from Azure storage to Excel&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Next, you need to bring the data in the JSON files from the Azure storage account to your Excel spreadsheet. Fortunately, Excel has the perfect set of tools to bring in that data.&lt;/P&gt;
&lt;P&gt;You should start with a blank spreadsheet. Select the “Data” tab in the ribbon and use the option to “Get Data”. Then select the option “from Azure” and choose “From Azure Data Lake Storage Gen2”. This will make sure that you’re getting the data in your ADLS Gen2 storage account.&lt;/P&gt;
&lt;img&gt;Data --&amp;gt; Get Data --&amp;gt; From Azure --&amp;gt; From Azure Data Lake Storage Gen2&lt;/img&gt;
&lt;P&gt;Next, you will need to provide the URL to the ADLS Gen2 storage. Provide the full path, with the container and folder in the format: &lt;A href="https://accountname.dfs.core.windows.net/container/folder" target="_blank" rel="noopener"&gt;https://account.dfs.core.windows.net/container/folder&lt;/A&gt;. The account name is in step 1d of the at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563" target="_blank" rel="noopener"&gt;step-by-step guide&lt;/A&gt; mentioned before. The container and folder names are in step 1f of the guide. You can also find the URL in the Azure Portal, under the Settings/Endpoints section of the storage account.&lt;/P&gt;
&lt;img&gt;URL to Azure Data Lake Storage Gen2&lt;/img&gt;
&lt;P&gt;Once you provide the URL and click OK, you will need to authenticate. Select the option to use the storage account key and type in the key you saved in step 1d of the at&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563" target="_blank" rel="noopener"&gt;step-by-step guide&lt;/A&gt;. You can find the key in the Azure Portal, under the “Security + Networking” / “Access Keys” section of the storage account.&lt;/P&gt;
&lt;img&gt;Account key&lt;/img&gt;
&lt;P&gt;Once you have typed the account key, click “Connect”.&lt;/P&gt;
&lt;img&gt;File List&lt;/img&gt;
&lt;P&gt;At this point, you want to click on the “Transform Data” button to filter for the specific files you want. This will open the “Power Query Editor” window, where you can apply specific steps to filter the data coming in.&lt;/P&gt;
&lt;img&gt;Power Query Editor&lt;/img&gt;
&lt;P&gt;The easiest way to filter out the metadata files is to scroll right until you find the “Folder Path” column and filter that column for paths that do not contain the word “metadata”.&lt;/P&gt;
&lt;img&gt;Folder Path --&amp;gt; down arrow --&amp;gt; Text filters --&amp;gt; Does not contain...&lt;/img&gt;&lt;img&gt;Filter rows, does not contain "metadata"&lt;/img&gt;
&lt;P&gt;After that, you can scroll left to the “Content” column and click on the button to “Combine files”. After that, the query will pull in the content of the files and expand all the columns from the JSON.&lt;/P&gt;
&lt;img&gt;Filtered list --&amp;gt; Content --&amp;gt; Combine files&lt;/img&gt;
&lt;P&gt;Finally, you can click on the “Close &amp;amp; Load” button to bring the data into a sheet.&lt;/P&gt;
&lt;img&gt;Close &amp;amp; Load&lt;/img&gt;
&lt;P&gt;With that, you can play with the data in Excel.&lt;/P&gt;
&lt;img&gt;Data returned to Excel&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4. Create PivotTables&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Once the data is imported into your Excel spreadsheet, you will be able to create data visualizations from it. The most interesting way to do this is to use Excel PivotTables.&lt;/P&gt;
&lt;P&gt;For instance, here’s a pivot table with storage (Storage Used) by site type (RootWeb.WebTemplate) on the different dates you pulled data (SnapShotDate). See the sample PivotTable below after some adjustments and formatting.&lt;/P&gt;
&lt;img&gt;PivotTable in Excel&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG style="font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base); font-style: var(--lia-font-style-base);"&gt;5. Tips&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Here are a few additional comments.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Distinct types of authentication: &lt;/STRONG&gt;As you might have noticed, there are multiple ways to authenticate to get access to the Azure storage account. In addition to using a key to the entire storage account as shown here, you could use Azure to grant specific permissions to a user and log in as that user. This will help restrict access to specific folders and grant limited permissions (like read-only).&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Create custom columns: &lt;/STRONG&gt;To help with your data analysis, you might want to add a few custom or calculated columns. You can in many ways, including transformations in Power Query, formulas in the Excel sheet or in the pivot table itself. You can read more about it at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/mgdc-for-sharepoint-faq-how-to-create-custom-columns-in-power-bi/4124590" target="_blank" rel="noopener"&gt;How to create custom&amp;nbsp;columns&amp;nbsp;in Power BI&lt;/A&gt; (this says Power BI but applies to Excel as well).&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;More than one million rows: &lt;/STRONG&gt;If you’re using this to visualize data from the SharePoint Sites dataset, you are likely to have fewer than one million rows, which is the Microsoft Excel limit. If you’re one of the few tenants that will have more than one million sites or if you’re analyzing a larger dataset like Permissions or Files, you can only pull the first one million rows into a sheet. To overcome this, you can load the data into a model and use that to drive your pivot tables. You can read more about it at &lt;A href="https://barreto.home.blog/2022/10/21/loading-csvtext-files-with-more-than-a-million-rows-into-excel/" target="_blank" rel="noopener"&gt;Loading CSV/text files with more than a million rows into&amp;nbsp;Excel&lt;/A&gt; (this says text files but applies to JSON as well).&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG style="font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base); font-style: var(--lia-font-style-base);"&gt;6. Conclusion&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I hope this post helped you understand how to use Microsoft Excel to pull JSON data from an Azure storage account used by MGDC for SharePoint. For more information, visit &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jan 2025 17:52:34 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-use-excel-for-analytics/ba-p/4356642</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2025-01-22T17:52:34Z</dc:date>
    </item>
    <item>
      <title>Error: The provided client secret keys are expired</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-the-provided-client-secret-keys-are-expired/ba-p/4339058</link>
      <description>&lt;P&gt;If you have been using Microsoft Graph Data Connect for a while, you might have configured a recurring pipeline that has been running for several months. In that case, you might run into this error:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;PRE class="lia-indent-padding-left-30px"&gt;Operation on target task_name failed:&lt;BR /&gt;ErrorCode=UserErrorOffice365SinkValidationError,&lt;BR /&gt;'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,&lt;BR /&gt;Message=Office365 data loading job failed to validate the sink data store.&lt;BR /&gt;Possible causes are the name of the data store or its folder path is invalid,&lt;BR /&gt;or the provided credentials do not have enough permission to access the folder.&lt;BR /&gt;Detailed error: ADLS Gen2 operation failed for: Failed to get access token by using service principal.&lt;BR /&gt;Error: invalid_client, Error Message: A configuration issue is preventing authentication –&lt;BR /&gt;check the error message from the server for details.&lt;BR /&gt;You can modify the configuration in the application registration portal.&lt;BR /&gt;See &lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2Fmsal-net-invalid-client&amp;amp;data=05%7C02%7CJose.Barreto%40microsoft.com%7Cd160e2a5c0b34435187208dd0e6608ff%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C638682553597977198%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=qgMZg%2B8EhhvjlSK4CmwmOMhshU%2F%2BoKFwTjowGln0wXc%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;https://aka.ms/msal-net-invalid-client&lt;/A&gt; for details.&amp;nbsp;&lt;BR /&gt;Original exception: AADSTS7000222:&lt;BR /&gt;The provided client secret keys for app 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' are expired.&lt;BR /&gt;Visit the Azure portal to create new keys for your app: &lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2FNewClientSecret&amp;amp;data=05%7C02%7CJose.Barreto%40microsoft.com%7Cd160e2a5c0b34435187208dd0e6608ff%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C638682553598000320%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=8CrV4KHkDIyCGZY9DhGQlM2W%2BFkRHF29zt4IvR9gU%2F8%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;https://aka.ms/NewClientSecret&lt;/A&gt;,&lt;BR /&gt;or consider using certificate credentials for added security: &lt;A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2FcertCreds&amp;amp;data=05%7C02%7CJose.Barreto%40microsoft.com%7Cd160e2a5c0b34435187208dd0e6608ff%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C638682553598012111%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;amp;sdata=aPrr0QajlwFJLC8m9ZtH3hrldUntmb61tDhw4vmYFwI%3D&amp;amp;reserved=0" target="_blank" rel="noopener"&gt;https://aka.ms/certCreds&lt;/A&gt;.&lt;BR /&gt;Trace ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;BR /&gt;Correlation ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&lt;BR /&gt;Timestamp: 2024-11-26 18:35:23Z.&lt;BR /&gt;Account: 'account_name'.&lt;BR /&gt;FileSystem: 'container_name'.&lt;BR /&gt;Path: 'folder_name'.,&lt;BR /&gt;Source=Microsoft.DataTransfer.ClientLibrary,'&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The main error is really "The provided client secret keys for app 'x' are expired."&lt;BR /&gt;The solution is simple. Go back to Azure Entra ID to configure a new secret for the App Registration. You can follow the instructions at &lt;A href="https://techcommunity.microsoft.com/blog/microsoft_graph_data_connect_for_sharepo/step-by-step-synapse-gather-a-detailed-dataset-on-sharepoint-sites-using-mgdc/4070563#:~:text=1b.%20Create%20the%20Application%20Identity" target="_blank" rel="noopener" data-lia-auto-title="step 1b in our Synapse step-by-step instructions" data-lia-auto-title-active="0"&gt;step 1b in our Synapse step-by-step instructions&lt;/A&gt;&amp;nbsp;to add a new secret.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Finally, be sure to add the new secret to the link services of the pipeline (you need to update both the source (Source/MGDC) and the destination (Sink/Storage).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You avoid this issue completely by keeping track of the secret expiration date and creating a new one (and updating the pipeline) ahead of time. You can have multiple secrets in place, allowing for this secret rotation to be done proactively.&lt;/P&gt;</description>
      <pubDate>Wed, 27 Nov 2024 20:38:10 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-the-provided-client-secret-keys-are-expired/ba-p/4339058</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-27T20:38:10Z</dc:date>
    </item>
    <item>
      <title>Error: Value cannot be null - Empty Columns</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-value-cannot-be-null-empty-columns/ba-p/4330345</link>
      <description>&lt;P&gt;A few customers are seeing an issue with Synapse pipelines for Microsoft Graph Data Connect for SharePoint.&lt;/P&gt;
&lt;P&gt;The symptom is straightforward: you get an error message saying that the "Columns" parameter in the request is null. It shows something like this:&lt;/P&gt;
&lt;PRE class="lia-indent-padding-left-90px"&gt;Operation on target TTT failed: &lt;/PRE&gt;
&lt;PRE class="lia-indent-padding-left-90px"&gt;Activity failed because an inner activity failed; &lt;BR /&gt;Inner activity name: XXX, &lt;BR /&gt;Error:&amp;nbsp; &lt;BR /&gt;&amp;nbsp; &amp;nbsp; ErrorCode=UserErrorOffice365DataLoaderError,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; 'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Message=Office365 data loading failed to execute. &lt;BR /&gt;&amp;nbsp; &amp;nbsp; office365LoadErrorType: PermanentError.&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Value cannot be null.&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Parameter name: Columns,&lt;BR /&gt;&amp;nbsp; &amp;nbsp; Source=Microsoft.DataTransfer.ClientLibrary,'&lt;/PRE&gt;
&lt;P&gt;This error is basically telling you that the Columns parameter is required and cannot be null.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The columns, defined in the source definition of the copy data task, should have been automatically populated for you, so this is not expected.&lt;/P&gt;
&lt;P&gt;To fix it, you can try these steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;Opening the pipeline that failed&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Select the copy data task in the pipeline&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Select the source tab&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Under "output columns" click on "Clear"&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Under "output columns" click on "Import Schema"&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Publish the pipeline changes&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;Trigger the pipeline again&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;The picture below shows the two options you need to click on&lt;/P&gt;
&lt;img&gt;Click on "Clear", then click on "Import Schema"&lt;/img&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I hope this article can help you fix your pipeline. For more articles on Microsoft Graph Data Connect for SharePoint, see &lt;A class="lia-external-url" href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Nov 2024 17:19:05 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/error-value-cannot-be-null-empty-columns/ba-p/4330345</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-27T17:19:05Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: Why does the file count not match?</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-why-does-the-file-count-not-match/ba-p/4299057</link>
      <description>&lt;P&gt;I am frequently asked why the number of files in the Sites dataset does not match the count of the Files dataset. It is true that &lt;SPAN style="font-style: var(--lia-blog-font-style); font-weight: var(--lia-blog-font-weight); font-family: var(--lia-blog-font-family); background-color: var(--lia-rte-bg-color); color: var(--lia-bs-body-color); font-size: var(--lia-bs-font-size-base);"&gt;they sometimes don't. Here are the counts we are talking about:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sites:&lt;/STRONG&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT Id as SiteId,
       StorageMetrics.TotalFileCount AS FilesInSite
FROM Sites&lt;/LI-CODE&gt;
&lt;P&gt;&lt;STRONG&gt;Files:&lt;/STRONG&gt;&lt;/P&gt;
&lt;LI-CODE lang="sql"&gt;SELECT SiteId,
       COUNT(*) AS FilesInSite
FROM Files
GROUP BY SiteId&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The main reasons for the discrepancy are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The Files dataset is collected weekly, while the Sites dataset is collected daily, making it difficult to capture the exact same state.&lt;/LI&gt;
&lt;LI&gt;The Files dataset includes only items inside Document Libraries, whereas the Sites dataset counts all files, including those in other list types.&lt;/LI&gt;
&lt;LI&gt;The Files dataset does not include pages (files ending in .ASPX), while the Sites dataset counts all files.&lt;/LI&gt;
&lt;LI&gt;The Files dataset does not include items in the primary and secondary recycle bins, whereas the Sites dataset counts all files.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are a few examples:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A new site was created, and a few files were uploaded to a document library in this new site. Two days later, you get the SharePoint Sites dataset and find the new site with the right count of files. However, you cannot find these files in the SharePoint Files dataset. This is because the Files dataset may take one week to refresh. Wait a week and try pulling the Files dataset again.&lt;/LI&gt;
&lt;LI&gt;A team site was created with a few lists, where some of the items have file attachments. The SharePoint Files dataset does not show these file attachments. This is because the SharePoint Files dataset will only show files in document libraries.&lt;/LI&gt;
&lt;LI&gt;You deleted files from a document library in a SharePoint site a few weeks ago. Now the count of files in the SharePoint Sites is smaller than the count of files in the SharePoint Files dataset. That is because files in the recycle bins are excluded from the Files dataset. Once these deleted files go through the first and second level recycle bins, the count in the Sites dataset will also reflect that reduction.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Archimedes comparing file counts...&lt;/img&gt;
&lt;P class="lia-clear-both"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Nov 2024 17:21:36 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-why-does-the-file-count-not-match/ba-p/4299057</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-27T17:21:36Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: How to flatten datasets for SQL or Fabric</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-flatten-datasets-for-sql-or/ba-p/4292299</link>
      <description>&lt;P&gt;When you get your data from Microsoft Graph Data Connect (MGDC), you will typically get that data as a collection of JSON objects in an Azure Data Lake Storage (ADLS) Gen2 storage account. For those handling large datasets, it might be useful to move the data to a SQL Server or to OneLake (lakehouse). In those cases, you might need to flatten the datasets. This post describes how to do that.&lt;/P&gt;
&lt;P&gt;If you’re not familiar with MGDC for SharePoint, start with &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;1. Flattening&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;Most of the MGDC for SharePoint datasets come with nested objects. That means that a certain object has other objects inside it. For instance, if you have a SharePoint Groups object, it might have multiple Group Members inside. If you have a SharePoint Permissions object, you could have many Permissions Recipients (also known as Sharees). For each SharePoint File object, you will have a single Author object inside.&lt;/P&gt;
&lt;P&gt;When you convert the datasets from JSON to other formats, it is possible that these other formats require (or perform better) if you don’t have any objects inside objects. To overcome that, you can turn those child objects into properties of the parent object. For instance, instead of having the File object with an Author object inside, you can have multiple author-related columns. For instance, you could have Author.Name and Author.Email as properties of the flattened File object.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;2. Nested Objects&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;You can get the full list of SharePoint datasets in MGDC at&amp;nbsp;&lt;A href="https://aka.ms/SharePointDatasets" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointDatasets&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Here is a table with a list of objects and their nested objects:&lt;/P&gt;
&lt;DIV class="lia-table-wrapper styles_table-responsive__MW0lN"&gt;
&lt;DIV class="styles_lia-table-wrapper__h6Xo9 styles_table-responsive__MW0lN"&gt;
&lt;TABLE border="1"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;&lt;STRONG&gt;Object&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;&lt;STRONG&gt;How many?&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;&lt;STRONG&gt;Primary Key&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;&lt;STRONG&gt;Nested Object&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;&lt;STRONG&gt;How many?&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&lt;STRONG&gt;Add to Primary Key&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;Id&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;RootWeb&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;Id&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;StorageMetrics&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;Id&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;SensitivityLabelInfo&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;Id&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;Owner&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Sites&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;Id&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;SecondaryContact&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Site&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Group&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + GroupId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;Owner&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Group&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Groups&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Group&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + GroupId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;Members&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Member&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;COALESCE(AADObjectId, Email, Name)&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Permissions&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Permission&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + ScopeId + RoleDefintion + LinkId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;SharedWithCount&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Recipient Type&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;Type&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Permissions&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per Permission&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + ScopeId + RoleDefintion + LinkId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;SharedWith&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per Recipient or Sharee&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;COALESCE(AADObjectId, Email, Name)&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Files&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per File&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + WebId + ListId + ItemId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;Author&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per File&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="108"&gt;
&lt;P&gt;Files&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="104"&gt;
&lt;P&gt;1 per File&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="129"&gt;
&lt;P&gt;SiteId + WebId + ListId + ItemId&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="110"&gt;
&lt;P&gt;ModifiedBy&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="92"&gt;
&lt;P&gt;1 per File&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="176"&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When you flatten a dataset and there is an object with multiple objects inside (like Group Members or Permission Recipients), the number of rows will increase. You also need to add to primary key to keep it unique.&lt;/P&gt;
&lt;P&gt;Also note that the File Actions, Sync Health and Sync Errors datasets do not have any nested objects.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;3. One Object per Parent&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;When the nested object has only one instance, things are simple. As we described for the Author nested object inside the File object, you promote the properties of the nested object to be properties of the parent object. This is because the Author is defined as the user that initially created the file. There is always one and only one Author.&lt;/P&gt;
&lt;P&gt;This can happen even happen multiple times for the same object. The File also has a ModifiedBy property. That is the single user that last changed the file. In that case, there is also only one ModifiedBy per File.&lt;/P&gt;
&lt;P&gt;The Site object also includes several properties in this style, like RootWeb, StorageMetrics, SensitivityLabelInfo, Owner and SecondaryContact. Note that, in the context of the Site object, there is only one owner. Actually two, but that second one is tracked in a separate object called SecondaryContact which is effectively the secondary owner.&lt;/P&gt;
&lt;H4&gt;&lt;STRONG&gt;4. Multiple Objects per Parent&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;The SharePoint Permissions dataset has a special condition that might create trouble for flattening. There are two sets of nested objects with multiple objects each: SharedWith and SharedWithCount. SharedWith has the list of Recipients and SharedWithCount has a list of Recipient Types. If you just let the tools flatten it, you will end up a cross join of the two. As an example, if you have 4 recipients in an object and 2 types of recipients (internal users and external users, for instance) you will end up with 20 objects in the flattened dataset instead of the expected 10 objects (one per recipient).&lt;/P&gt;
&lt;P&gt;To avoid this, in this specific condition, I would recommend just excluding the SharedWithCount column from the object before flattening.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;H4&gt;&lt;STRONG&gt;5. Conclusion&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P&gt;I hope this clarifies how you can flatten the MGDC for SharePoint datasets, particularly SharePoint Permissions dataset.&lt;/P&gt;
&lt;P&gt;For further details about the MGDC for SharePoint, &lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 27 Nov 2024 17:25:50 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-to-flatten-datasets-for-sql-or/ba-p/4292299</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-27T17:25:50Z</dc:date>
    </item>
    <item>
      <title>MGDC for SharePoint FAQ: How can I estimate my Azure bill? Updated!</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-can-i-estimate-my-azure-bill-updated/ba-p/4284157</link>
      <description>&lt;H2 class="wp-block-heading"&gt;Introduction&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When gathering SharePoint data through Microsoft Graph Data Connect, you are billed through Azure. As I write this blog, the price to pull 1,000 objects from Microsoft Graph Data Connect in the US is $0.75, plus the cost for Azure infrastructure like Azure Storage and Azure Synapse.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That is true for all datasets except the SharePoint Files dataset, which has a different billing rate. Because of its typical high volume, the SharePoint Files dataset is billed at $0.75 per 50,000 objects.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I wrote a blog about&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-what-counts-as-an-object/ba-p/4074274" target="_blank" rel="noopener"&gt;what counts as an object&lt;/A&gt;, but I frequently get questions about how to estimate the overall Azure bill for the Microsoft Graph Data Connect for SharePoint for a specific project. Let me try to clarify things…&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Before we start, here are a few notes and disclaimers:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;These are estimates and your specific Azure bill will vary.&lt;/LI&gt;
&lt;LI&gt;Check the official Azure links provided. Rates may vary by country and over time.&lt;/LI&gt;
&lt;LI&gt;These are Azure pay-as-you-go list prices in the US as of October 2024.&lt;/LI&gt;
&lt;LI&gt;You may benefit from Azure discounts, like savings using a pre-paid plan.&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2 class="wp-block-heading"&gt;How many objects?&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To estimate the number of objects, you start by finding out the number of sites in the tenant. This should include all sites (not just active sites) in your tenant. You can find this number easily in the SharePoint Admin Center. That will be the number of objects in your SharePoint Sites dataset.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Finding the number of SharePoint Groups and SharePoint Permissions will require some estimation. I recently collected some telemetry and saw that the average number of SharePoint Groups per Site for a sample of large tenants was around 31. The average SharePoint permissions per site was around 61. The average number of files per site was 2,874.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Delta pulls (gathering just what changed) will be smaller, but that also varies depending on how much collaboration happens in your tenant (in the Delta numbers below, I am estimating a 5% change for an average collaboration level).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here’s a table to help you estimate your Microsoft Graph Data Connect for SharePoint costs:&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Notes for the table above:&lt;/P&gt;
&lt;P&gt;* Higher collaboration level assumes twice the average in terms of groups, permissions and files.&lt;BR /&gt;** Security scenario includes Sites, Groups and Permissions. Capacity Scenario includes Sites and Files. &lt;BR /&gt;*** Delta assumes 5% change for average collaboration and 10% change for high collaboration. These are on the high side for one week's worth of changes. Your numbers will likely be smaller.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you can see, smaller tenants with an average collaboration will see costs below $10 for the smaller Sites dataset and below $1,000 for larger datasets like Permissions or Files.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you want to estimate the number of SharePoint objects more precisely, there is an option to sample the dataset and get a total object count without pulling the entire dataset. For more information, see&amp;nbsp;&lt;A href="https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-can-i-sample-or-estimate-the-number/ba-p/4094689" target="_self"&gt;MGDC for SharePoint FAQ: How can I sample or estimate the number objects in a dataset?&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The official information about Microsoft Graph Data Connect pricing is at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://azure.microsoft.com/en-us/pricing/details/graph-data-connect/" target="_blank" rel="noopener"&gt;https://azure.microsoft.com/en-us/pricing/details/graph-data-connect/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 class="wp-block-heading"&gt;How much storage?&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The SharePoint information you get from Microsoft Graph Data Connect will be stored in an Azure Storage account. That also incurs some cost, but it’s usually small when compared to the Microsoft Graph Data Connect costs for data pulls. The storage will be proportional to the number of objects and to the size of these objects.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Again, this will vary depending on the amount of collaboration in the tenant. More sharing means more members in groups and more people in the permissions, which will result in more objects and also larger objects.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I also did some estimating of object size and arrived at around 2KB per SharePoint Site object, 20KB per SharePoint Group object, 3KB per Permission object and 1KB per file object. There are several Azure storage options including Standard vs. Premium, LRS vs. GRS, v1 vs. v2 and Hot vs. Cool. For Microsoft Graph Data Connect, you can go with a Standard + LRS + V2 + Cool blob storage account, which costs $0.01 per GB per month.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here’s a table to help you estimate your Azure Storage costs:&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The same notes from the previous table apply here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As you can see, smaller tenants with average collaboration will see storage costs below $1000/month, most of it going to storing the larger Files dataset. The cost for delta dataset storage is also fairly small, even for the largest of tenants. There are additional costs per storage operation like read and write but those are negligible at this scale (for instance, $0.065 per 10,000 writes and $0.005 per 10,000 reads).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The official information about Azure Storage pricing is at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://azure.microsoft.com/en-us/pricing/details/storage/blobs/" target="_blank" rel="noopener"&gt;https://azure.microsoft.com/en-us/pricing/details/storage/blobs/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 class="wp-block-heading"&gt;What about Synapse?&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You will also typically use Azure Synapse to move the SharePoint data from Microsoft 365 to your Azure account. You could run a pipeline daily to get the information and do some basic processing, like computing deltas or creating aggregations.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are a few of the items that are billed for Azure Synapse when running Microsoft Graph Data Connect pipelines:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Azure Hosted – Integration Runtime – Data Movement – $0.25/DIU-hour&lt;/LI&gt;
&lt;LI&gt;Azure Hosted – Integration Runtime – Pipeline Activity (Azure Hosted) – $0.005/hour&lt;/LI&gt;
&lt;LI&gt;Azure Hosted – Integration Runtime – Orchestration Activity Run – $1 per 1,000 runs&lt;/LI&gt;
&lt;LI&gt;vCore – $0.15 per vCore-hour&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As with Azure Storage, the costs here are small. You will likely need one pipeline run per day and it will typically run in less than one hour for a small tenant. Large tenants might need a few hours per run to gather all their SharePoint datasets. You should expect less than $10/month for smaller tenants and less than $100/month for larger and/or more collaborative tenants.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The official information about Azure Synapse pricing is at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://azure.microsoft.com/en-us/pricing/details/synapse-analytics/" target="_blank" rel="noopener"&gt;https://azure.microsoft.com/en-us/pricing/details/synapse-analytics/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2 class="wp-block-heading"&gt;Closing notes&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These are the main meters in Azure to get you started with costs related to Microsoft Graph Data Connect for SharePoint. I suggest experimenting with a small test/dev tenant to get familiar with Azure billing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For more information about Microsoft Graph Data Connect for SharePoint, see the links at&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Fri, 01 Nov 2024 22:03:16 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/mgdc-for-sharepoint-faq-how-can-i-estimate-my-azure-bill-updated/ba-p/4284157</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-01T22:03:16Z</dc:date>
    </item>
    <item>
      <title>Information Oversharing Template - MGDC for SharePoint</title>
      <link>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/information-oversharing-template-mgdc-for-sharepoint/ba-p/4277811</link>
      <description>&lt;H3&gt;&lt;STRONG&gt;1. Security Scenario&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;One of the most common scenarios for Microsoft Graph Data Connect for SharePoint is Information Oversharing. This security scenario is about knowing which items are being shared widely in the tenant and understanding how permissions are applied at each level.&lt;/P&gt;
&lt;P&gt;The main MGDC datasets for this scenario are SharePoint Sites and SharePoint Permissions, plus several group-related datasets (SharePoint Groups, AAD Group Details, AAD Group Owners and AAD Group Members). If you’re not familiar with these datasets, you can find details in the schema definitions at&amp;nbsp;&lt;A href="https://aka.ms/SharePointDatasets" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointDatasets&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;2. Information Oversharing Template&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;To help you use these datasets, the team has worked on a Information Oversharing Template. This includes the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A set of instructions&lt;/LI&gt;
&lt;LI&gt;An ARM template&lt;/LI&gt;
&lt;LI&gt;An Azure Synapse pipeline template&lt;/LI&gt;
&lt;LI&gt;A Power BI template&lt;/LI&gt;
&lt;LI&gt;A sample Power BI dashboard&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Let’s investigate each one.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;3. Instructions&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The template comes with a set of instructions with details about registering an application, creating a secret, deploying an ARM template, importing a pipeline template, running the pipeline and creating a Power BI dashboard.&lt;/P&gt;
&lt;P&gt;You can find the instructions for each of the items above at &lt;A href="https://go.microsoft.com/fwlink/?linkid=2207816" target="_blank" rel="noopener noreferrer"&gt;https://go.microsoft.com/fwlink/?linkid=2207816&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;4. ARM Template&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The Information Oversharing template includes an Azure Resource Manager template that helps you set up the resource group, Synapse workspace, Spark pool, storage account, and storage permissions. You deploy the ARM template to automatically provision those resources.&lt;/P&gt;
&lt;P&gt;You can find details on how to find and deploy the ARM template in the instructions (see item 3).&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;5. Pipeline Template&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;This Security scenario includes a pipeline template that you can use to simplify your deployment. In Azure Synapse, when you need to create a pipeline, you can use the Synapse Gallery to find the pipeline template.&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img /&gt;
&lt;P&gt;You can find details on how to create and run the pipeline in the instructions (see item 3).&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;6. Power BI Template&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The last step is to create a set of reports and dashboards using Power BI. There is a Power BI template for that, which comes in the form of a .PBIT file. This helps you quickly turn your data into ready-to-use preconfigured dashboards and reports, which you can then customize.&lt;/P&gt;
&lt;P&gt;You can find details on how to find and use the Power BI template in the instructions (see item 3). We also provide a Power BI file with some sample data which you can get from&amp;nbsp;&lt;BR /&gt;&lt;A href="https://go.microsoft.com/fwlink/?linkid=2211101" target="_blank" rel="noopener noreferrer"&gt;https://go.microsoft.com/fwlink/?linkid=2211101&lt;/A&gt;&amp;nbsp;(click on the download button to get the PBIX file).&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;7. Sample Dashboards and Reports&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Here are samples of the reports and dashboards included in the Power BI Template.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Security Main Report&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Sharing by Item Type&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Sharing by Role Definition&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Sharing by File Extension&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;Sharing by Sensitivity Label&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;External Sharing&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;External Sharing by Domain&lt;/img&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;img&gt;External Sharing by Sensitivity and Domain&lt;/img&gt;
&lt;P&gt;Note: These dashboards are provided as examples or starting points, which you can modify as needed. There are many more ways to visualize the data in these datasets.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;8. Conclusion&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;I hope this provided a good overview of the Information Oversharing template. You can read more about the Microsoft Graph Data Connect for SharePoint at&amp;nbsp;&lt;A href="https://aka.ms/SharePointData" target="_blank" rel="noopener"&gt;https://aka.ms/SharePointData&lt;/A&gt;. There you will find many details, including a list of datasets available, other common scenarios and frequently asked questions.&lt;/P&gt;</description>
      <pubDate>Wed, 06 Nov 2024 19:47:31 GMT</pubDate>
      <guid>https://techcommunity.microsoft.com/t5/microsoft-graph-data-connect-for/information-oversharing-template-mgdc-for-sharepoint/ba-p/4277811</guid>
      <dc:creator>Jose_Barreto</dc:creator>
      <dc:date>2024-11-06T19:47:31Z</dc:date>
    </item>
  </channel>
</rss>

