<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FUAM on Hat Full of Data</title><link>https://hatfullofdata.blog/categories/fuam/</link><description>Recent content in FUAM on Hat Full of Data</description><generator>Hugo -- gohugo.io</generator><language>en-gb</language><lastBuildDate>Fri, 07 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://hatfullofdata.blog/categories/fuam/index.xml" rel="self" type="application/rss+xml"/><item><title>Making FUAM include Pro Workspaces</title><link>https://hatfullofdata.blog/making-fuam-include-pro-workspaces/</link><pubDate>Fri, 07 Aug 2026 00:00:00 +0000</pubDate><guid>https://hatfullofdata.blog/making-fuam-include-pro-workspaces/</guid><description>&lt;img src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/cover.png" alt="Featured image of post Making FUAM include Pro Workspaces" /&gt;&lt;p&gt;FUAM stands for Fabric Unified Admin Monitoring. It is a community-driven tool designed for Power BI and Microsoft Fabric administrators to track tenant settings, monitor capacity usage, audit user activities and manage data governance. Its a great starting place to do monitoring.&lt;/p&gt;
&lt;p&gt;I won&amp;rsquo;t walk through the setting up of FUAM, they have great instructions here &lt;a class="link" href="https://github.com/microsoft/fabric-toolbox/blob/main/monitoring/fabric-unified-admin-monitoring/how-to/How_to_deploy_FUAM.md" target="_blank" rel="noopener"
 &gt;FUAM Deployment&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="can-you-hear-the-but-coming"&gt;Can you hear the but coming?
&lt;/h2&gt;&lt;p&gt;Its a great but it only looks at dedicated capacity, ignoring the shared capacity. This post walks through the changes I make to FUAM to make it also include the workspaces on shared capacity.&lt;/p&gt;
&lt;h2 id="high-level-solution"&gt;High Level Solution
&lt;/h2&gt;&lt;p&gt;Throughout this solution I will add a boolean parameter called &lt;strong&gt;dedicated_only&lt;/strong&gt; so that filter strings can be created and code can be executed based on the value.&lt;/p&gt;
&lt;p&gt;In the capacities I will add a manual row for the Shared Pro capacity if dedicated_only is false. In the workspaces pipeline I will set the filter parameter based upon dedicated_only value and replace the null values in the capacity id column with the id of the inserted row&lt;/p&gt;
&lt;h2 id="capacities"&gt;Capacities
&lt;/h2&gt;&lt;p&gt;There is a pipeline called Load_Capacities_E2E that uses a copy data activity to call the api to create a json file. It then runs a notebook that writes a silver layer table in the FUAM_Staging_Lakehouse and then merges that into a gold table in FUAM_Lakehouse called capacities.&lt;/p&gt;
&lt;p&gt;I add the dedicated_only parameter to the pipeline and to the notebook book.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Snapshot of the pipeline parameters and notebook parameter code block with dedicated_only parameter" class="gallery-image" data-flex-basis="482px" data-flex-grow="200" height="707" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/add%20parameters.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/add%20parameters_hu_1d458b5911b7a263.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/add%20parameters.png 1420w" width="1420"&gt;&lt;/p&gt;
&lt;p&gt;On the notebook activity in the pipeline I add the parameter under base parameters on the settings tab.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Snapshot of notebook settings" class="gallery-image" data-flex-basis="508px" data-flex-grow="211" height="692" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20notebook%20activity.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20notebook%20activity_hu_e72b38a2cc3329ec.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20notebook%20activity.png 1466w" width="1466"&gt;&lt;/p&gt;
&lt;p&gt;Lastly in the notebook I add a new code block, after cell 10 and before the write to silver delta table. The shared capacity needs to have a region assigned. It is the region of the home tenancy. I could not find an api to give me that detail, but the PP3, premium per user capacity is also in the home region so I used that to get the region. If there isn&amp;rsquo;t a PP3 then I set the region to unknown.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;dedicated_only&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Get Home Region from PP3 row&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pp3_region_row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;silver_df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;col&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;sku&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PP3&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;pp3_region_row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pp3_region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Unknown&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;pp3_region&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pp3_region_row&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;display_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pp3_region&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Create Shared Capacity Row&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shared_row&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;admins&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;capacityUserAccessRight&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Shared (default)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;CapacityId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;00000000-0000-0000-0000-000000000000&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pp3_region&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;sku&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Pro&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;state&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Active&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Convert to dataframe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;shared_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;spark&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;createDataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shared_row&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;silver_df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Append to silver_df&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;silver_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;silver_df&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unionByName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shared_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;display_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;display&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;silver_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I then ran the pipeline to confirm it worked and then checked the FUAM_Lakehouse for the Shared (default) capacity.&lt;/p&gt;
&lt;p&gt;&lt;img alt="snapshot of SQL pulling rows from capacities table and the result rows showing Shared capacity is included" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="717" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20result.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20result_hu_d0ca4870040fc4a7.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/capacity%20result.png 1310w" width="1310"&gt;&lt;/p&gt;
&lt;h2 id="workspaces"&gt;Workspaces
&lt;/h2&gt;&lt;p&gt;For the workspaces there is a Load_PBI_Workspaces_E2E. On the api calls to pull the workspaces it includes a filter that only pulls workspaces based on dedicated capacity. So the solution here is to use the dedicated_only parameter again and set the value of the filter string based on it.&lt;/p&gt;
&lt;p&gt;Just the same as the capacities pipeline I add a parameter called dedicated_only. I then add an If condition as the second activity. The expression I use dynamic values to set it to the dedicated only parameter.&lt;/p&gt;
&lt;p&gt;For the true part I add a set variable activity that sets a new variable called dedicated_filter to the value&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@string(&amp;#39;$filter=isOnDedicatedCapacity eq true&amp;amp;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For the false part I add another set variable activity to set dedicated_filter to a blank string using&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@string(&amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="snapshot of the If Condition activity and the nested set variable activities" class="gallery-image" data-flex-basis="205px" data-flex-grow="85" height="1722" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/dedicated%20filter%20logic.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/dedicated%20filter%20logic_hu_5ad837f68859e751.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/dedicated%20filter%20logic.png 1475w" width="1475"&gt;&lt;/p&gt;
&lt;p&gt;Now the dedicated_filter variable has been set up we need to use in the 2 activities that include dedicated filters. The first one is Fetch Workspace count. Under settings take a look at the Relative URL. Change the formula to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;groups?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;dedicated_filter&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$top=1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="snapshot of the Fetch Workspace count settings" class="gallery-image" data-flex-basis="505px" data-flex-grow="210" height="680" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20count.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20count_hu_7e0817002d6d40ea.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20count.png 1431w" width="1431"&gt;&lt;/p&gt;
&lt;p&gt;The other one to change is the nested Fetch Workspace activity in the ForEach Get Workspaces activity. Change the Relative Url to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;groups?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;dedicated_filter&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$top=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;limit&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;amp;$skip=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;currentSkip&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="snapshot of the nested Fetch Workspace settings" class="gallery-image" data-flex-basis="393px" data-flex-grow="164" height="902" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20for%20each.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20for%20each_hu_e39cb695038aca47.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20for%20each.png 1480w" width="1480"&gt;&lt;/p&gt;
&lt;p&gt;If the dedicated_only parameter is set to false the above steps will pull through all the workspaces including those on the shared capacity but they will not be connected to the capacity row we added. So in order to fix this we need to replace the null values in the capacity id column.&lt;/p&gt;
&lt;p&gt;There will only be null capacity id values if pro workspaces have been included so we can run the replaces nulls in all cases and it is just a small code addition. Edit the 02_Transfer_Workspaces_Unit notebook, the last activity in the pipeline. Add a new code block after block 8.&lt;/p&gt;
&lt;p&gt;Also to avoid the Default Dataset Storage mde being blank I make an assumption that its either Small or Large and Large is only available for premium and Fabric capacities. So I these for assume null should be replaced with small in the DefaultDatasetStorageFormat column.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Replace Nulls with Shared Capacity Id
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;silver_df = silver_df.fillna(value=&amp;#34;00000000-0000-0000-0000-000000000000&amp;#34;, subset=[&amp;#39;CapacityId&amp;#39;])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;silver_df = silver_df.fillna(value=&amp;#34;Small&amp;#34;, subset=[&amp;#39;DefaultDatasetStorageFormat&amp;#39;])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The block after displays silver_df and the next block writes silver_df to a table.&lt;/p&gt;
&lt;p&gt;Once all the changes are made run the pipeline to ensure it works.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Snapshot of SQL run against the workspaces table to show the shared capacity id against the rows that have 0 in the Is On Dedicated Capacity column" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="864" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20result.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20result_hu_1d03febffa5f105c.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/workspace%20result.png 1551w" width="1551"&gt;&lt;/p&gt;
&lt;h2 id="end-to-end-pipeline"&gt;End to End Pipeline
&lt;/h2&gt;&lt;p&gt;The capacity and workspace pipeline are called by the Load_FUAM_Data_E2E pipeline. The new pipelines&amp;rsquo; parameter appears automatically so I just make sure that the 2 Invoke pipeline activities have the parameter set correctly in the settings tab. To follow the complete pattern this possibly should be moved to a pipeline parameter like the display_data one.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screen shot of settings tab of the Load_Workspaces activity showing dedicated_only is set to false" class="gallery-image" data-flex-basis="305px" data-flex-grow="127" height="1087" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/e2e%20pipeline.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/e2e%20pipeline_hu_6793fe7a29a592a.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/e2e%20pipeline.png 1383w" width="1383"&gt;&lt;/p&gt;
&lt;h2 id="overall-report"&gt;Overall Report
&lt;/h2&gt;&lt;p&gt;Once all these changes have been made if we take a look at the reporting we can see the Shared capacity has come through. Obviously the capacity usage does not apply to the items in workspaces in the shared capacity but everything else seems to apply.&lt;/p&gt;
&lt;p&gt;This is my very small tenancy that only exists for training, demos and blog screenshots.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screen shot of the capacities page in the FUAM Core Report" class="gallery-image" data-flex-basis="583px" data-flex-grow="243" height="1255" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/report.png" srcset="https://hatfullofdata.blog/making-fuam-include-pro-workspaces/report_hu_d44600715691011b.png 800w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/report_hu_1a20f8b904ebf021.png 1600w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/report_hu_eb2dbad342bb89d9.png 2400w, https://hatfullofdata.blog/making-fuam-include-pro-workspaces/report.png 3053w" width="3053"&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;There are still plenty of tenancies out there with significant amounts of Pro workspaces mixed in with their Fabric and Premium workspaces and the U in FUAM does stand for unified. Let me know how you get on and what else I could do with FUAM to make it work for your situation.&lt;/p&gt;</description></item></channel></rss>