<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Power Platform FAQs</title>
	<atom:link href="https://powerplatformfaqs.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://powerplatformfaqs.com</link>
	<description>Microsoft Power Platform Tutorials</description>
	<lastBuildDate>Sun, 12 Jul 2026 17:37:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://powerplatformfaqs.com/wp-content/uploads/2024/06/Power-Platform-FAQs-Favicon-150x150.jpg</url>
	<title>Power Platform FAQs</title>
	<link>https://powerplatformfaqs.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Add Named Formula in Power Apps (5 Easy Methods)</title>
		<link>https://powerplatformfaqs.com/power-apps-add-named-formula/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Sun, 12 Jul 2026 17:36:59 +0000</pubDate>
				<category><![CDATA[Power Apps]]></category>
		<category><![CDATA[Add Named Formula in Power Apps]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1279</guid>

					<description><![CDATA[Have you ever built a canvas app where the same calculation shows up in five different places? Then your boss asks you to change the tax rate, and you spend twenty minutes hunting down every screen where you typed that formula. You fix one label, forget another, and now your app shows two different numbers ... <a title="Add Named Formula in Power Apps (5 Easy Methods)" class="read-more" href="https://powerplatformfaqs.com/power-apps-add-named-formula/" aria-label="Read more about Add Named Formula in Power Apps (5 Easy Methods)">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Have you ever <a href="https://www.spguides.academy/Power-Apps" target="_blank" rel="noreferrer noopener">built a canvas app</a> where the same calculation shows up in five different places? Then your boss asks you to change the tax rate, and you spend twenty minutes hunting down every screen where you typed that formula. You fix one label, forget another, and now your app shows two different numbers for the same thing. That&#8217;s a maintenance nightmare, and it&#8217;s exactly the problem <strong>Power Apps named formulas</strong> solve.</p>



<p class="wp-block-paragraph">A <strong>named formula in Power Apps</strong> works like a named cell in Excel. You assign a name to a formula once, and Power Apps automatically updates that value wherever you reference it, without you writing a single line of &#8220;update&#8221; code. You don&#8217;t set it once and forget it, either—Power Apps recalculates it in real time whenever the underlying data changes, so every screen always shows the correct number.</p>



<p class="wp-block-paragraph">Think of a sales team tracker built on a <strong>SharePoint list</strong> called <strong>SalesTracker</strong>, with columns for <strong>SalesRep</strong>, <strong>Region</strong>, <strong>Amount</strong>, and <strong>Status</strong>. Instead of writing the same &#8220;total approved sales&#8221; calculation in three <a href="https://powerplatformfaqs.com/power-apps-gallery-hover-effects/" target="_blank" rel="noreferrer noopener">galleries</a> and a label, you write it once as a named formula, and every control that uses it stays in sync automatically. This one change in how you think about app logic can save you hours of debugging later, especially as your app grows past a handful of screens.</p>



<p class="wp-block-paragraph">In this article, I&#8217;ll show you 5 ways to do <strong>named formula in Power Apps</strong>.</p>



<h2 class="wp-block-heading">What Makes Named Formulas Different</h2>



<p class="wp-block-paragraph">A named formula lives inside the <strong>App object&#8217;s Formulas property</strong>, and it recalculates automatically whenever the data it depends on changes. Unlike a variable created with <strong>Set()</strong> or <strong>UpdateContext()</strong>, you never manually update a named formula—<a href="https://powerplatformfaqs.com/power-apps-checkbox/" target="_blank" rel="noreferrer noopener">Power Apps controls</a> exactly when it recalculates. This is a big mindset shift if you&#8217;re used to working with variables, where you decide when a value updates.</p>



<p class="wp-block-paragraph">With variables, you write the update logic yourself, usually inside a button&#8217;s <strong>OnSelect</strong> property or in <strong><a href="https://powerplatformfaqs.com/power-apps-onstart/" target="_blank" rel="noreferrer noopener">App.OnStart</a></strong>. With named formulas, you specify what the value should be, and Power Apps determines <em>when</em> to recalculate it.</p>



<p class="wp-block-paragraph">This makes named formulas ideal for values that should always reflect the current data, such as totals, filtered lists, or user role flags. It also means your app has fewer moving parts to break, since there&#8217;s no risk of forgetting to update a value somewhere.</p>



<p class="wp-block-paragraph">Before you start, know that named formulas require a modern Power Apps environment with the Power Fx formula bar enabled. Most apps created in the last couple of years already have this by default, so you likely won&#8217;t need to change any settings.</p>



<h2 class="wp-block-heading">Method 1 – Basic Named Formula for a Simple Value</h2>



<p class="wp-block-paragraph">This method works best when you need a single reusable value, like today&#8217;s date or a constant business rule, available across every screen in your app without recalculating it manually each time.</p>



<p class="wp-block-paragraph"><strong>Step 1: Open the App Formulas property</strong></p>



<p class="wp-block-paragraph">Go to <strong>Power Apps Studio → Tree view → App</strong> (select <strong>App</strong> from the dropdown at the top-left of the formula bar), then choose <strong>Formulas</strong> from the property dropdown. This property is different from <strong>OnStart</strong>, so don&#8217;t confuse the two.</p>



<pre class="wp-block-preformatted">CurrentQuarter = RoundUp(Month(Today())/3, 0);</pre>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="921" height="452" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-formula-bar-showing-App-object-with-Formulas-property.jpg" alt="Power Apps Studio formula bar showing App object with Formulas property" class="wp-image-1282" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-formula-bar-showing-App-object-with-Formulas-property.jpg 921w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-formula-bar-showing-App-object-with-Formulas-property-300x147.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-formula-bar-showing-App-object-with-Formulas-property-768x377.jpg 768w" sizes="(max-width: 921px) 100vw, 921px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>RoundUp</strong> rounds a number up to the nearest whole number, and <strong>Month(Today())</strong> gets today&#8217;s month number. Dividing by 3 and rounding up converts any month into its correct calendar quarter (1 to 4). You never need to update this manually—it recalculates itself every single day.</p>



<p class="wp-block-paragraph"><strong>Step 2: Reference the named formula anywhere in your app</strong></p>



<p class="wp-block-paragraph">Add a <strong>Label control</strong> (<strong>Power Apps Studio → Insert → Text</strong> <strong>Label</strong>) and set its <strong>Text</strong> property:</p>



<pre class="wp-block-preformatted">"Current Quarter: " &amp; CurrentQuarter</pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="885" height="603" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Label-control-on-canvas-displaying-the-calculated-quarter-value.jpg" alt="Named Formula in Power Apps" class="wp-image-1283" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Label-control-on-canvas-displaying-the-calculated-quarter-value.jpg 885w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Label-control-on-canvas-displaying-the-calculated-quarter-value-300x204.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Label-control-on-canvas-displaying-the-calculated-quarter-value-768x523.jpg 768w" sizes="(max-width: 885px) 100vw, 885px" /></figure>
</div>


<p class="wp-block-paragraph">You can now reuse <strong>CurrentQuarter</strong> on any screen in your app, and it will always show the correct value without any extra code.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Named formulas must always end with a semicolon, even the last one in the list. Forgetting it is the most common reason a named formula shows an error.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/display-manager-name-and-email-in-a-power-apps-gallery/">Display Manager Name and Email in a Power Apps Gallery</a></p>



<h2 class="wp-block-heading">Method 2 – Named Formula That Filters a Data Source</h2>



<p class="wp-block-paragraph">Choose this method when you want a consistently filtered view of your data—like &#8220;approved sales only&#8221;—available in multiple galleries without repeating the <strong>Filter()</strong> logic on every screen.</p>



<p class="wp-block-paragraph"><strong>Step 1: Define the filtered named formula</strong></p>



<p class="wp-block-paragraph">In <strong>App → Formulas</strong>, add:</p>



<pre class="wp-block-preformatted">ApprovedSales = Filter(SalesTracker, Status = "Approved");</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>Filter()</strong> returns only the records from <strong>SalesTracker</strong> where <strong>Status</strong> equals &#8220;Approved.&#8221; Because this is a named formula, Power Apps automatically re-evaluates it every time the underlying list changes—you never call <strong>Refresh()</strong> manually for this value.</p>



<p class="wp-block-paragraph"><strong>Step 2: Bind a Gallery to the named formula</strong></p>



<p class="wp-block-paragraph">Insert a <strong>Gallery control</strong> (<strong>Power Apps Studio → Insert → Layout → Vertical Gallery</strong>) and set its <strong>Items</strong> property:</p>



<pre class="wp-block-preformatted">ApprovedSales</pre>



<p class="wp-block-paragraph"><strong>Step 3: Reuse the same named formula on a second screen</strong></p>



<p class="wp-block-paragraph">Add another gallery on a different screen, maybe a &#8220;Manager Dashboard&#8221; screen, and set its <strong>Items</strong> property to the exact same value:</p>



<pre class="wp-block-preformatted">ApprovedSales</pre>



<p class="wp-block-paragraph">Both galleries now stay perfectly in sync. If a sales rep&#8217;s status changes from &#8220;Pending&#8221; to &#8220;Approved,&#8221; both screens update automatically without any extra code from you.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> If <strong>SalesTracker</strong> is a large SharePoint list, confirm that <strong>Filter()</strong> with a simple equality check like <strong>Status = &#8220;Approved&#8221;</strong> is delegable. Non-delegable filters silently cap results at 500 or 2000 records, so your totals could quietly become wrong without any error message.</p>
</blockquote>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/get-manager-details-current-user-power-apps/">Get Manager Details for the Current User in Power Apps</a></p>



<h2 class="wp-block-heading">Method 3 – Named Formula for Aggregated Totals</h2>



<p class="wp-block-paragraph">Use this when you need live totals or counts, such as total approved sales amount, shown on a dashboard screen that updates as data changes without you refreshing anything.</p>



<p class="wp-block-paragraph"><strong>Step 1: Create a named formula that sums a column</strong></p>



<pre class="wp-block-preformatted">TotalApprovedAmount = Sum(ApprovedSales, Amount);</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>Sum()</strong> adds up the <strong>Amount</strong> column across every record returned by <strong>ApprovedSales</strong>. Because named formulas can reference other named formulas, you build a clean chain of logic without repeating the <strong>Filter()</strong> expression a second time.</p>



<p class="wp-block-paragraph"><strong>Step 2: Display the total on a dashboard label</strong></p>



<pre class="wp-block-preformatted">Text(TotalApprovedAmount, "$#,##0")</pre>



<p class="wp-block-paragraph"><strong>Step 3: Add a record count alongside the total</strong></p>



<p class="wp-block-paragraph">You can chain a second named formula right after the first one in the same <strong>Formulas</strong> property:</p>



<pre class="wp-block-preformatted">ApprovedSalesCount = CountRows(ApprovedSales);</pre>



<p class="wp-block-paragraph">Now both <strong>TotalApprovedAmount</strong> and <strong>ApprovedSalesCount</strong> stay live on your dashboard, updating instantly whenever a sales rep&#8217;s record changes status.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Named formulas can reference each other in any order because Power Apps figures out the dependency chain for you—you don&#8217;t need to worry about which one loads first or write them in a specific sequence.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/power-apps-delegation/">Delegation in Power Apps</a></p>



<h2 class="wp-block-heading">Method 4 – Named Formula for User Role or Access Logic</h2>



<p class="wp-block-paragraph">This method is suitable for scenarios where you need to show or hide controls based on who is logged in, such as allowing only regional managers to edit records in your sales tracker.</p>



<p class="wp-block-paragraph"><strong>Step 1: Define a role-check named formula</strong></p>



<pre class="wp-block-preformatted">IsRegionalManager = User().Email in ["manager1@company.com", "manager2@company.com"];</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>User().Email</strong> returns the signed-in user&#8217;s email address. The <strong>in</strong> operator checks whether that email exists inside your list of manager addresses, returning <strong>true</strong> or <strong>false</strong> automatically the moment the app loads.</p>



<p class="wp-block-paragraph"><strong>Step 2: Use the named formula to control visibility</strong></p>



<p class="wp-block-paragraph">Select an <strong>Edit button</strong> (<strong>Power Apps Studio → Insert → Button</strong>, modern Fluent-based control) and set its <strong>Visible</strong> property:</p>



<pre class="wp-block-preformatted">IsRegionalManager</pre>



<p class="wp-block-paragraph"><strong>Step 3: Reuse the same logic to lock form fields</strong></p>



<p class="wp-block-paragraph">On an <strong>Edit form</strong> (<strong>Power Apps Studio → Insert → Forms → Edit form</strong>), set the <strong>DisplayMode</strong> property of a data card to:</p>



<pre class="wp-block-preformatted">If(IsRegionalManager, DisplayMode.Edit, DisplayMode.View)</pre>



<p class="wp-block-paragraph">This way, regular sales reps can view records, but only managers can actually edit them, all controlled from a single named formula.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> For real security, pair this with server-side permissions on the SharePoint list or Dataverse table—hiding a button only changes what users see, not what they can technically access through other means like Power Automate flows.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/power-apps-notify/">Power Apps Notify Function</a></p>



<h2 class="wp-block-heading">Method 5 – Named Formula with a User-Defined Function</h2>



<p class="wp-block-paragraph">Choose this experimental approach when the same calculation requires different inputs each time, such as calculating commission for any sales amount you pass in, rather than a fixed value.</p>



<p class="wp-block-paragraph"><strong>Step 1: Define a user-defined function alongside your named formulas</strong></p>



<pre class="wp-block-preformatted">CalculateCommission(SaleAmount: Number): Number = SaleAmount * 0.1;</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br>A <strong>user-defined function</strong> works like a named formula but accepts a parameter (<strong>SaleAmount</strong>) and returns a calculated result. You write the logic once, then call it with different values wherever you need it, which named formulas alone cannot do.</p>



<p class="wp-block-paragraph"><strong>Step 2: Call the function inside a gallery label</strong></p>



<pre class="wp-block-preformatted">Text(CalculateCommission(ThisItem.Amount), "$#,##0")</pre>



<p class="wp-block-paragraph"><strong>Step 3: Reuse the function with a different tier</strong></p>



<p class="wp-block-paragraph">You can define a second function with a different rate for senior sales reps:</p>



<pre class="wp-block-preformatted">CalculateSeniorCommission(SaleAmount: Number): Number = SaleAmount * 0.15;</pre>



<p class="wp-block-paragraph">Now you have two clean, reusable functions instead of two long, repeated formulas scattered across your app.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> User-defined functions are still an experimental feature, so check <strong>Power Apps Studio → Settings → Upcoming features</strong> and enable them before use, and avoid relying on them in production apps until Microsoft marks them as fully supported.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/power-apps-collect/">Power Apps Collect Function</a></p>



<h2 class="wp-block-heading">Things to Keep in Mind</h2>



<ul class="wp-block-list">
<li><strong>Named formulas are immutable:</strong> Once Power Apps calculates a named formula, you cannot use <strong>Set()</strong> to override it—if you need a changeable value, use a variable instead.</li>



<li><strong>Check delegation before filtering large lists:</strong> <strong>Filter()</strong> on a <strong>SharePoint list</strong> or <strong>Dataverse table</strong> only pushes the query to the server for delegable operators; non-delegable filters truncate your data silently on large tables.</li>



<li><strong>Named formulas beat App.OnStart for initialization:</strong> Loading data through <strong>App.OnStart</strong> runs once at launch and can slow down startup, while named formulas calculate on demand and stay current automatically.</li>



<li><strong>Global variables still have their place:</strong> Use <strong>Set()</strong> for values users actively change, like a toggle or a selected filter, since named formulas cannot be manually updated at runtime.</li>



<li><strong>Canvas apps only, for now:</strong> Named formulas and user-defined functions currently work only in Canvas Apps, not in model-driven apps, so keep that in mind if you switch between app types.</li>



<li><strong>Don&#8217;t forget the semicolon:</strong> Every named formula in the <strong>Formulas</strong> property needs a trailing semicolon, including the very last one, or the whole property fails to save.</li>
</ul>



<p class="wp-block-paragraph"><strong>Named formulas in Power Apps</strong> offer five practical ways to centralize logic, ranging from simple constants to filtered data and user-defined functions with parameters. For most sales tracker style apps, start with a filtered named formula for your core dataset, then layer aggregation and role-based formulas on top as your app grows in complexity. I hope you found this article helpful.</p>



<p class="wp-block-paragraph">You may also like:</p>



<ul class="wp-block-list">
<li><a href="https://powerplatformfaqs.com/power-apps-concatenate-strings/">Power Apps Concatenate Strings</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Add Hover Effects to Power Apps Gallery (4 Ways)</title>
		<link>https://powerplatformfaqs.com/power-apps-gallery-hover-effects/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Tue, 07 Jul 2026 18:43:52 +0000</pubDate>
				<category><![CDATA[Power Apps]]></category>
		<category><![CDATA[Add Hover Effects to Power Apps Gallery]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=739</guid>

					<description><![CDATA[Ever built a gallery in Power Apps and noticed it feels flat? Users click around, but nothing tells them an item is clickable until they actually tap it. That lack of feedback makes your app feel unfinished, even if the data behind it works perfectly. A hover effect is a small visual change — such ... <a title="How to Add Hover Effects to Power Apps Gallery (4 Ways)" class="read-more" href="https://powerplatformfaqs.com/power-apps-gallery-hover-effects/" aria-label="Read more about How to Add Hover Effects to Power Apps Gallery (4 Ways)">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ever built a gallery in Power Apps and noticed it feels flat? Users click around, but nothing tells them an item is clickable until they actually tap it. That lack of feedback makes your app feel unfinished, even if the data behind it works perfectly.</p>



<p class="wp-block-paragraph">A hover effect is a small visual change — such as a color shift, a shadow, or a slight animation — that occurs when a user hovers over a gallery item. Think of a sales team tracker where each row shows a rep&#8217;s name, region, deal amount, and status. When a manager scrolls through that list, a subtle hover highlight helps them quickly spot the row they&#8217;re about to click, making the whole app feel more polished and responsive.</p>



<p class="wp-block-paragraph">In this article, I&#8217;ll show you 4 ways to <strong>add hover effects to Power Apps gallery items</strong>.</p>



<p class="wp-block-paragraph">I&#8217;ll use one consistent example throughout: a <strong>Sales Tracker</strong> gallery built from a data source with columns <strong>SalesRep</strong>, <strong>Region</strong>, <strong>Amount</strong>, and <strong>Status</strong>.</p>



<p class="wp-block-paragraph">With the table data below, I have created the Sales Tracker list:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">SalesRep</th><th class="has-text-align-left" data-align="left">Region</th><th class="has-text-align-left" data-align="left">Amount</th><th class="has-text-align-left" data-align="left">Status</th></tr></thead><tbody><tr><td class="has-text-align-left" data-align="left">Alicia Roy</td><td class="has-text-align-left" data-align="left">North</td><td class="has-text-align-left" data-align="left">45,000</td><td class="has-text-align-left" data-align="left">Won</td></tr><tr><td class="has-text-align-left" data-align="left">Ben Carter</td><td class="has-text-align-left" data-align="left">South</td><td class="has-text-align-left" data-align="left">22,500</td><td class="has-text-align-left" data-align="left">In Progress</td></tr><tr><td class="has-text-align-left" data-align="left">Chloe Martin</td><td class="has-text-align-left" data-align="left">East</td><td class="has-text-align-left" data-align="left">60,000</td><td class="has-text-align-left" data-align="left">Won</td></tr><tr><td class="has-text-align-left" data-align="left">David Lin</td><td class="has-text-align-left" data-align="left">West</td><td class="has-text-align-left" data-align="left">15,750</td><td class="has-text-align-left" data-align="left">Overdue</td></tr><tr><td class="has-text-align-left" data-align="left">Emma Wright</td><td class="has-text-align-left" data-align="left">North</td><td class="has-text-align-left" data-align="left">38,200</td><td class="has-text-align-left" data-align="left">In Progress</td></tr><tr><td class="has-text-align-left" data-align="left">Farhan Ali</td><td class="has-text-align-left" data-align="left">South</td><td class="has-text-align-left" data-align="left">72,000</td><td class="has-text-align-left" data-align="left">Won</td></tr><tr><td class="has-text-align-left" data-align="left">Grace Kim</td><td class="has-text-align-left" data-align="left">East</td><td class="has-text-align-left" data-align="left">9,300</td><td class="has-text-align-left" data-align="left">Lost</td></tr><tr><td class="has-text-align-left" data-align="left">Henry Osei</td><td class="has-text-align-left" data-align="left">West</td><td class="has-text-align-left" data-align="left">51,400</td><td class="has-text-align-left" data-align="left">In Progress</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">In the SharePoint Online site, I have created a SharePoint list with the above data. Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="651" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Add-Hover-Effects-to-Power-Apps-Gallery-1024x651.jpg" alt="Add Hover Effects to Power Apps Gallery" class="wp-image-1270" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Add-Hover-Effects-to-Power-Apps-Gallery-1024x651.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Add-Hover-Effects-to-Power-Apps-Gallery-300x191.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Add-Hover-Effects-to-Power-Apps-Gallery-768x488.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Add-Hover-Effects-to-Power-Apps-Gallery.jpg 1140w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Before trying out any methods, I would suggest you create a responsive canvas app using Microsoft Power Apps.</p>



<p class="wp-block-paragraph">Once the app is created, add a SharePoint data source to add the Sales Tracker list into the canvas app.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="938" height="672" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-canvas-with-the-Sales-Tracker-gallery-selected.jpg" alt="Power Apps Studio canvas with the Sales Tracker gallery selected" class="wp-image-1272" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-canvas-with-the-Sales-Tracker-gallery-selected.jpg 938w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-canvas-with-the-Sales-Tracker-gallery-selected-300x215.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Studio-canvas-with-the-Sales-Tracker-gallery-selected-768x550.jpg 768w" sizes="(max-width: 938px) 100vw, 938px" /></figure>
</div>


<p class="wp-block-paragraph">Next, add a Power Apps vertical gallery control to the Body container of the canvas app, then choose the Sales Tracker data source. Here I choose the layout of the gallery as: Title, subtitle, and body. Based on this, I choose which columns to display. You can see the screenshot below:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="541" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Change-Background-Color-Power-Apps-gallery-1024x541.jpg" alt="Change Background Color Power Apps gallery" class="wp-image-1273" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Change-Background-Color-Power-Apps-gallery-1024x541.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Change-Background-Color-Power-Apps-gallery-300x159.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Change-Background-Color-Power-Apps-gallery-768x406.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Change-Background-Color-Power-Apps-gallery.jpg 1533w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">Method 1 – Use the Gallery&#8217;s Transition Property</h2>



<p class="wp-block-paragraph">This is the fastest built-in option, and it works well when you just want a simple &#8220;pop&#8221; or &#8220;push&#8221; motion without touching a single formula.</p>



<p class="wp-block-paragraph"><strong>Step 1: Select your gallery control</strong></p>



<p class="wp-block-paragraph">In <strong>Power Apps Studio</strong>, click on the <strong>Sales Tracker gallery</strong> in the <strong>Tree view</strong> on the left, or click directly on the gallery in the canvas.</p>



<p class="wp-block-paragraph"><strong>Step 2: Open the Transition property</strong></p>



<p class="wp-block-paragraph">Go to the <strong>Properties panel</strong> on the right side of the screen. Look for the <strong>Transition</strong> dropdown — it&#8217;s set to <strong>None</strong> by default.</p>



<pre class="wp-block-preformatted">Transition = Transition.Pop</pre>



<p class="wp-block-paragraph">You can see the properties I set for the gallery control in the screenshot below:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="691" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Properties-panel-showing-Transition-property-with-Pop-and-Push-options-1024x691.jpg" alt="Properties panel showing Transition property with Pop and Push options" class="wp-image-1274" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Properties-panel-showing-Transition-property-with-Pop-and-Push-options-1024x691.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Properties-panel-showing-Transition-property-with-Pop-and-Push-options-300x202.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Properties-panel-showing-Transition-property-with-Pop-and-Push-options-768x518.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Properties-panel-showing-Transition-property-with-Pop-and-Push-options.jpg 1089w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br>This isn&#8217;t really a formula — it&#8217;s a property setting. <strong>Pop</strong> makes the item lift outward when the mouse hovers over it, while <strong>Push</strong> makes the item press inward slightly. Power Apps applies this animation automatically to every row in the gallery, so you don&#8217;t need to configure each item individually.</p>



<p class="wp-block-paragraph"><strong>Step 3: Test the effect</strong></p>



<p class="wp-block-paragraph">Click <strong>Preview (F5)</strong> or press <strong>Alt</strong> and hover your mouse over different rows in the <strong>Sales Tracker gallery</strong> to see the pop or push motion in action.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> The Transition property only affects motion, not color. If you want a color change alongside the animation, combine this method with Method 2 below.</p>
</blockquote>



<h2 class="wp-block-heading">Method 2 – Change Background Color with HoverFill on a Button</h2>



<p class="wp-block-paragraph">This method works best when you want a solid color highlight behind each row, similar to how table rows highlight in Excel. It&#8217;s the most requested hover effect in the Power Apps community.</p>



<p class="wp-block-paragraph"><strong>Step 1: Add a transparent button as the top layer</strong></p>



<p class="wp-block-paragraph">Inside the gallery template, go to <strong>Insert → Button</strong>. Resize it to cover the entire row and move it to the top layer using <strong>Reorder → Bring to Front</strong>. Right-click the control to see the output. Ensure you add a classic button control.</p>



<p class="wp-block-paragraph"><strong>Step 2: Set the button&#8217;s size to match the template</strong></p>



<pre class="wp-block-preformatted">Height = Parent.TemplateHeight<br>Width = Parent.TemplateWidth</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>Parent</strong> refers to the gallery template that holds this button. <strong>TemplateHeight</strong> and <strong>TemplateWidth</strong> are built-in properties that return the exact size of one gallery row. Setting the button to match ensures the hover effect covers the whole row, not just part of it.</p>



<p class="wp-block-paragraph"><strong>Step 3: Make the button transparent and set HoverFill</strong></p>



<pre class="wp-block-preformatted">Fill = RGBA(0, 0, 0, 0)<br>HoverFill = RGBA(0, 120, 212, 0.15)<br>BorderThickness = 0</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>RGBA</strong> sets a color using Red, Green, Blue, and Alpha (transparency) values. Setting <strong>Fill</strong> to fully transparent (<strong>Alpha = 0</strong>) means the button is invisible until the mouse hovers over it. <strong>HoverFill</strong> only activates during a mouse hover and shows a soft blue tint at 15% opacity, so the rows behind it — like <strong>SalesRep</strong> and <strong>Amount</strong> — remain fully visible.</p>



<p class="wp-block-paragraph"><strong>Step 4: Route clicks through the button</strong></p>



<pre class="wp-block-preformatted">OnSelect = Select(Parent)</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br>Since the button now sits on top of every control in the row, it intercepts all clicks. <strong>Select(Parent)</strong> tells Power Apps to trigger the gallery&#8217;s own <strong>OnSelect</strong> logic when the button is clicked, so you don&#8217;t lose your existing click behavior.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Hover effects only apply to the item currently under the mouse cursor — Power Apps does not let you trigger hover states on other rows at the same time.</p>
</blockquote>



<p class="wp-block-paragraph">Now, when I preview the app and hover the Power Apps gallery item, you can see how the hover color is appearing like in the screenshot below:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="653" height="596" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Gallery-Hover-Effect.jpg" alt="Power Apps Gallery Hover Effect" class="wp-image-1275" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Gallery-Hover-Effect.jpg 653w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/Power-Apps-Gallery-Hover-Effect-300x274.jpg 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>
</div>


<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/set-control-value-in-button-click-on-power-apps/">How to Set Control Value in Button Click on Power Apps?</a></p>



<h2 class="wp-block-heading">Method 3 – Highlight Selected and Hovered Items with Conditional Formatting</h2>



<p class="wp-block-paragraph">This method is suitable for scenarios where you need to show both a hover state and a permanently selected state, such as allowing a manager to click a sales rep&#8217;s row and keep it highlighted.</p>



<p class="wp-block-paragraph"><strong>Step 1: Add a background rectangle inside the template</strong></p>



<p class="wp-block-paragraph">Go to <strong>Insert → Shapes → Rectangle</strong> inside the gallery template and place it behind the text controls.</p>



<p class="wp-block-paragraph"><strong>Step 2: Set its Fill property with an If function</strong></p>



<pre class="wp-block-preformatted">Fill = If(ThisItem.IsSelected, ColorFade(Color.RoyalBlue, 0.7), Color.White)</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br><strong>ThisItem.IsSelected</strong> checks whether the current row is the one the user selected. <strong>If</strong> returns one color when true and another when false. <strong>ColorFade</strong> lightens <strong>RoyalBlue</strong> by 70%, creating a soft highlight instead of a harsh solid color.</p>



<p class="wp-block-paragraph"><strong>Step 3: Layer a transparent button for the hover state</strong></p>



<p class="wp-block-paragraph">Repeat the button setup from Method 2, but set its <strong>HoverFill</strong> to a lighter shade than the selected color so users can visually tell hover and selected states apart.</p>



<pre class="wp-block-preformatted">HoverFill = If(ThisItem.IsSelected, ColorFade(Color.RoyalBlue, 0.7), ColorFade(Color.LightGray, 0.5))</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br>This nested <strong>If</strong> makes sure a row that&#8217;s already selected doesn&#8217;t visually &#8220;flicker&#8221; to a different color on hover — it keeps the selected look, while unselected rows show a light gray hover tint.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Avoid using bright, high-contrast HoverFill colors on Status columns with existing conditional formatting (like red for &#8220;Overdue&#8221;) — the hover tint can make status colors hard to read.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/power-apps-switch/">Power Apps Switch Function</a></p>



<h2 class="wp-block-heading">Method 4 – Apply Hover Effects to Icons and Labels Individually</h2>



<p class="wp-block-paragraph">Use this method when you want only specific elements — like a <strong>Status</strong> icon or <strong>Amount</strong> label — to react on hover, rather than the entire row.</p>



<p class="wp-block-paragraph"><strong>Step 1: Select the individual control</strong></p>



<p class="wp-block-paragraph">Click on the specific label or icon inside the gallery template, such as the <strong>Amount</strong> label.</p>



<p class="wp-block-paragraph"><strong>Step 2: Set its HoverColor or HoverFill property directly</strong></p>



<pre class="wp-block-preformatted">HoverColor = Color.DarkBlue<br>HoverFill = RGBA(255, 255, 255, 0.1)</pre>



<p class="wp-block-paragraph"><strong>How does this formula work?</strong><br>Most <strong>modern controls</strong> in Power Apps, including labels, icons, and buttons, expose <strong>HoverColor</strong> (text color on hover) and <strong>HoverFill</strong> (background color on hover) as native properties. You don&#8217;t need a button overlay here because the control itself supports hover states directly.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Plain <strong>Text Label</strong> controls without a Fill property (transparent background labels) won&#8217;t show HoverFill visibly — pair them with a shape or button behind them if you need a visible hover background.</p>
</blockquote>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/power-apps-concatenate-strings/">Power Apps Concatenate Strings (With Real Examples)</a></p>



<h2 class="wp-block-heading">Things to Keep in Mind</h2>



<ul class="wp-block-list">
<li><strong>Gallery templates don&#8217;t support hover natively:</strong> The gallery container itself has no HoverFill property — you must use buttons, shapes, or individual controls inside the template.</li>



<li><strong>Layer order matters:</strong> If your transparent button isn&#8217;t the top layer, other controls will block the hover effect from being seen.</li>



<li><strong>Watch performance on large data sources:</strong> Adding complex If or ColorFade formulas to every row&#8217;s Fill or HoverFill can slow down rendering on large SharePoint lists or Dataverse tables with hundreds of rows.</li>



<li><strong>Delegation isn&#8217;t affected by hover formulas:</strong> Since HoverFill and Transition are visual-only properties, they don&#8217;t get delegated to the data source, but heavy nested logic still adds client-side rendering overhead.</li>



<li><strong>Test on touchscreens:</strong> Hover effects rely on mouse movement, so tablet and phone users won&#8217;t see them — always add a tap-based visual cue like IsSelected as a backup.</li>



<li><strong>Use named formulas for shared hover colors:</strong> If multiple screens use the same hover color scheme, define it once as a named formula instead of repeating RGBA values across every gallery.</li>
</ul>



<p class="wp-block-paragraph">Power Apps gives you four solid ways to add hover effects: the built-in Transition property for quick animations, layered buttons for full-row color highlights, conditional formatting for combined selected-and-hover states, and individual control properties for targeted effects.</p>



<p class="wp-block-paragraph">For most beginners building something like a Sales Tracker gallery, start with Method 1 for a quick win, then move to Method 2 once you need real color feedback. I hope you found this article helpful.</p>



<p class="wp-block-paragraph">You may also like:</p>



<ul class="wp-block-list">
<li><a href="https://powerplatformfaqs.com/power-apps-checkbox/">Power Apps Modern Checkbox Control</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What is Microsoft Copilot Studio? (5 Key Ways to Build AI Agents)</title>
		<link>https://powerplatformfaqs.com/what-is-microsoft-copilot-studio/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Mon, 06 Jul 2026 17:24:22 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[What is Microsoft Copilot Studio]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1254</guid>

					<description><![CDATA[Your employees keep asking the same questions every day — &#8220;How do I submit a leave request?&#8221; &#8220;What&#8217;s the IT helpdesk number?&#8221; &#8220;Where do I find the expense form?&#8221; Your support team is buried. And you know there has to be a better way. Microsoft Copilot Studio is that better way. It&#8217;s a low-code, graphical ... <a title="What is Microsoft Copilot Studio? (5 Key Ways to Build AI Agents)" class="read-more" href="https://powerplatformfaqs.com/what-is-microsoft-copilot-studio/" aria-label="Read more about What is Microsoft Copilot Studio? (5 Key Ways to Build AI Agents)">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Your employees keep asking the same questions every day — &#8220;How do I submit a leave request?&#8221; &#8220;What&#8217;s the IT helpdesk number?&#8221; &#8220;Where do I find the expense form?&#8221; Your support team is buried. And you know there has to be a better way.</p>



<p class="wp-block-paragraph">Microsoft Copilot Studio is that better way. It&#8217;s a low-code, graphical platform from Microsoft that lets you <a href="https://powerplatformfaqs.com/create-ai-agent-microsoft-copilot-studio/" target="_blank" rel="noreferrer noopener">build AI-powered agents</a> (also called chatbots or copilots) without writing a single line of code. Think of it as a visual drag-and-drop tool where you define what your bot knows, what it says, and what actions it can take — all from a browser.</p>



<p class="wp-block-paragraph">For example, an HR team at a 300-person company can build an internal helpdesk agent in Teams that answers leave balance queries, routes IT tickets, and escalates complex issues to a live agent — all in one afternoon.</p>



<p class="wp-block-paragraph">In this article, I&#8217;ll show you 5 ways to use Microsoft Copilot Studio to build and deploy AI agents for your business.</p>



<h2 class="wp-block-heading">What Is Microsoft Copilot Studio?</h2>



<p class="wp-block-paragraph">Microsoft Copilot Studio (previously known as <strong>Power Virtual Agents</strong>) is a tool in the Microsoft Power Platform family. You access it at <strong>copilotstudio.microsoft.com</strong>. It lets you create <strong>agents</strong> — intelligent assistants that can hold conversations, answer questions, trigger workflows, and even act autonomously on your behalf.</p>



<p class="wp-block-paragraph">An agent in Copilot Studio is made up of:</p>



<ul class="wp-block-list">
<li><strong>Topics</strong> — individual conversation blocks that define what the agent says and does when a user asks something</li>



<li><strong>Nodes</strong> — building blocks inside each topic (like Message nodes, Question nodes, and Condition nodes) that control the conversation flow</li>



<li><strong>Knowledge sources</strong> — documents, SharePoint sites, or websites the agent can search to generate answers</li>



<li><strong>Tools</strong> — Power Automate flows, connectors, or HTTP requests that let the agent take real-world actions</li>
</ul>



<p class="wp-block-paragraph">Agents can be deployed to <strong>Microsoft Teams</strong>, websites, mobile apps, Facebook, and any channel supported by the <strong>Azure Bot Service</strong>.</p>



<h2 class="wp-block-heading">Two Orchestration Modes to Know</h2>



<p class="wp-block-paragraph">Before you start building, you need to understand the two orchestration modes in Copilot Studio. This is the single most important concept for beginners.</p>



<ul class="wp-block-list">
<li><strong>Classic orchestration</strong>: The agent uses <strong>trigger phrases</strong> — specific keywords or sentences you define — to match user input to the right topic. Think of it as a keyword-matching system with NLU (Natural Language Understanding) on top. Best for structured, predictable conversations.</li>



<li><strong>Generative AI orchestration</strong>: The agent uses a large language model (LLM) to dynamically decide which topic, tool, or knowledge source to use. It reads the <em>description</em> of each topic to understand intent. Best for open-ended, free-form conversations.</li>
</ul>



<p class="wp-block-paragraph">You can mix both modes in one agent. Now let&#8217;s build one.</p>



<p class="wp-block-paragraph"><strong>Scenario used throughout this guide:</strong> You&#8217;re building an <strong>HR Helpdesk Copilot</strong> for Contoso Ltd, a company of 300 employees. The agent will live in Microsoft Teams and answer common HR questions — leave balances, payroll dates, and expense policy — while also logging support tickets in SharePoint.</p>



<h2 class="wp-block-heading">Method 1 – Build a Manually Authored Topic (Classic Orchestration)</h2>



<p class="wp-block-paragraph">Use this method when you need the agent to follow a very specific, controlled conversation flow — like collecting employee details before showing leave balance information. This is the best starting point for any beginner.</p>



<p class="wp-block-paragraph"><strong>Step 1: Open Copilot Studio</strong><br>Go to <strong>copilotstudio.microsoft.com</strong> and sign in with your Microsoft 365 account. Select your <strong>environment</strong> from the top-right dropdown. Always use your organization&#8217;s environment, not the default one, to keep agents organized.</p>



<p class="wp-block-paragraph"><strong>Step 2: Create a New Agent</strong><br>Select <strong>Create</strong> from the left nav, then choose <strong>New agent</strong>. Give it a name — for example, <strong>Contoso HR Helpdesk</strong>. Add a short description like &#8220;Helps employees with leave, payroll, and expense queries.&#8221; Select <strong>Create</strong>.</p>



<p class="wp-block-paragraph"><strong>Step 3: Add a New Topic</strong><br>Navigate to <strong>Topics</strong> in the left menu. Select <strong>Add a topic</strong> → <strong>From blank</strong>. A blank <strong>authoring canvas</strong> opens with a <strong>Trigger node</strong> at the top.</p>



<p class="wp-block-paragraph"><strong>Step 4: Set Trigger Phrases</strong><br>Select the three dots (<strong>…</strong>) on the <strong>Trigger node</strong> → <strong>Properties</strong>. In the <strong>Phrases</strong> panel, add 5–8 trigger phrases such as:</p>



<pre class="wp-block-preformatted">How many leave days do I have?<br>Check my leave balance<br>Annual leave remaining<br>How much leave is left?<br>Leave balance query</pre>



<p class="wp-block-paragraph">These phrases train the NLU model to recognize when an employee is asking about leave.</p>



<p class="wp-block-paragraph"><strong>Step 5: Add a Question Node</strong><br>Select the <strong>+</strong> icon under the Trigger node → <strong>Ask a question</strong>. A <strong>Question node</strong> appears. Type: <em>&#8220;Sure! What is your employee ID?&#8221;</em> Under <strong>Identify</strong>, select <strong>User&#8217;s entire response</strong>. This stores the answer in a variable — name it <strong>Topic.EmployeeID</strong>.</p>



<p class="wp-block-paragraph"><strong>Step 6: Add a Message Node</strong><br>Select <strong>+</strong> → <strong>Send a message</strong>. Type: <em>&#8220;Thank you, {Topic.EmployeeID}. Your leave balance request has been logged. HR will respond within 24 hours.&#8221;</em> The curly braces reference the variable you captured earlier.</p>



<p class="wp-block-paragraph"><strong>Step 7: End the Conversation</strong><br>Select <strong>+</strong> → <strong>Topic management</strong> → <strong>End conversation</strong>. Optionally select <strong>End with survey</strong> to collect satisfaction data.</p>



<p class="wp-block-paragraph"><strong>Step 8: Save and Test</strong><br>Select <strong>Save</strong> in the top bar. Open the <strong>Test your agent</strong> panel on the right. Type one of your trigger phrases and walk through the conversation.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Use 5–10 varied trigger phrases per topic. If two topics have overlapping phrases (e.g., &#8220;leave&#8221; appearing in both a Leave Balance topic and a Leave Request topic), the agent will misfire. Keep trigger phrases unique and specific to avoid topic conflicts.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/copilot-studio-environment-strategy/">Environment Strategy for Copilot Studio: Dev, Test, Prod Best Practices</a></p>



<h2 class="wp-block-heading">Method 2 – Use Generative AI to Answer Questions from a Knowledge Source</h2>



<p class="wp-block-paragraph">Use this method when you want the agent to answer questions it wasn&#8217;t explicitly programmed for — by reading documents, SharePoint pages, or websites. This is the fastest way to build a broad FAQ-style agent.</p>



<p class="wp-block-paragraph"><strong>Step 1: Go to Knowledge</strong><br>In your <strong>Contoso HR Helpdesk</strong> agent, select <strong>Knowledge</strong> from the left navigation menu.</p>



<p class="wp-block-paragraph"><strong>Step 2: Add a Knowledge Source</strong><br>Select <strong>Add knowledge</strong> → choose from the options:</p>



<ul class="wp-block-list">
<li><strong>Files</strong> (upload PDFs or Word docs — e.g., the HR Policy handbook)</li>



<li><strong>SharePoint</strong> (point to an HR SharePoint site)</li>



<li><strong>Public website</strong> (e.g., your company&#8217;s benefits page)</li>
</ul>



<p class="wp-block-paragraph">Select <strong>SharePoint</strong>, paste the URL of your HR SharePoint site, then select <strong>Add</strong>.</p>



<p class="wp-block-paragraph">You can see in the screenshot below that I have uploaded a PDF.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="334" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Microsoft-Copilot-Studio-1024x334.jpg" alt="What is Microsoft Copilot Studio" class="wp-image-1265" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Microsoft-Copilot-Studio-1024x334.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Microsoft-Copilot-Studio-300x98.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Microsoft-Copilot-Studio-768x250.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Microsoft-Copilot-Studio.jpg 1049w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Step 3: Enable Generative Answers</strong><br>Go to <strong>Settings</strong> → <strong>Generative AI</strong>. Make sure the <strong>Allow the agent to use its own general knowledge</strong> toggle is configured to your preference. You can also control whether the agent uses only your uploaded sources or the broader web.</p>



<p class="wp-block-paragraph"><strong>Step 4: Set Orchestration Mode to Generative</strong><br>In <strong>Settings</strong> → <strong>Generative AI</strong> → <strong>How should your agent decide how to respond?</strong>, select <strong>Generative (Preview)</strong>. This switches the agent from trigger-phrase matching to AI-driven intent detection.</p>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="260" src="https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Copilot-Studio-1024x260.jpg" alt="What is Copilot Studio" class="wp-image-1266" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Copilot-Studio-1024x260.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Copilot-Studio-300x76.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Copilot-Studio-768x195.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/07/What-is-Copilot-Studio.jpg 1380w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Step 5: Test a Question Not in Any Topic</strong><br>Open the <strong>Test panel</strong> and type: <em>&#8220;What is the company&#8217;s maternity leave policy?&#8221;</em> The agent will search your SharePoint knowledge source and generate a plain-language answer — without you writing a single topic node.</p>



<p class="wp-block-paragraph"><strong>How does this work?</strong><br>The agent sends the user&#8217;s question to the Azure OpenAI GPT model along with content retrieved from your knowledge source. It generates a grounded, conversational answer in real time. It cites the source document so employees can verify.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Generative AI answers are only available with a <strong>standalone Copilot Studio subscription</strong> — not the Teams-only plan. If your agent is purely Teams-based on a Microsoft 365 license, you must use classic orchestration with manually authored topics.</p>
</blockquote>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/how-generative-ai-works-inside-copilot-studio/">How Generative AI Works Inside Copilot Studio</a></p>



<h2 class="wp-block-heading">Method 3 – Trigger a Power Automate Flow from a Topic</h2>



<p class="wp-block-paragraph">Use this method when the agent needs to <em>do</em> something — not just <em>say</em> something. For example: log a support ticket in SharePoint, send an email notification, or look up data from an API. This is where Copilot Studio becomes a true automation hub.</p>



<p class="wp-block-paragraph"><strong>Step 1: Design the Scenario</strong><br>In the HR Helpdesk copilot, you want employees to raise an IT support ticket directly from the chat. The agent collects the issue description and severity, then logs it as a SharePoint list item.</p>



<p class="wp-block-paragraph"><strong>Step 2: Create a Power Automate Flow</strong><br>In Copilot Studio, go to <strong>Topics</strong> → open or create your <strong>Log IT Ticket</strong> topic. Select <strong>+</strong> → <strong>Call a tool</strong> → <strong>Create a new flow</strong>. This opens <strong>Power Automate</strong> in a new tab.</p>



<p class="wp-block-paragraph">The flow template pre-built for Copilot Studio has:</p>



<ul class="wp-block-list">
<li>A <strong>Run a flow from Copilot</strong> trigger — this receives inputs from the agent</li>



<li>An action block where you build your logic</li>
</ul>



<p class="wp-block-paragraph"><strong>Step 3: Configure Flow Inputs</strong><br>In Power Automate, select the <strong>Run a flow from Copilot</strong> trigger. Add two inputs:</p>



<ul class="wp-block-list">
<li><strong>IssueDescription</strong> (Text)</li>



<li><strong>Severity</strong> (Text)</li>
</ul>



<p class="wp-block-paragraph">Then add a <strong>Create item</strong> action from <strong>SharePoint</strong>. Map the fields:</p>



<pre class="wp-block-preformatted">Site Address: https://contoso.sharepoint.com/sites/IT<br>List Name: IT Support Tickets<br>Title: [IssueDescription]<br>Severity: [Severity]<br>Status: New</pre>



<p class="wp-block-paragraph">Add a <strong>Respond to Copilot</strong> action at the end. Add an output variable: <strong>TicketID</strong> (Text). Set its value to the ID of the new SharePoint item.</p>



<p class="wp-block-paragraph"><strong>Step 4: Save and Return to Copilot Studio</strong><br>Save the flow. Return to Copilot Studio. Your new flow now appears as an available <strong>tool</strong> in the topic canvas.</p>



<p class="wp-block-paragraph"><strong>Step 5: Wire the Flow into the Topic</strong><br>Before the <strong>Call a tool</strong> node, add two <strong>Question nodes</strong> to collect:</p>



<ol class="wp-block-list">
<li><em>&#8220;Please describe your issue.&#8221;</em> → store in <strong>Topic.IssueDescription</strong></li>



<li><em>&#8220;How severe is this issue? (Low / Medium / High)&#8221;</em> → store in <strong>Topic.Severity</strong></li>
</ol>



<p class="wp-block-paragraph">Then in the <strong>Call a tool</strong> node, select your Power Automate flow. Map:</p>



<ul class="wp-block-list">
<li><strong>IssueDescription</strong> → <code>Topic.IssueDescription</code></li>



<li><strong>Severity</strong> → <code>Topic.Severity</code></li>
</ul>



<p class="wp-block-paragraph">Capture the output <strong>TicketID</strong> → store in <strong>Topic.TicketID</strong>.</p>



<p class="wp-block-paragraph"><strong>Step 6: Confirm to the Employee</strong><br>Add a <strong>Message node</strong> after the flow call: <em>&#8220;Your ticket has been logged. Your ticket ID is {Topic.TicketID}. IT will contact you within 4 hours.&#8221;</em></p>



<p class="wp-block-paragraph"><strong>How does this work?</strong><br>When the agent reaches the <strong>Call a tool</strong> node, it passes the captured variables to the Power Automate flow as input parameters. The flow runs, creates the SharePoint item, and returns the ticket ID to the agent — all within the live conversation.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Power Automate flows connected to Copilot Studio run under the <strong>connection credentials of the flow author</strong>, not the end user. Make sure the person who builds the flow has the correct permissions on SharePoint. If you need user-specific access, use the <strong>authentication node</strong> with <strong>Azure AD</strong> sign-in before calling the flow.</p>
</blockquote>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/ai-model-copilot-studio/">How to Choose an AI Model in Copilot Studio: GPT-5, Claude, and More</a></p>



<h2 class="wp-block-heading">Method 4 – Use Adaptive Cards for Rich Interactive Responses</h2>



<p class="wp-block-paragraph">Use this method when a plain text reply isn&#8217;t enough — you need to show a formatted card with buttons, images, drop-downs, or input fields. For example, displaying an employee&#8217;s leave summary with action buttons (&#8220;Apply Leave&#8221; / &#8220;View History&#8221;) directly inside Teams.</p>



<p class="wp-block-paragraph"><strong>Step 1: Open the Adaptive Card Node</strong><br>In your <strong>Leave Balance</strong> topic, after collecting the employee ID, select <strong>+</strong> → <strong>Adaptive Card</strong>. This node renders a structured visual card in the chat interface.</p>



<p class="wp-block-paragraph"><strong>Step 2: Build the Card in the Designer</strong><br>Copilot Studio has a built-in <strong>Adaptive Card designer</strong>. Select <strong>Edit JSON</strong> and paste this example card:</p>



<pre class="wp-block-preformatted">{<br>  "type": "AdaptiveCard",<br>  "version": "1.5",<br>  "body": [<br>    {<br>      "type": "TextBlock",<br>      "text": "Leave Balance Summary",<br>      "weight": "Bolder",<br>      "size": "Medium"<br>    },<br>    {<br>      "type": "FactSet",<br>      "facts": [<br>        { "title": "Annual Leave", "value": "12 days remaining" },<br>        { "title": "Sick Leave", "value": "5 days remaining" },<br>        { "title": "Employee ID", "value": "${EmployeeID}" }<br>      ]<br>    }<br>  ],<br>  "actions": [<br>    {<br>      "type": "Action.Submit",<br>      "title": "Apply for Leave",<br>      "data": { "action": "applyLeave" }<br>    },<br>    {<br>      "type": "Action.Submit",<br>      "title": "View Leave History",<br>      "data": { "action": "viewHistory" }<br>    }<br>  ]<br>}</pre>



<p class="wp-block-paragraph">Replace <code>${EmployeeID}</code> with your variable reference using Copilot Studio&#8217;s <strong>Power Fx</strong> expression: <code>=Topic.EmployeeID</code>.</p>



<p class="wp-block-paragraph"><strong>Step 3: Handle Card Responses</strong><br>After the <strong>Adaptive Card node</strong>, add a <strong>Condition node</strong>. Check the value of the card&#8217;s output variable (automatically captured when a user clicks a button). Branch the conversation:</p>



<ul class="wp-block-list">
<li>If <code>action = applyLeave</code> → redirect to your <strong>Apply Leave</strong> topic</li>



<li>If <code>action = viewHistory</code> → show a message with a SharePoint link</li>
</ul>



<p class="wp-block-paragraph"><strong>How does this work?</strong><br>Adaptive Cards are JSON-defined visual templates rendered natively by the Teams or web client. The user&#8217;s button click returns a data payload back to the agent, which the <strong>Condition node</strong> reads to route the conversation.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Adaptive Cards render beautifully in <strong>Microsoft Teams</strong> but may appear differently (or not at all) in simpler channels like direct-line web chat. Always test your agent in the actual channel you plan to deploy it to. Check the <strong>Channels</strong> page in Copilot Studio for channel-specific preview tools.</p>
</blockquote>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/copilot-studio-token-usage/">How to Monitor Token Usage by AI Model in Copilot Studio</a></p>



<h2 class="wp-block-heading">Method 5 – Extend the Agent with a Custom Connector</h2>



<p class="wp-block-paragraph">Use this method when you need the agent to call an <strong>external system</strong> that doesn&#8217;t have a built-in Power Automate connector — for example, a third-party HRMS system, a payroll API, or a custom internal API. This is the most advanced method but still achievable without deep coding.</p>



<p class="wp-block-paragraph"><strong>Step 1: Create a Custom Connector in Power Automate</strong><br>Go to <strong>make.powerautomate.com</strong> → <strong>Custom connectors</strong> → <strong>New custom connector</strong> → <strong>Create from blank</strong>. Name it <strong>Contoso HRMS Connector</strong>.</p>



<p class="wp-block-paragraph">Under <strong>General</strong>, enter the base URL of your HRMS API, e.g., <code>https://api.contoso-hrms.com/v1</code>.</p>



<p class="wp-block-paragraph">Under <strong>Security</strong>, configure authentication — most APIs use either <strong>API key</strong> or <strong>OAuth 2.0</strong>. For this example, use <strong>API key</strong>. Set the parameter name to <code>x-api-key</code> and location to <strong>Header</strong>.</p>



<p class="wp-block-paragraph">Under <strong>Definition</strong>, add an action called <strong>GetLeaveBalance</strong>:</p>



<ul class="wp-block-list">
<li>HTTP verb: <strong>GET</strong></li>



<li>Path: <code>/employees/{employeeId}/leave-balance</code></li>



<li>Response schema (paste your API&#8217;s JSON schema):</li>
</ul>



<pre class="wp-block-preformatted">{<br>  "type": "object",<br>  "properties": {<br>    "annualLeave": { "type": "integer" },<br>    "sickLeave": { "type": "integer" },<br>    "employeeId": { "type": "string" }<br>  }<br>}</pre>



<p class="wp-block-paragraph">Select <strong>Create connector</strong>.</p>



<p class="wp-block-paragraph"><strong>Step 2: Use the Custom Connector in a Power Automate Flow</strong><br>Create a new flow with a <strong>Run a flow from Copilot</strong> trigger. Add an input: <strong>EmployeeID</strong> (Text). Add the <strong>GetLeaveBalance</strong> action from your custom connector. Pass <code>EmployeeID</code> as the <code>employeeId</code> parameter. Return <code>annualLeave</code> and <code>sickLeave</code> as output variables via the <strong>Respond to Copilot</strong> action.</p>



<p class="wp-block-paragraph"><strong>Step 3: Call the Flow from a Copilot Studio Topic</strong><br>Back in your <strong>Leave Balance</strong> topic in Copilot Studio, after the employee ID question, add a <strong>Call a tool</strong> node → select the flow you just built. Map <strong>EmployeeID</strong> → <code>Topic.EmployeeID</code>. Store outputs in <code>Topic.AnnualLeave</code> and <code>Topic.SickLeave</code>.</p>



<p class="wp-block-paragraph"><strong>Step 4: Display the Live Data</strong><br>Add a <strong>Message node</strong>: <em>&#8220;Hi! You have {Topic.AnnualLeave} annual leave days and {Topic.SickLeave} sick leave days remaining.&#8221;</em></p>



<p class="wp-block-paragraph"><strong>How does this work?</strong><br>The custom connector acts as an authenticated bridge between your Power Automate flow and your external HRMS API. The agent calls the flow mid-conversation, the flow hits the API, and the live data comes back into the chat in real time — all transparent to the employee.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Pro Tip:</strong> Custom connectors require a <strong>premium Power Automate license</strong> (Power Automate Premium or a per-flow plan). If your organization only has standard Microsoft 365 licenses, you won&#8217;t have access to custom connectors. Check with your admin before designing a solution that relies on this method.</p>
</blockquote>



<h2 class="wp-block-heading">Things to Keep in Mind</h2>



<ul class="wp-block-list">
<li><strong>Licensing has two layers</strong>: To build agents, you need both a <strong>Copilot Studio tenant license</strong> and a <strong>Copilot Studio User License</strong> assigned to each maker. End users who chat with your agent do NOT need a special license.</li>



<li><strong>Teams-only plan has serious limitations</strong>: The Teams plan (available in select Microsoft 365 subscriptions) only supports <strong>classic orchestration</strong> and can only publish agents to Teams. You cannot use generative AI features or deploy to other channels without upgrading to the standalone plan.</li>



<li><strong>Trigger phrase conflicts break conversations</strong>: In classic mode, if two topics share very similar trigger phrases (e.g., &#8220;leave request&#8221; and &#8220;leave balance&#8221;), the agent may consistently pick the wrong topic. Keep trigger phrases distinct and test with varied phrasings before publishing.</li>



<li><strong>Power Automate connections authenticate as the flow author</strong>: Flows called from Copilot Studio run under the credentials of whoever built the flow — not the logged-in user. If your flow accesses sensitive SharePoint data, ensure the author account has the right permissions and is a service account, not a personal account.</li>



<li><strong>Environment selection matters</strong>: Always build and publish in the correct <strong>Power Platform environment</strong>. Agents built in the <strong>default environment</strong> are visible to everyone in your tenant. Use a dedicated environment for production agents to control access and governance.</li>



<li><strong>Session timeouts are short</strong>: By default, a Copilot Studio conversation session times out after <strong>30 minutes of inactivity</strong>. Variables are cleared on timeout. If your agent workflow takes a long time (e.g., waiting for an approval), design the flow so it doesn&#8217;t depend on the same session to continue.</li>
</ul>



<p class="wp-block-paragraph">You now have a complete picture of what Microsoft Copilot Studio is and five practical ways to use it — from manually authored topics and generative AI knowledge responses, to Power Automate integrations, Adaptive Cards, and custom API connectors.</p>



<p class="wp-block-paragraph">Start with Method 1 or Method 2 if you&#8217;re new to the platform; move to Methods 3–5 as your agent grows in complexity, and your use cases demand real-time data and richer interactions. I hope you found this article helpful.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Format Dates with Ordinal Suffixes (st, nd, rd, th) in Power Automate</title>
		<link>https://powerplatformfaqs.com/power-automate-format-dates-ordinal-suffixes/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Fri, 26 Jun 2026 20:31:00 +0000</pubDate>
				<category><![CDATA[Power Automate]]></category>
		<category><![CDATA[Format Dates with Ordinal Suffixes in Power Automate]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1252</guid>

					<description><![CDATA[You send out a daily sales summary email from Power Automate. The numbers look good. But the date line says &#8220;2026-06-24T14:32:10Z&#8221; instead of a nice, human format like &#8220;24th Jun 2026, 02:32 PM&#8221;. Your manager skims the email, gets confused, and writes back: &#8220;What time zone is this? And why does it look so technical?&#8221; ... <a title="How to Format Dates with Ordinal Suffixes (st, nd, rd, th) in Power Automate" class="read-more" href="https://powerplatformfaqs.com/power-automate-format-dates-ordinal-suffixes/" aria-label="Read more about How to Format Dates with Ordinal Suffixes (st, nd, rd, th) in Power Automate">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">You send out a daily sales summary email from <a href="https://powerplatformfaqs.com/power-automate-tutorials/" target="_blank" rel="noreferrer noopener">Power Automate</a>.</p>



<p class="wp-block-paragraph">The numbers look good. But the date line says <strong>&#8220;2026-06-24T14:32:10Z&#8221;</strong> instead of a nice, human format like <strong>&#8220;24th Jun 2026, 02:32 PM&#8221;</strong>. Your manager skims the email, gets confused, and writes back: <em>&#8220;What time zone is this? And why does it look so technical?&#8221;</em></p>



<p class="wp-block-paragraph">If this sounds familiar, you&#8217;re not alone. Flows love technical date formats. People don&#8217;t. You need a clean, readable date with the correct <strong>st / nd / rd / th</strong> suffix like <strong>1st</strong>, <strong>2nd</strong>, <strong>3rd</strong>, <strong>4th</strong> in your Power Automate emails, Teams messages, and approvals.</p>



<p class="wp-block-paragraph">In this tutorial, I&#8217;ll show you <strong>2 ways</strong> to format dates with <strong>st / nd / rd / th</strong> in Power Automate: using a single expression inside your action, and using a Compose-first approach to keep things clean.</p>



<h2 class="wp-block-heading">Format Dates with Ordinal Suffixes (st, nd, rd, th) in Power Automate</h2>



<p class="wp-block-paragraph">Let&#8217;s pick a simple, relatable example: daily sales report emails.</p>



<p class="wp-block-paragraph">You want the email subject line to look like this:</p>



<pre class="wp-block-code"><code>Daily Sales Report – 24th Jun 2026, 02:32 PM</code></pre>



<p class="wp-block-paragraph">Behind the scenes, your flow has the raw UTC date-time from <code>utcNow()</code>:</p>



<pre class="wp-block-code"><code>2026-06-24T14:32:10Z</code></pre>



<p class="wp-block-paragraph">Your goal is to turn that raw value into a friendly string with:</p>



<ul class="wp-block-list">
<li>The day: <strong>24</strong></li>



<li>The suffix: <strong>th</strong></li>



<li>A space</li>



<li>The month and year: <strong>Jun 2026</strong></li>



<li>A comma and the time: <strong>02:32 PM</strong></li>
</ul>



<p class="wp-block-paragraph">All of this is done with one Power Automate expression using functions like <code>concat()</code>, <code>formatDateTime()</code>, <code>int()</code>, <code>mod()</code>, <code>greaterOrEquals()</code>, and <code>lessOrEquals()</code>.</p>



<p class="wp-block-paragraph">The final expression does exactly that:</p>



<pre class="wp-block-code"><code>concat(<br>    formatDateTime(utcNow(), 'dd'),<br>    if(<br>        or(<br>            and(<br>                greaterOrEquals(int(formatDateTime(utcNow(), 'dd')), 11),<br>                lessOrEquals(int(formatDateTime(utcNow(), 'dd')), 13)<br>            ),<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 0)<br>        ),<br>        'th',<br>        if(<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 1),<br>            'st',<br>            if(<br>                equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 2),<br>                'nd',<br>                if(<br>                    equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 3),<br>                    'rd',<br>                    'th'<br>                )<br>            )<br>        )<br>    ),<br>    ' ',<br>    formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')<br>)</code></pre>



<p class="wp-block-paragraph">Let&#8217;s unpack this step by step in plain English.</p>



<h3 class="wp-block-heading">Step 1 – Understand the Key Date Functions</h3>



<p class="wp-block-paragraph">Before touching the big expression, you need to understand the building blocks.</p>



<p class="wp-block-paragraph">In Power Automate, two core date functions do the heavy lifting:</p>



<ul class="wp-block-list">
<li><strong>utcNow()</strong> – Returns the current date and time in UTC</li>
</ul>



<p class="wp-block-paragraph">Example output:</p>



<pre class="wp-block-code"><code>2026-06-24T14:32:10Z</code></pre>



<ul class="wp-block-list">
<li><strong>formatDateTime(timestamp, formatString)</strong> – Converts a date-time into a formatted text string</li>
</ul>



<p class="wp-block-paragraph">Example:</p>



<pre class="wp-block-code"><code>formatDateTime(utcNow(), 'dd')</code></pre>



<p class="wp-block-paragraph">Output:</p>



<pre class="wp-block-code"><code>24</code></pre>



<p class="wp-block-paragraph">Example:</p>



<pre class="wp-block-code"><code>formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')</code></pre>



<p class="wp-block-paragraph">Output:</p>



<pre class="wp-block-code"><code>Jun 2026, 02:32 PM</code></pre>



<p class="wp-block-paragraph">In your daily sales email, use <code>utcNow()</code> to get &#8220;now&#8221; and <code>formatDateTime()</code> to show it in a friendly format.</p>



<h3 class="wp-block-heading">Step 2 – Build the Base Date String</h3>



<p class="wp-block-paragraph">First, ignore the <strong>st / nd / rd / th</strong> suffix.</p>



<p class="wp-block-paragraph">Just build a simple date-time string that looks like:</p>



<pre class="wp-block-code"><code>24 Jun 2026, 02:32 PM</code></pre>



<p class="wp-block-paragraph">You can do this in any text field inside your flow (for example, <strong>Subject</strong> in <strong>Send an email (V2)</strong>):</p>



<pre class="wp-block-code"><code>formatDateTime(utcNow(), 'dd MMM yyyy, hh:mm tt')</code></pre>



<p class="wp-block-paragraph">Here&#8217;s what each part of the format string means:</p>



<ul class="wp-block-list">
<li><strong>dd</strong> – Day as two digits → 24</li>



<li><strong>MMM</strong> – Month as short text → Jun</li>



<li><strong>yyyy</strong> – Year as four digits → 2026</li>



<li><strong>hh:mm</strong> – Hour and minute in 12-hour format → 02:32</li>



<li><strong>tt</strong> – AM/PM marker → PM</li>
</ul>



<p class="wp-block-paragraph">This is the base Power Automate date format you&#8217;ll build on.</p>



<h3 class="wp-block-heading">Step 3 – Learn the Ordinal Suffix Rules</h3>



<p class="wp-block-paragraph">Now, you want to convert <strong>24</strong> to <strong>24th</strong>, <strong>21</strong> to <strong>21st</strong>, and so on.</p>



<p class="wp-block-paragraph">These are called ordinal suffixes.</p>



<p class="wp-block-paragraph">The rules are:</p>



<ul class="wp-block-list">
<li>Numbers ending in <strong>1</strong> → <strong>st</strong> (1st, 21st, 31st)</li>



<li>Numbers ending in <strong>2</strong> → <strong>nd</strong> (2nd, 22nd)</li>



<li>Numbers ending in <strong>3</strong> → <strong>rd</strong> (3rd, 23rd)</li>



<li>All other numbers → <strong>th</strong> (4th, 5th, 6th, etc.)</li>



<li><strong>Special case:</strong> 11, 12, and 13 always use <strong>th</strong></li>
</ul>



<p class="wp-block-paragraph">You&#8217;ll encode these rules in Power Automate using <code>if()</code>, <code>and()</code>, <code>or()</code>, <code>mod()</code>, and comparison functions.</p>



<h3 class="wp-block-heading">Step 4 – Extract the Day Number</h3>



<p class="wp-block-paragraph">To decide which suffix to use, first get the day of the month as a number.</p>



<p class="wp-block-paragraph">The expression does this with:</p>



<pre class="wp-block-code"><code>formatDateTime(utcNow(), 'dd')</code></pre>



<p class="wp-block-paragraph">This gives you a text value, such as <code>"24"</code>.</p>



<p class="wp-block-paragraph">To use math functions like <code>mod()</code>, convert that text to a number with <code>int()</code>:</p>



<pre class="wp-block-code"><code>int(formatDateTime(utcNow(), 'dd'))</code></pre>



<p class="wp-block-paragraph">Now you have the day as an integer, such as <strong>24</strong>.</p>



<p class="wp-block-paragraph">This is what you&#8217;ll feed into your suffix logic.</p>



<h3 class="wp-block-heading">Step 5 – Handle the Special &#8220;11–13&#8221; Case</h3>



<p class="wp-block-paragraph">Remember the rule: <strong>11, 12, and 13</strong> always get <strong>th</strong>.</p>



<p class="wp-block-paragraph">The expression checks this first:</p>



<pre class="wp-block-code"><code>and(<br>    greaterOrEquals(int(formatDateTime(utcNow(), 'dd')), 11),<br>    lessOrEquals(int(formatDateTime(utcNow(), 'dd')), 13)<br>)</code></pre>



<p class="wp-block-paragraph">Breakdown:</p>



<ul class="wp-block-list">
<li><code>greaterOrEquals(value, 11)</code> – Is the day &gt;= 11?</li>



<li><code>lessOrEquals(value, 13)</code> – Is the day &lt;= 13?</li>



<li><code>and(condition1, condition2)</code> – Are both true at the same time?</li>
</ul>



<p class="wp-block-paragraph">If both are true, the day is <strong>11</strong>, <strong>12</strong>, or <strong>13</strong>.</p>



<p class="wp-block-paragraph">So the suffix must be <strong>th</strong>.</p>



<h3 class="wp-block-heading">Step 6 – Use mod() to Get the Last Digit</h3>



<p class="wp-block-paragraph">If the day is not <strong>11</strong>, <strong>12</strong>, or <strong>13</strong>, you look at the last digit.</p>



<p class="wp-block-paragraph">The expression uses <code>mod()</code> to get that last digit:</p>



<pre class="wp-block-code"><code>mod(int(formatDateTime(utcNow(), 'dd')), 10)</code></pre>



<p class="wp-block-paragraph">The <code>mod()</code> function returns the remainder when you divide a number by another number.</p>



<p class="wp-block-paragraph">For day numbers:</p>



<pre class="wp-block-code"><code>mod(21, 10) → 1<br>mod(22, 10) → 2<br>mod(23, 10) → 3<br>mod(24, 10) → 4</code></pre>



<p class="wp-block-paragraph">That remainder is your last digit of the day.</p>



<p class="wp-block-paragraph">You can now choose <strong>st</strong>, <strong>nd</strong>, <strong>rd</strong>, or <strong>th</strong> based on this digit.</p>



<h3 class="wp-block-heading">Step 7 – Build the Suffix Selection Using if()</h3>



<p class="wp-block-paragraph">Next, you build a nested <code>if()</code> to choose the suffix.</p>



<p class="wp-block-paragraph">Here is the core logic from the expression:</p>



<pre class="wp-block-code"><code>if(<br>    or(<br>        and(<br>            greaterOrEquals(int(formatDateTime(utcNow(), 'dd')), 11),<br>            lessOrEquals(int(formatDateTime(utcNow(), 'dd')), 13)<br>        ),<br>        equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 0)<br>    ),<br>    'th',<br>    if(<br>        equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 1),<br>        'st',<br>        if(<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 2),<br>            'nd',<br>            if(<br>                equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 3),<br>                'rd',<br>                'th'<br>            )<br>        )<br>    )<br>)</code></pre>



<p class="wp-block-paragraph">Let&#8217;s rewrite this in simple rules:</p>



<ul class="wp-block-list">
<li>If the day is <strong>11–13</strong>, or the last digit is <strong>0</strong> → use <strong>th</strong></li>



<li>Else if the last digit is <strong>1</strong> → use <strong>st</strong></li>



<li>Else if the last digit is <strong>2</strong> → use <strong>nd</strong></li>



<li>Else if the last digit is <strong>3</strong> → use <strong>rd</strong></li>



<li>Otherwise → use <strong>th</strong></li>
</ul>



<p class="wp-block-paragraph">The outer <code>if()</code> handles the <strong>11–13</strong> special case and also days ending with <strong>0</strong> (10, 20, 30).</p>



<p class="wp-block-paragraph">The nested <code>if()</code> handles the last digit check for <strong>1</strong>, <strong>2</strong>, and <strong>3</strong>, and defaults to <strong>th</strong> for the rest.</p>



<h3 class="wp-block-heading">Step 8 – Concatenate Day + Suffix + Formatted Date</h3>



<p class="wp-block-paragraph">Finally, you put everything together using <code>concat()</code>.</p>



<p class="wp-block-paragraph">Here&#8217;s the full Power Automate expression again:</p>



<pre class="wp-block-code"><code>concat(<br>    formatDateTime(utcNow(), 'dd'),<br>    if(<br>        or(<br>            and(<br>                greaterOrEquals(int(formatDateTime(utcNow(), 'dd')), 11),<br>                lessOrEquals(int(formatDateTime(utcNow(), 'dd')), 13)<br>            ),<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 0)<br>        ),<br>        'th',<br>        if(<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 1),<br>            'st',<br>            if(<br>                equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 2),<br>                'nd',<br>                if(<br>                    equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 3),<br>                    'rd',<br>                    'th'<br>                )<br>            )<br>        )<br>    ),<br>    ' ',<br>    formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')<br>)</code></pre>



<p class="wp-block-paragraph">Breakdown in plain English:</p>



<ul class="wp-block-list">
<li><code>formatDateTime(utcNow(), 'dd')</code> → <code>"24"</code></li>



<li>The big <code>if()</code> → <code>"th"</code> (for day 24)</li>



<li><code>' '</code> → a space</li>



<li><code>formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')</code> → <code>"Jun 2026, 02:32 PM"</code></li>
</ul>



<p class="wp-block-paragraph"><code>concat()</code> joins all of these pieces into one final string:</p>



<pre class="wp-block-code"><code>24th Jun 2026, 02:32 PM</code></pre>



<p class="wp-block-paragraph">You can paste this expression directly into:</p>



<ul class="wp-block-list">
<li>Email subject</li>



<li>Email body</li>



<li>Teams message text</li>



<li>Approval title</li>



<li>Any other text field in your flow</li>
</ul>



<p class="wp-block-paragraph">Your daily sales report now reads:</p>



<pre class="wp-block-code"><code>Daily Sales Report – 24th Jun 2026, 02:32 PM</code></pre>



<h2 class="wp-block-heading">Method 1 – Use the Expression Directly in Your Action</h2>



<p class="wp-block-paragraph">This is the fast, direct way.</p>



<p class="wp-block-paragraph">Here, I have created an instant cloud flow in Power Automate to test this.</p>



<ol class="wp-block-list">
<li>Open your <strong>Send an email (V2)</strong> action.</li>



<li>In the <strong>Subject</strong> field, click on the formula or expression icon and then enter the code below.</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="583" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Format-Dates-with-Ordinal-Suffixes-Power-Automate-1024x583.jpg" alt="Format Dates with Ordinal Suffixes Power Automate" class="wp-image-1257" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Format-Dates-with-Ordinal-Suffixes-Power-Automate-1024x583.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Format-Dates-with-Ordinal-Suffixes-Power-Automate-300x171.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Format-Dates-with-Ordinal-Suffixes-Power-Automate-768x437.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Format-Dates-with-Ordinal-Suffixes-Power-Automate.jpg 1420w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<pre class="wp-block-code"><code>concat(<br>    'Daily Sales Report – ',<br>    formatDateTime(utcNow(), 'dd'),<br>    if(<br>        or(<br>            and(<br>                greaterOrEquals(int(formatDateTime(utcNow(), 'dd')), 11),<br>                lessOrEquals(int(formatDateTime(utcNow(), 'dd')), 13)<br>            ),<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 0)<br>        ),<br>        'th',<br>        if(<br>            equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 1),<br>            'st',<br>            if(<br>                equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 2),<br>                'nd',<br>                if(<br>                    equals(mod(int(formatDateTime(utcNow(), 'dd')), 10), 3),<br>                    'rd',<br>                    'th'<br>                )<br>            )<br>        )<br>    ),<br>    ' ',<br>    formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')<br>)</code></pre>



<ol start="3" class="wp-block-list">
<li>Save and run the flow.</li>
</ol>



<p class="wp-block-paragraph">Your subject will show a clean Power Automate date format with ordinal suffix, perfect for sales reports.</p>



<p class="wp-block-paragraph">After testing the flow, I can confirm I received the exact output in the email subject line. Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="375" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Power-Automate-Format-Dates-with-Ordinal-Suffixes-1024x375.jpg" alt="Power Automate Format Dates with Ordinal Suffixes" class="wp-image-1258" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Power-Automate-Format-Dates-with-Ordinal-Suffixes-1024x375.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Power-Automate-Format-Dates-with-Ordinal-Suffixes-300x110.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Power-Automate-Format-Dates-with-Ordinal-Suffixes-768x281.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Power-Automate-Format-Dates-with-Ordinal-Suffixes.jpg 1035w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">Method 2 – Use Compose to Simplify and Reuse</h2>



<p class="wp-block-paragraph">When you start using this date format in multiple actions, the long expression can become hard to maintain.</p>



<p class="wp-block-paragraph">A cleaner approach is to use Compose actions to break the logic into smaller parts.</p>



<p class="wp-block-paragraph">Here&#8217;s how.</p>



<h3 class="wp-block-heading">Add a Compose – DayNumber action</h3>



<p class="wp-block-paragraph">Expression:</p>



<pre class="wp-block-code"><code>int(formatDateTime(utcNow(), 'dd'))</code></pre>



<h3 class="wp-block-heading">Add a Compose – DaySuffix action</h3>



<p class="wp-block-paragraph">Expression:</p>



<pre class="wp-block-code"><code>if(<br>    or(<br>        and(<br>            greaterOrEquals(outputs('Compose_-_DayNumber'), 11),<br>            lessOrEquals(outputs('Compose_-_DayNumber'), 13)<br>        ),<br>        equals(mod(outputs('Compose_-_DayNumber'), 10), 0)<br>    ),<br>    'th',<br>    if(<br>        equals(mod(outputs('Compose_-_DayNumber'), 10), 1),<br>        'st',<br>        if(<br>            equals(mod(outputs('Compose_-_DayNumber'), 10), 2),<br>            'nd',<br>            if(<br>                equals(mod(outputs('Compose_-_DayNumber'), 10), 3),<br>                'rd',<br>                'th'<br>            )<br>        )<br>    )<br>)</code></pre>



<h3 class="wp-block-heading">Add a Compose – FormattedDateTime action</h3>



<p class="wp-block-paragraph">Expression:</p>



<pre class="wp-block-code"><code>formatDateTime(utcNow(), 'MMM yyyy, hh:mm tt')</code></pre>



<p class="wp-block-paragraph">In your email <strong>Subject</strong> field, use:</p>



<pre class="wp-block-code"><code>concat(<br>    'Daily Sales Report – ',<br>    formatDateTime(utcNow(), 'dd'),<br>    outputs('Compose_-_DaySuffix'),<br>    ' ',<br>    outputs('Compose_-_FormattedDateTime')<br>)</code></pre>



<p class="wp-block-paragraph">This approach makes your Power Apps formula-style expression inside Power Automate more readable and easier to debug, especially in larger flows.</p>



<h2 class="wp-block-heading">When to Use This Pattern</h2>



<p class="wp-block-paragraph">You&#8217;ll use this Power Automate date formatting pattern whenever:</p>



<ul class="wp-block-list">
<li>You send daily, weekly, or monthly reports.</li>



<li>You generate sales summaries, scorecards, or temperature logs as emails.</li>



<li>You build approval requests that show <strong>&#8220;Created on 3rd Jun 2026&#8221;</strong>.</li>



<li>You log events, like <strong>&#8220;Order shipped on 21st Jan 2026, 11:15 AM&#8221;</strong>.</li>
</ul>



<p class="wp-block-paragraph">For example, with a daily sales amount of <strong>USD 1250</strong>, your email body might say:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Total sales for 24th Jun 2026, 02:32 PM: USD 1250.</strong></p>
</blockquote>



<p class="wp-block-paragraph">The date formatting expression keeps that line readable and professional.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">You learned how to take a raw UTC date-time, format it into a friendly string, and add the correct <strong>st / nd / rd / th</strong> suffix using Power Automate expressions.</p>



<p class="wp-block-paragraph">Use <strong>Method 1 (single expression)</strong> when you just need the formatted date in one place, and <strong>Method 2 (Compose-based)</strong> when you want cleaner, reusable logic across multiple actions in a bigger flow.</p>



<p class="wp-block-paragraph">I hope you found this article helpful.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Environment Strategy for Copilot Studio: Dev, Test, Prod Best Practices</title>
		<link>https://powerplatformfaqs.com/copilot-studio-environment-strategy/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Sun, 21 Jun 2026 15:49:26 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[Copilot Studio Environment Strategy]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1203</guid>

					<description><![CDATA[If you&#8217;ve ever built a Copilot Studio agent and then wondered &#8220;how do I actually move this to production without breaking everything,&#8221; you&#8217;re in the right place. This is one of the most common pain points I see teams hit, especially those new to Power Platform ALM (Application Lifecycle Management). Microsoft has solid guidance now. ... <a title="Environment Strategy for Copilot Studio: Dev, Test, Prod Best Practices" class="read-more" href="https://powerplatformfaqs.com/copilot-studio-environment-strategy/" aria-label="Read more about Environment Strategy for Copilot Studio: Dev, Test, Prod Best Practices">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you&#8217;ve ever <a href="https://powerplatformfaqs.com/create-ai-agent-microsoft-copilot-studio/" target="_blank" rel="noreferrer noopener">built a Copilot Studio agent</a> and then wondered &#8220;how do I actually move this to production without breaking everything,&#8221; you&#8217;re in the right place. This is one of the most common pain points I see teams hit, especially those new to Power Platform ALM (Application Lifecycle Management).</p>



<p class="wp-block-paragraph">Microsoft has solid guidance now. In this tutorial, I&#8217;ll walk you through everything you need to know to <strong>build a proper environment strategy for Copilot Studio — the Dev, Test, and Prod</strong> setup that keeps production stable while letting you innovate safely.</p>



<p class="wp-block-paragraph">I&#8217;m going to explain this as I would for a colleague who&#8217;s just picked up Copilot Studio and wants to do things right from the start. Just practical, actionable guidance that you can apply today while working with Copilot Studio.</p>



<h2 class="wp-block-heading">Why Environment Strategy Matters (And Why You Should Care)</h2>



<p class="wp-block-paragraph">Copilot Studio makes it incredibly fast to go from idea to working agent. You can build something impressive in an hour. That speed is amazing — but it also means agents can reach production maturity quickly, and without proper lifecycle practices, you end up with:</p>



<ul class="wp-block-list">
<li><strong>Agents that break when moved</strong>&nbsp;because hardcoded URLs or connection references don&#8217;t work in the new environment</li>



<li><strong>No way to track what changed</strong>&nbsp;or who deployed something</li>



<li><strong>Production instability</strong>&nbsp;because someone made a direct change in the live environment</li>



<li><strong>Emergency fixes that block ongoing work</strong>&nbsp;because you&#8217;re trying to fix production while feature development is happening in the same space</li>
</ul>



<p class="wp-block-paragraph">The solution is environment isolation. You create separate spaces for different stages of your agent&#8217;s lifecycle, and changes flow in one direction only: Dev → Test → Prod.</p>



<p class="wp-block-paragraph">This isn&#8217;t some fancy enterprise requirement. It&#8217;s basic best practice that emerges naturally once your agent serves real users and downtime has a cost.</p>



<h2 class="wp-block-heading">The Three-Environment Model: Dev, Test, Prod</h2>



<p class="wp-block-paragraph">Let&#8217;s start with the foundation. The most tried-and-tested pattern in Power Platform is three environments:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Environment</th><th class="has-text-align-left" data-align="left">What You Do Here</th><th class="has-text-align-left" data-align="left">Solution Type</th><th class="has-text-align-left" data-align="left">Who Uses It</th></tr></thead><tbody><tr><td><strong>Development (Dev)</strong></td><td>Author and test your agent daily</td><td>Unmanaged</td><td>Makers/developers</td></tr><tr><td><strong>Test</strong></td><td>Validate functionality, run evaluations, UAT</td><td>Managed</td><td>QA team, stakeholders</td></tr><tr><td><strong>Production (Prod)</strong></td><td>Live agent serving real users</td><td>Managed</td><td>End users</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Here&#8217;s what makes this work:</p>



<p class="wp-block-paragraph"><strong>Dev is where you build.</strong>&nbsp;This is your active authoring space. You create topics, configure tools, add knowledge sources, and test conversations. Everything lives in an&nbsp;<em>unmanaged solution</em>&nbsp;— you can add, edit, or remove components freely.</p>



<p class="wp-block-paragraph"><strong>Test is where you validate.</strong>&nbsp;Before anything touches production, it goes here. You run automated evaluations, do user acceptance testing (UAT), and confirm the agent works correctly with test-specific configuration (like test SharePoint libraries or test API endpoints). This uses a&nbsp;<em>managed solution</em>&nbsp;— it&#8217;s read-only, sealed. Nobody can edit it directly.</p>



<p class="wp-block-paragraph"><strong>Prod is where users interact.</strong>&nbsp;This is your live environment. The agent here serves real users with real data. It also uses a&nbsp;<em>managed solution</em>, and changes only happen through the deployment pipeline — never by editing directly.</p>



<p class="wp-block-paragraph">Changes flow in one direction: Dev → Test → Prod. This keeps production stable and predictable.</p>



<h2 class="wp-block-heading">How to Create These Environments in Power Platform</h2>



<p class="wp-block-paragraph">You create environments in the <strong>Power Platform Admin Center</strong> (aka.admin.microsoft.com). The process is like below:</p>



<h3 class="wp-block-heading">Open the Power Platform Admin Center</h3>



<ul class="wp-block-list">
<li>Navigate to the Power Platform Admin Center (https://admin.powerplatform.microsoft.com) and then sign in using your Microsoft 365 or Power Platform administrator account.</li>



<li>In the left navigation pane, click <strong>Manage</strong>, then Select <strong>Environments</strong>. This page displays all environments available in your tenant, including:
<ul class="wp-block-list">
<li>Production</li>



<li>Sandbox</li>



<li>Developer</li>



<li>Trial</li>



<li>Default Environment</li>
</ul>
</li>



<li>At the top of the Environments page, click the <strong>+ New</strong> button.</li>
</ul>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="949" height="608" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform.jpg" alt="Create Environments in Power Platform" class="wp-image-1244" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform.jpg 949w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform-300x192.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform-768x492.jpg 768w" sizes="(max-width: 949px) 100vw, 949px" /></figure>
</div>


<ul class="wp-block-list">
<li>This launches the environment creation wizard.</li>
</ul>



<p class="wp-block-paragraph">Here, fill in the details to create an environment.</p>



<ul class="wp-block-list">
<li><strong>Type: Developer</strong>
<ul class="wp-block-list">
<li>Creates a personal development environment for building and testing Power Platform solutions.</li>



<li>Not intended for production use.</li>
</ul>
</li>



<li><strong>Region: United States</strong>
<ul class="wp-block-list">
<li>Determines the geographic location where the environment and data are stored.</li>



<li>Helps meet performance and compliance requirements.</li>
</ul>
</li>



<li><strong>Name: dev-na-d66014c5</strong>
<ul class="wp-block-list">
<li>Unique identifier for the environment.</li>



<li>Used to distinguish it from other environments in the tenant.</li>
</ul>
</li>



<li><strong>Owner</strong>
<ul class="wp-block-list">
<li>The user who creates and manages the environment.</li>



<li>Has full administrative access.</li>
</ul>
</li>



<li><strong>Environment Group: None</strong>
<ul class="wp-block-list">
<li>The environment is not assigned to any environment group.</li>



<li>Environment groups help organize and manage multiple environments.</li>
</ul>
</li>



<li><strong>Managed: No</strong>
<ul class="wp-block-list">
<li>The environment is not a Managed Environment.</li>



<li>Standard governance and monitoring features apply.</li>
</ul>
</li>



<li><strong>Get New Features Early: No</strong>
<ul class="wp-block-list">
<li>Early access features are disabled.</li>



<li>The environment will receive new features during standard Microsoft releases.</li>
</ul>
</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="423" height="683" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform-for-Power-Automate.jpg" alt="Create Environments in Power Platform for Power Automate" class="wp-image-1246" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform-for-Power-Automate.jpg 423w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Environments-in-Power-Platform-for-Power-Automate-186x300.jpg 186w" sizes="(max-width: 423px) 100vw, 423px" /></figure>
</div>


<p class="wp-block-paragraph">You can also look at the settings below.</p>



<ul class="wp-block-list">
<li><strong>Environment Group</strong>
<ul class="wp-block-list">
<li>Assigns the environment to a specific environment group for centralized administration.</li>
</ul>
</li>



<li><strong>Make this a Managed Environment</strong>
<ul class="wp-block-list">
<li>Enables advanced governance, security, monitoring, and usage insights.</li>



<li>Recommended for enterprise and production scenarios.</li>
</ul>
</li>



<li><strong>Get New Features Early</strong>
<ul class="wp-block-list">
<li>Provides access to preview and upcoming Power Platform features before general availability.</li>



<li>Useful for testing and learning new capabilities.</li>
</ul>
</li>



<li><strong>Create on Behalf</strong>
<ul class="wp-block-list">
<li>Allows administrators to create a Developer environment for another user.</li>



<li>Commonly used in organizations to provision environments for makers and developers.</li>
</ul>
</li>



<li><strong>Pay-as-you-go with Azure</strong>
<ul class="wp-block-list">
<li>Links the environment to an Azure subscription for usage-based billing.</li>



<li>Available only for <strong>Production</strong> and <strong>Sandbox</strong> environments, not Developer environments.</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="423" height="799" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-Create-Environments-in-Power-Platform.jpg" alt="How to Create Environments in Power Platform" class="wp-image-1247" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-Create-Environments-in-Power-Platform.jpg 423w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-Create-Environments-in-Power-Platform-159x300.jpg 159w" sizes="(max-width: 423px) 100vw, 423px" /></figure>
</div>


<p class="wp-block-paragraph">Do this for all three environments. Give them clear names so everyone knows which one is which.</p>



<h2 class="wp-block-heading">When You Might Need More Environments</h2>



<p class="wp-block-paragraph">The Dev-Test-Prod foundation is solid for most teams. But as your agent matures and becomes more business-critical, you might want to add two optional environments:</p>



<h3 class="wp-block-heading">Preview Environment: Catch Platform Regressions Early</h3>



<p class="wp-block-paragraph">Power Platform and Copilot Studio update continuously. Sometimes an update introduces a regression that breaks your agent. A&nbsp;<strong>Preview environment</strong>&nbsp;on the First Release ring gives you an early warning.</p>



<p class="wp-block-paragraph">Here&#8217;s how it works:</p>



<ul class="wp-block-list">
<li>First Release gets platform updates weeks before the standard ring</li>



<li>You deploy your current production solution into Preview</li>



<li>You run evaluations on a schedule</li>



<li>When evals start failing in Preview but still pass in Production, you have an early warning: something in the upcoming update might need attention</li>



<li>You get weeks to investigate and adapt instead of reacting when production breaks</li>
</ul>



<p class="wp-block-paragraph">This is one of the most valuable yet underutilized practices in Power Platform ALM. A Preview environment with scheduled evals turns platform updates from a reactive concern into a proactive one.</p>



<h3 class="wp-block-heading">Production-Aligned Dev Environment: Handle Emergencies Without Shipping Unfinished Work</h3>



<p class="wp-block-paragraph">Imagine this: your primary Dev environment has work in progress. A critical bug surfaces in Production. You can&#8217;t wait for the current development cycle to complete, and you can&#8217;t ship half-finished features alongside a hotfix.</p>



<p class="wp-block-paragraph">The solution is a&nbsp;<strong>production-aligned development environment</strong>&nbsp;— a secondary Dev environment that holds an unmanaged copy of whatever is currently running in Prod. When an emergency arises:</p>



<ul class="wp-block-list">
<li>You make the fix there</li>



<li>Export it as a managed solution</li>



<li>Promote it directly through the pipeline (Prod-Aligned Dev → Test → Prod)</li>



<li>Your primary Dev environment and its in-progress work remain untouched</li>
</ul>



<pre class="wp-block-preformatted">Normal cycle: Dev → Test → Prod<br>Hotfix cycle: Prod-Aligned Dev → Test → Prod</pre>



<p class="wp-block-paragraph">This isn&#8217;t overhead for day one. Add it when the agent is mature enough that production downtime has a real cost. But plan for it from the start — retrofitting emergency processes during an actual emergency is how mistakes happen.</p>



<h3 class="wp-block-heading">The Full Environment Picture</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Environment</th><th class="has-text-align-left" data-align="left">Release Ring</th><th class="has-text-align-left" data-align="left">What Lives Here</th><th class="has-text-align-left" data-align="left">Why</th></tr></thead><tbody><tr><td>Dev</td><td>Standard</td><td>Unmanaged solution (active work)</td><td>Daily authoring</td></tr><tr><td>Prod-Aligned Dev</td><td>Standard</td><td>Unmanaged solution (mirrors Prod)</td><td>Hotfixes</td></tr><tr><td>Test</td><td>Standard</td><td>Managed solution</td><td>Validation, UAT</td></tr><tr><td>Preview</td><td>First Release</td><td>Managed solution (mirrors Prod)</td><td>Regression detection</td></tr><tr><td>Production</td><td>Standard</td><td>Managed solution</td><td>Live users</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Start with Dev, Test, and Prod. Add Preview and Prod-Aligned Dev as the agent matures.</p>



<h2 class="wp-block-heading">Solutions: The Unit of Deployment</h2>



<p class="wp-block-paragraph">If environments are where your agent lives,&nbsp;<strong>solutions</strong>&nbsp;are how it travels between them. A solution is a container — a package that holds every component your agent depends on and makes the entire set portable and promotable as a single unit.</p>



<h3 class="wp-block-heading">What Goes Inside a Copilot Studio Solution</h3>



<p class="wp-block-paragraph">Everything your agent depends on must live inside a single solution:</p>



<ul class="wp-block-list">
<li>The agent itself</li>



<li>Its tools (APIs, connectors, external integrations, workflows)</li>



<li>Its environment variables (configuration that differs per environment)</li>



<li>Its knowledge source references</li>



<li>And everything else it needs to function</li>
</ul>



<p class="wp-block-paragraph">Anything created outside a solution is invisible to your deployment pipeline and cannot be promoted cleanly. This is the single most common mistake teams make early on — building components in the default environment without a solution, only to discover they cannot move them.</p>



<p class="wp-block-paragraph"><strong>The fix is simple:</strong>&nbsp;create your solution first, then create everything else inside it.</p>



<h3 class="wp-block-heading">How to Set Up Your Solution</h3>



<ol class="wp-block-list">
<li>Go to your&nbsp;<strong>Dev environment</strong>&nbsp;in Power Platform</li>



<li>Click&nbsp;<strong>Solutions</strong>&nbsp;→&nbsp;<strong>New solution</strong></li>



<li>Name it (e.g., &#8220;Contoso-Copilot-Agent&#8221;)</li>



<li>Set the&nbsp;<strong>Publisher</strong>&nbsp;(use your organization&#8217;s publisher)</li>



<li>Click&nbsp;<strong>Create</strong></li>



<li><strong>Set it as your preferred solution</strong>&nbsp;— this ensures new components are automatically added to it rather than floating in the default solution</li>
</ol>



<p class="wp-block-paragraph">From that point on, every component must be created&nbsp;<em>inside</em>&nbsp;this solution. When you create a new topic, tool, or environment variable, make sure you&#8217;re creating it within the solution context.</p>



<h2 class="wp-block-heading">Managed vs. Unmanaged Solution: The Critical Difference</h2>



<p class="wp-block-paragraph">Solutions exist in two forms:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Type</th><th class="has-text-align-left" data-align="left">Where it lives</th><th class="has-text-align-left" data-align="left">What you can do</th><th class="has-text-align-left" data-align="left">Purpose</th></tr></thead><tbody><tr><td><strong>Unmanaged</strong></td><td>Development</td><td>Add, edit, remove components freely</td><td>Active authoring</td></tr><tr><td><strong>Managed</strong></td><td>Test, Production</td><td>Read-only. Cannot be edited directly.</td><td>Stable, sealed deployment artifact</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">When you export a solution from Dev, you choose to export it as&nbsp;<strong>managed</strong>&nbsp;or&nbsp;<strong>unmanaged</strong>. The best practice when promoting your agent is to export as&nbsp;<strong>managed</strong>. This managed package is what gets imported into Test and later into Production.</p>



<p class="wp-block-paragraph">It&#8217;s sealed — nobody can edit it in place without going back to the dev environment. If a change is needed, it must be made in Dev, re-exported, and re-promoted. This one-way flow is what keeps Production stable.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/how-generative-ai-works-inside-copilot-studio/">How Generative AI Works Inside Copilot Studio</a></p>



<h2 class="wp-block-heading">Deploying With Confidence: Power Platform Pipelines</h2>



<p class="wp-block-paragraph">With your environments established and your solution containing all agent assets, how does the solution actually move from Dev to Test to Prod?</p>



<p class="wp-block-paragraph">You could do this manually — export a .zip from Dev, navigate to Test, import it, repeat for Prod. This works, but it&#8217;s error-prone, undocumented, and doesn&#8217;t scale. It also leaves no trace of what was deployed, when, or by whom.</p>



<p class="wp-block-paragraph"><strong>Power Platform Pipelines</strong>&nbsp;solve this. A pipeline is a pre-configured promotion path that connects your environments in sequence. Once set up, promoting your solution is a single action: select the solution, select the stage (Dev to Test, or Test to Prod), and deploy. The pipeline handles the managed export, the import into the target, and records the deployment in its history.</p>



<h3 class="wp-block-heading">What a Pipeline Gives You</h3>



<ul class="wp-block-list">
<li><strong>Repeatability</strong>&nbsp;— the same process every time, no manual steps to forget</li>



<li><strong>Audit trail</strong>&nbsp;— who deployed what, when, and to which environment</li>



<li><strong>Rollback visibility</strong>&nbsp;— deployment history shows exactly which version is in each environment</li>



<li><strong>Guardrails</strong>&nbsp;— you can require approvals before a deployment proceeds to the next stage</li>
</ul>



<h3 class="wp-block-heading">What a Pipeline Does Not Do</h3>



<ul class="wp-block-list">
<li>It does not validate that your agent works correctly after import — that&#8217;s what evaluations are for</li>



<li>It does not set environment-specific configuration values — those must be in place before the solution arrives</li>



<li>It does not manage secrets — those live in Azure Key Vault, referenced through environment variables</li>
</ul>



<h3 class="wp-block-heading">How to Set Up a Pipeline</h3>



<ol class="wp-block-list">
<li>Go to&nbsp;<strong>Power Platform Admin Center</strong></li>



<li>Click&nbsp;<strong>Pipelines</strong>&nbsp;→&nbsp;<strong>New pipeline</strong></li>



<li>Name it (e.g., &#8220;Copilot-Agent-Pipeline&#8221;)</li>



<li>Add your&nbsp;<strong>source environment</strong>&nbsp;(Dev)</li>



<li>Add your&nbsp;<strong>target environments</strong>&nbsp;(Test, then Prod)</li>



<li>Configure deployment stages with pre-deployment and post-deployment steps if needed</li>



<li>Click&nbsp;<strong>Save</strong></li>
</ol>



<p class="wp-block-paragraph">Once configured, deploying is simple:</p>



<ol class="wp-block-list">
<li>Go to your solution in Dev</li>



<li>Click&nbsp;<strong>Export to pipeline</strong></li>



<li>Select the target stage (Test or Prod)</li>



<li>Click&nbsp;<strong>Deploy</strong></li>
</ol>



<p class="wp-block-paragraph">The pipeline handles everything automatically.</p>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/copilot-studio-token-usage/">Monitor Token Usage by AI Model in Copilot Studio</a></p>



<h2 class="wp-block-heading">Configuration Without Hardcoding: Environment Variables</h2>



<p class="wp-block-paragraph">The principle is simple:&nbsp;<strong>nothing environment-specific gets hardcoded</strong>. API endpoints, SharePoint URLs, thresholds, feature flags — all go into environment variables.</p>



<p class="wp-block-paragraph">Environment variables have two layers that are important to understand:</p>



<ul class="wp-block-list">
<li><strong>Definition</strong>&nbsp;— the schema (name, data type, description). This travels with the solution.</li>



<li><strong>Value</strong>&nbsp;— the actual content. This is set per environment and does&nbsp;<em>not</em>&nbsp;travel with the solution.</li>
</ul>



<p class="wp-block-paragraph">This separation is what makes portability possible. When you import your managed solution into Test, it brings the variable definitions but not the values.</p>



<p class="wp-block-paragraph">The Test environment already has its own values configured. The same workflow runs unchanged across Dev, Test, and Prod because it reads its configuration from whichever environment it happens to be running in.</p>



<h2 class="wp-block-heading">Supported Environment Variable Types</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Type</th><th class="has-text-align-left" data-align="left">Use Case</th></tr></thead><tbody><tr><td>String</td><td>URLs, identifiers, configuration strings</td></tr><tr><td>Number</td><td>Thresholds, limits, numeric config</td></tr><tr><td>Boolean</td><td>Feature flags</td></tr><tr><td>Data source</td><td>SharePoint lists, Dataverse tables</td></tr><tr><td>Secret</td><td>Azure Key Vault references</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">How to Create an Environment Variable</h2>



<ol class="wp-block-list">
<li>In your Dev environment, open your solution</li>



<li>Click&nbsp;<strong>Add existing</strong>&nbsp;→&nbsp;<strong>More</strong>&nbsp;→&nbsp;<strong>Environment variable</strong></li>



<li>Click&nbsp;<strong>New</strong></li>



<li>Fill in:
<ul class="wp-block-list">
<li><strong>Name</strong>&nbsp;(e.g., &#8220;API Endpoint&#8221;)</li>



<li><strong>Schema name</strong>&nbsp;(e.g., &#8220;contoso_ApiEndpoint&#8221;) — this is what you&#8217;ll reference in your agent</li>



<li><strong>Type</strong>&nbsp;(String, Number, Boolean, etc.)</li>



<li><strong>Description</strong>&nbsp;(helpful for team members)</li>
</ul>
</li>



<li><strong>Do not set a current value</strong>&nbsp;if it will differ across environments</li>



<li>Click&nbsp;<strong>Save</strong></li>
</ol>



<p class="wp-block-paragraph">Now reference this variable in your agent by using the schema name:&nbsp;<code>contoso_ApiEndpoint</code></p>



<h2 class="wp-block-heading">The Critical Mistake to Avoid</h2>



<p class="wp-block-paragraph">Do not set a&nbsp;<strong>current value</strong>&nbsp;on an environment variable inside the solution definition if that value will differ across environments. Values baked into the solution definition will override environment-specific values and silently break your portability.</p>



<p class="wp-block-paragraph"><strong>Set values directly in each target environment after import.</strong></p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/ai-model-copilot-studio/">How to Choose an AI Model in Copilot Studio</a></p>



<h2 class="wp-block-heading">Preparing Variables Before Deployment</h2>



<p class="wp-block-paragraph">When your pipeline promotes a solution to a new environment, the variable definitions arrive but the values do not. This means environment variable values must be configured in the target environment&nbsp;<em>before</em>&nbsp;the solution is imported — otherwise workflows that depend on those variables will fail at runtime.</p>



<p class="wp-block-paragraph">Include this as an explicit step in your promotion process: verify that every expected variable has a value in the target before deploying.</p>



<h2 class="wp-block-heading">How Values Are Supplied</h2>



<p class="wp-block-paragraph">There are two models depending on how you deploy:</p>



<p class="wp-block-paragraph"><strong>With Power Platform Pipelines (in-product):</strong>&nbsp;When a solution containing environment variables is deployed, the pipeline prompts you to provide or confirm values for the target environment — just as a manual import would. If values already exist in the target, they are pre-filled. If they do not, you supply them at deployment time.</p>



<p class="wp-block-paragraph"><strong>With CI/CD pipelines (Azure DevOps or GitHub Actions):</strong>&nbsp;You use a deployment settings file — a JSON file that maps each variable&#8217;s schema name to its target-specific value:</p>



<pre class="wp-block-preformatted">{<br>  "EnvironmentVariables": [<br>    {<br>      "SchemaName": "contoso_ApiEndpoint",<br>      "Value": "https://api-test.contoso.com"<br>    },<br>    {<br>      "SchemaName": "contoso_MaxRetries",<br>      "Value": "3"<br>    }<br>  ]<br>}</pre>



<p class="wp-block-paragraph">This file is passed as a parameter to the solution import task, pre-populating values during import without manual intervention.</p>



<p class="wp-block-paragraph">In both models, the principle is the same: the solution carries the variable definitions, and the target environment (or its settings file) supplies the values. The pipeline never embeds environment-specific configuration into the solution artifact itself.</p>



<h2 class="wp-block-heading">Secrets: Azure Key Vault Integration</h2>



<p class="wp-block-paragraph">For secrets — API keys, tokens, credentials —&nbsp;<strong>secret environment variables backed by Azure Key Vault</strong>&nbsp;provide a secure, auditable approach. The agent references a Key Vault secret rather than holding the value directly, and the platform resolves it at runtime. When a key rotates, you update Key Vault — no solution change or redeployment needed.</p>



<h3 class="wp-block-heading">How to Set Up Key Vault Secrets</h3>



<ol class="wp-block-list">
<li>Create Azure Key Vaults per environment tier:
<ul class="wp-block-list">
<li><code>kv-agent-dev</code></li>



<li><code>kv-agent-test</code></li>



<li><code>kv-agent-prod</code></li>
</ul>
</li>



<li>Store secrets with identical names across them (e.g., &#8220;ApiKey&#8221;, &#8220;AuthToken&#8221;)</li>



<li>In each environment, create a&nbsp;<strong>secret environment variable</strong>:
<ul class="wp-block-list">
<li>Type: Secret</li>



<li>Value: Reference to the Key Vault secret (e.g.,&nbsp;<code>@{appKeyVault}@contoso_ApiKey</code>)</li>
</ul>
</li>



<li>Structure your vaults so only the vault reference in each environment&#8217;s variable value differs. The workflow logic is identical everywhere — it asks for a secret by name, and the environment resolves it to the correct vault.</li>
</ol>



<p class="wp-block-paragraph">This approach means:</p>



<ul class="wp-block-list">
<li>Secrets never touch your solution</li>



<li>Key rotation happens without redeployment</li>



<li>You have audit trails for secret access</li>



<li>Each environment uses its own isolated secrets</li>
</ul>



<h2 class="wp-block-heading">Knowing It Works: Evaluations and Testing</h2>



<p class="wp-block-paragraph">Deploying correctly does not guarantee behaving correctly.&nbsp;<strong>Evaluations</strong>&nbsp;close that gap.</p>



<p class="wp-block-paragraph">An evaluation is a defined set of test inputs and expected outputs that measures whether your agent is selecting the right tools, triggering the right logic, and producing acceptable responses. It serves as your quality gate — giving confidence that a promotion is safe.</p>



<h3 class="wp-block-heading">Agent Evaluation in Copilot Studio (Built-In Automated Testing)</h3>



<p class="wp-block-paragraph">Microsoft recently introduced&nbsp;<strong>Agent Evaluation</strong>&nbsp;— automated testing built directly into Copilot Studio. This lets you validate your agent&#8217;s responses against predefined expectations using multiple evaluation methods.</p>



<p class="wp-block-paragraph">With Agent Evaluation, you can:</p>



<ul class="wp-block-list">
<li>Create reusable test sets (up to 100 test cases per set)</li>



<li>Define success criteria per question</li>



<li>Run tests under specific user identities</li>



<li>Analyze pass/fail results and quality scores</li>
</ul>



<h3 class="wp-block-heading">How to Create a Test Set</h3>



<p class="wp-block-paragraph"><strong>Step 1: Open Your Agent in Copilot Studio</strong></p>



<ul class="wp-block-list">
<li>Go to Microsoft Copilot Studio</li>



<li>Open the agent you want to test</li>



<li>Navigate to the&nbsp;<strong>Evaluation</strong>&nbsp;tab</li>
</ul>



<p class="wp-block-paragraph"><strong>Step 2: Create a Test Set</strong></p>



<p class="wp-block-paragraph">A test set is a collection of questions your agent should handle correctly. You can create test cases in multiple ways:</p>



<ul class="wp-block-list">
<li><strong>AI-generated questions</strong>&nbsp;based on the agent description and knowledge</li>



<li><strong>Manual entry</strong>&nbsp;of questions and expected responses</li>



<li><strong>Reuse questions</strong>&nbsp;from test chat history</li>



<li><strong>Import a CSV file</strong>&nbsp;with up to 100 test cases</li>
</ul>



<p class="wp-block-paragraph">Each test case can include:</p>



<ul class="wp-block-list">
<li>Question</li>



<li>Expected response (where required)</li>



<li>Evaluation method</li>



<li>Threshold for success</li>
</ul>



<p class="wp-block-paragraph"><strong>Step 3: Configure User Context</strong></p>



<p class="wp-block-paragraph">You can run evaluations under a specific user profile:</p>



<ul class="wp-block-list">
<li>Ensures the agent accesses the same data and connectors as real users</li>



<li>Helps identify permission-related issues early</li>
</ul>



<p class="wp-block-paragraph">This is especially important for agents using secured SharePoint, Dataverse, or external connectors.</p>



<h3 class="wp-block-heading">Evaluation Methods You Can Choose</h3>



<p class="wp-block-paragraph">Makers can choose from a wide range of test methods:</p>



<ul class="wp-block-list">
<li><strong>Exact or partial matches</strong>&nbsp;— for strict checklist compliance</li>



<li><strong>Advanced similarity metrics</strong>&nbsp;— for semantic alignment</li>



<li><strong>Intent recognition</strong>&nbsp;— for understanding whether the right logic triggered</li>



<li><strong>Relevance and completeness</strong>&nbsp;— for overall helpfulness</li>
</ul>



<p class="wp-block-paragraph">You can also set custom thresholds to ensure your agent meets your organization&#8217;s unique standards for accuracy and relevance.</p>



<h3 class="wp-block-heading">Where Evaluations Fit in Your ALM Process</h3>



<p class="wp-block-paragraph">Evaluations are not a standalone activity. They integrate directly into the promotion lifecycle:</p>



<ul class="wp-block-list">
<li><strong>After changes in Dev</strong>&nbsp;— did anything regress? Run evals before exporting.</li>



<li><strong>Before promotion to Test</strong>&nbsp;— evals passing is the signal that a solution is ready to move forward.</li>



<li><strong>On a schedule in Preview</strong>&nbsp;— will the next platform update break us? Automated scheduled evals answer this continuously.</li>



<li><strong>After import in the target</strong>&nbsp;— did the deployment land cleanly? A post-deployment smoke eval confirms the agent is functional in its new environment.</li>
</ul>



<h3 class="wp-block-heading">Automating Evaluations in Your Pipeline</h3>



<p class="wp-block-paragraph">Evaluations can be triggered programmatically, which means they can become an automated gate in your promotion pipeline. Rather than relying on a human to remember to run them, you configure the pipeline to execute evaluations after each deployment and block further promotion if results fall below a threshold.</p>



<p class="wp-block-paragraph">This transforms evaluations from a manual best practice into an enforced quality gate — no deployment reaches Production unless the agent demonstrably works.</p>



<h3 class="wp-block-heading">The Copilot Studio Kit for Automated Testing</h3>



<p class="wp-block-paragraph">For more advanced automated testing, you can use the&nbsp;<strong>Power CAT Copilot Studio Kit</strong>. This integrates Power Automate cloud flows with Dataverse and the Copilot Studio Kit to validate agent functionality with security and data integrity tests.</p>



<p class="wp-block-paragraph">The deployment process with the Kit requires three environments:</p>



<ul class="wp-block-list">
<li><strong>Pipeline host environment:</strong>&nbsp;Hosts the pipelines and their extensions. It&#8217;s the central control point.</li>



<li><strong>Development (source) environment:</strong>&nbsp;Where you develop and test the agent. Kit is installed here.</li>



<li><strong>Target (production) environment:</strong>&nbsp;The final destination where the agent is published after passing validation.</li>
</ul>



<p class="wp-block-paragraph">High-level steps:</p>



<ol class="wp-block-list">
<li>Open the Deployment Pipeline Configuration app</li>



<li>Configure the pipeline with name and linked development environments</li>



<li>Add deployment stages to define target environments</li>



<li>Enable pre-export and pre-deployment steps</li>



<li>Trigger on deployment request — the flow pauses, runs automated tests, evaluates results, and decides whether to proceed</li>
</ol>



<h2 class="wp-block-heading">Security and Governance: Environment-Level Controls</h2>



<p class="wp-block-paragraph">Your environment strategy isn&#8217;t just about deployment — it&#8217;s also about security. Each environment should have appropriate controls based on its purpose.</p>



<h3 class="wp-block-heading">Environment-Level Settings to Configure</h3>



<p class="wp-block-paragraph"><strong>For Production:</strong></p>



<ul class="wp-block-list">
<li><strong>Lockbox</strong>&nbsp;— prevent unmanaged customizations</li>



<li><strong>Dataverse audit</strong>&nbsp;— enable logging for compliance</li>



<li><strong>IP firewall</strong>&nbsp;— restrict access to known IPs</li>



<li><strong>IP cookie binding</strong>&nbsp;— add another layer of authentication</li>



<li><strong>Environment auditing</strong>&nbsp;— enable for compliance tracking</li>
</ul>



<p class="wp-block-paragraph"><strong>For All Environments:</strong></p>



<ul class="wp-block-list">
<li><strong>Microsoft Entra Conditional Access</strong>&nbsp;— apply for corporate devices and networks</li>



<li><strong>MFA</strong>&nbsp;— enable multifactor authentication for all users</li>



<li><strong>RBAC</strong>&nbsp;— use Power Platform role-based access control to assign appropriate roles (admin, maker, end-user)</li>



<li><strong>Restricted user access</strong>&nbsp;— limit authoring access to specific security groups</li>
</ul>



<h3 class="wp-block-heading">Data Policies</h3>



<p class="wp-block-paragraph">Establish environment-level or tenant-level data policy rules for your agent to restrict unused connectors based on the agent&#8217;s use case:</p>



<ul class="wp-block-list">
<li>Restrict non-business connectors in production</li>



<li>Allow broader connector access in Dev for testing</li>



<li>Define which first-party (1P) and third-party (3P) connectors are permitted</li>
</ul>



<h3 class="wp-block-heading">Authentication Models</h3>



<p class="wp-block-paragraph">Establish the permitted authentication model for your Copilot agent:</p>



<ul class="wp-block-list">
<li>Authentication via Microsoft Entra ID (recommended for production)</li>



<li>Manual authentication (for specific scenarios)</li>



<li>No authentication required (only for public-facing agents with appropriate safeguards)</li>
</ul>



<p class="wp-block-paragraph">Additionally, decide on restricting or permitting web channel access to ensure an appropriate security level.</p>



<h3 class="wp-block-heading">Least Privilege Principle</h3>



<p class="wp-block-paragraph">Restrict agent permissions to essential data sources only:</p>



<ul class="wp-block-list">
<li>In production, use a&nbsp;<strong>service principal account</strong>&nbsp;for deployment and custom connector authentication</li>



<li>Don&#8217;t give agents broader access than they need</li>



<li>Review and approve integrated app registrations, VNets, keys, and endpoints in Azure for production resources</li>
</ul>



<h2 class="wp-block-heading">Before You Promote: A Checklist</h2>



<p class="wp-block-paragraph">Before deploying your agent to Test or Prod, make sure you&#8217;ve covered these items:</p>



<ul class="wp-block-list">
<li>✓ All agent assets live inside the solution</li>



<li>✓ Solution set as preferred solution in Dev</li>



<li>✓ No hardcoded environment-specific values anywhere</li>



<li>✓ Environment variable values configured in the target environment</li>



<li>✓ Secrets are in Key Vault, referenced via secret environment variables</li>



<li>✓ Pipeline configured with correct stage sequence</li>



<li>✓ Solution exported as managed for Test and Prod</li>



<li>✓ Evaluations pass before and after deployment</li>



<li>✓ Smoke test passes in the target after import</li>



<li>✓ Production knowledge sources (SharePoint libraries, documents) are properly referenced</li>



<li>✓ Data policies and RBAC are correctly configured in production</li>
</ul>



<h2 class="wp-block-heading">Common Pitfalls (And How to Avoid Them)</h2>



<h3 class="wp-block-heading">Pitfall 1: Creating Components Outside a Solution</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;You build topics, tools, and variables in the default environment without a solution. Later, you can&#8217;t export or promote them.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Create your solution first. Set it as preferred. Create everything inside it.</p>



<h3 class="wp-block-heading">Pitfall 2: Hardcoding Environment-Specific Values</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;You hardcode &#8220;https://api-contoso.com&#8221; directly in your agent. It works in Dev but breaks in Prod because Prod uses a different endpoint.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Use environment variables. Reference&nbsp;<code>contoso_ApiEndpoint</code>&nbsp;instead of the actual URL. Set the value per environment.</p>



<h3 class="wp-block-heading">Pitfall 3: Setting Current Values in Solution Definition</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;You set a current value on an environment variable in your solution definition. When you import to Test, it overrides Test&#8217;s value and breaks your agent.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Don&#8217;t set current values in the solution definition. Set values directly in each target environment after import.</p>



<h3 class="wp-block-heading">Pitfall 4: Editing Directly in Production</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;Someone makes a quick fix directly in Production because &#8220;it&#8217;s just a small change.&#8221; Now production is unaligned with your solution, and you have no audit trail.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Never edit directly in Production. All changes go through Dev → Test → Prod via the pipeline. If it&#8217;s urgent, use the Prod-Aligned Dev environment for hotfixes.</p>



<h3 class="wp-block-heading">Pitfall 5: Skipping Evaluations</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;You deploy without running evaluations. The agent breaks in production because a tool changed or a knowledge source is missing.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Run evaluations before every deployment. Make evals passing a requirement for promotion. Set up automated evals in your pipeline.</p>



<h3 class="wp-block-heading">Pitfall 6: Using the Default Environment for Development</h3>



<p class="wp-block-paragraph"><strong>Problem:</strong>&nbsp;You build your agent in the Default environment. Later, you can&#8217;t isolate it, secure it properly, or promote it cleanly.</p>



<p class="wp-block-paragraph"><strong>Fix:</strong>&nbsp;Create a dedicated Dev environment from the start. Close down the Default environment to the bare minimum to avoid ongoing security headaches.</p>



<h2 class="wp-block-heading">Real-World Example: Deploying an HR Copilot</h2>



<p class="wp-block-paragraph">Let&#8217;s walk through a concrete example. You&#8217;re building an HR Copilot that answers employee questions about policies, benefits, and leave procedures.</p>



<h3 class="wp-block-heading">Environment Setup</h3>



<ul class="wp-block-list">
<li><strong>Dev:</strong>&nbsp;&#8220;HR-Copilot-Dev&#8221; — where you build the agent</li>



<li><strong>Test:</strong>&nbsp;&#8220;HR-Copilot-Test&#8221; — where HR team validates</li>



<li><strong>Prod:</strong>&nbsp;&#8220;HR-Copilot-Prod&#8221; — where employees access it</li>
</ul>



<h3 class="wp-block-heading">Solution Structure</h3>



<p class="wp-block-paragraph">Create solution &#8220;HR-Copilot-Agent&#8221; in Dev. Inside it:</p>



<ul class="wp-block-list">
<li>Agent: &#8220;HR Policy Copilot&#8221;</li>



<li>Tools: SharePoint connector (for policy documents), Dataverse table (for leave requests)</li>



<li>Environment variables:
<ul class="wp-block-list">
<li><code>hrcontoso_SharePointUrl</code>&nbsp;(String) — SharePoint site URL</li>



<li><code>hrcontoso_LeaveTableId</code>&nbsp;(Data source) — Dataverse table reference</li>



<li><code>hrcontoso_ApiKey</code>&nbsp;(Secret) — Key Vault reference for external HR API</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">Environment Variable Values</h3>



<p class="wp-block-paragraph"><strong>In Dev:</strong></p>



<ul class="wp-block-list">
<li><code>hrcontoso_SharePointUrl</code>&nbsp;= &#8220;https://contoso-dev.sharepoint.com/sites/hr-policies&#8221;</li>



<li><code>hrcontoso_LeaveTableId</code>&nbsp;= &#8220;dev-leave-table-id&#8221;</li>



<li><code>hrcontoso_ApiKey</code>&nbsp;= references&nbsp;<code>kv-hr-dev@hrApiKey</code></li>
</ul>



<p class="wp-block-paragraph"><strong>In Test:</strong></p>



<ul class="wp-block-list">
<li><code>hrcontoso_SharePointUrl</code>&nbsp;= &#8220;https://contoso-test.sharepoint.com/sites/hr-policies&#8221;</li>



<li><code>hrcontoso_LeaveTableId</code>&nbsp;= &#8220;test-leave-table-id&#8221;</li>



<li><code>hrcontoso_ApiKey</code>&nbsp;= references&nbsp;<code>kv-hr-test@hrApiKey</code></li>
</ul>



<p class="wp-block-paragraph"><strong>In Prod:</strong></p>



<ul class="wp-block-list">
<li><code>hrcontoso_SharePointUrl</code>&nbsp;= &#8220;https://contoso.sharepoint.com/sites/hr-policies&#8221;</li>



<li><code>hrcontoso_LeaveTableId</code>&nbsp;= &#8220;prod-leave-table-id&#8221;</li>



<li><code>hrcontoso_ApiKey</code>&nbsp;= references&nbsp;<code>kv-hr-prod@hrApiKey</code></li>
</ul>



<h3 class="wp-block-heading">Evaluation Test Set</h3>



<p class="wp-block-paragraph">Create a test set with 20 questions:</p>



<ul class="wp-block-list">
<li>&#8220;What is the leave policy for new employees?&#8221;</li>



<li>&#8220;How do I request maternity leave?&#8221;</li>



<li>&#8220;What benefits are available after 6 months?&#8221;</li>



<li>&#8220;How do I check my remaining leave days?&#8221;</li>
</ul>



<p class="wp-block-paragraph">For each, define the expected response type and set the evaluation method (semantic similarity with a threshold of 0.8).</p>



<h3 class="wp-block-heading">Deployment Flow</h3>



<ol class="wp-block-list">
<li><strong>In Dev:</strong>&nbsp;Build agent, test in test pane, run evaluations</li>



<li><strong>Evals pass:</strong>&nbsp;Export solution as managed to pipeline</li>



<li><strong>Pipeline deploys to Test:</strong>&nbsp;Solution imported, values already configured</li>



<li><strong>In Test:</strong>&nbsp;HR team validates, runs evaluations again</li>



<li><strong>Evals pass:</strong>&nbsp;Promote to Prod via pipeline</li>



<li><strong>In Prod:</strong>&nbsp;Agent published, employees can access it</li>
</ol>



<h3 class="wp-block-heading">Hotfix Scenario</h3>



<p class="wp-block-paragraph">A critical bug surfaces: the leave request tool is returning wrong data.</p>



<ol class="wp-block-list">
<li><strong>Prod-Aligned Dev:</strong>&nbsp;Import current production solution as unmanaged</li>



<li><strong>Fix the bug:</strong>&nbsp;Edit the tool in Prod-Aligned Dev</li>



<li><strong>Run evaluations:</strong>&nbsp;Confirm fix works</li>



<li><strong>Export to pipeline:</strong>&nbsp;Deploy through Test → Prod</li>



<li><strong>Primary Dev untouched:</strong>&nbsp;Ongoing feature work continues without interruption</li>
</ol>



<h2 class="wp-block-heading">Getting Started: Your Action Plan</h2>



<p class="wp-block-paragraph">If you&#8217;re just starting with Copilot Studio ALM, here&#8217;s what to do:</p>



<p class="wp-block-paragraph"><strong>Week 1: Set Up the Foundation</strong></p>



<ol class="wp-block-list">
<li>Create Dev, Test, and Prod environments in Power Platform Admin Center</li>



<li>Create your first solution in Dev and set it as preferred</li>



<li>Build a simple agent inside the solution</li>



<li>Create environment variables for any configuration that might change</li>
</ol>



<p class="wp-block-paragraph"><strong>Week 2: Add Pipelines and Testing</strong></p>



<ol class="wp-block-list">
<li>Set up a pipeline connecting Dev → Test → Prod</li>



<li>Create your first test set with 10-20 questions</li>



<li>Run evaluations and make sure they pass</li>



<li>Deploy your agent to Test using the pipeline</li>
</ol>



<p class="wp-block-paragraph"><strong>Week 3: Harden Production</strong></p>



<ol class="wp-block-list">
<li>Configure security settings in Prod (Lockbox, auditing, RBAC)</li>



<li>Set up environment variable values in Prod</li>



<li>Deploy to Prod with evaluations passing</li>



<li>Document your process for the team</li>
</ol>



<p class="wp-block-paragraph"><strong>Week 4+: Iterate and Improve</strong></p>



<ol class="wp-block-list">
<li>Add more test cases to your evaluations</li>



<li>Set up scheduled evals in a Preview environment (if you have one)</li>



<li>Refine your pipeline with approval gates</li>



<li>Train your team on the process</li>
</ol>



<h2 class="wp-block-heading">The Payoff</h2>



<p class="wp-block-paragraph">When this is set up correctly, promoting your agent is a single pipeline action. The same logic runs against the correct endpoints, credentials, and data for each environment automatically. Secrets rotate without redeployment. Platform updates are validated early. Emergency fixes have a clean path that preserves ongoing development work.</p>



<p class="wp-block-paragraph">The setup takes a few hours. The confidence it provides compounds every week the agent is in production.</p>



<p class="wp-block-paragraph">You&#8217;ll stop worrying about &#8220;did I break something?&#8221; and start focusing on &#8220;how can I make this better?&#8221; That&#8217;s the real value of a solid environment strategy.</p>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p class="wp-block-paragraph">The environment strategy for Copilot Studio isn&#8217;t about following a rigid template. It&#8217;s about creating a foundation that lets you build safely, test thoroughly, and deploy confidently. The Dev-Test-Prod pattern is your starting point. Add Preview and Prod-Aligned Dev as your needs grow.</p>



<p class="wp-block-paragraph">The key is to start early. Don&#8217;t wait until you&#8217;ve built five agents and realize you have no way to manage them. Set up your environments, create your solution, and build your first agent inside it. Make environment variables your default. Run evaluations before every deployment. Use the pipeline instead of manual exports.</p>



<p class="wp-block-paragraph">These habits become second nature quickly. And when you need to make that emergency fix or validate that a platform update won&#8217;t break anything, you&#8217;ll be grateful you did.</p>



<p class="wp-block-paragraph">If you&#8217;re building Copilot Studio agents for real users, this is the foundation you need. Everything else — advanced tools, complex orchestration, multi-channel deployment — builds on top of this.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How Generative AI Works Inside Copilot Studio (Explained for Non-Developers)</title>
		<link>https://powerplatformfaqs.com/how-generative-ai-works-inside-copilot-studio/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 18:28:50 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[How Generative AI Works Inside Copilot Studio]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1171</guid>

					<description><![CDATA[If you&#8217;ve heard the term &#8220;generative AI&#8221; thrown around a lot lately and you&#8217;re not quite sure what it actually means inside Microsoft Copilot Studio — you&#8217;re in the right place. I&#8217;m going to walk you through exactly how generative AI powers Copilot Studio agents, in plain English. No jargon, no fluff, and definitely no ... <a title="How Generative AI Works Inside Copilot Studio (Explained for Non-Developers)" class="read-more" href="https://powerplatformfaqs.com/how-generative-ai-works-inside-copilot-studio/" aria-label="Read more about How Generative AI Works Inside Copilot Studio (Explained for Non-Developers)">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you&#8217;ve heard the term &#8220;generative AI&#8221; thrown around a lot lately and you&#8217;re not quite sure what it actually means inside Microsoft Copilot Studio — you&#8217;re in the right place.</p>



<p class="wp-block-paragraph">I&#8217;m going to walk you through exactly how generative AI powers <a href="https://powerplatformfaqs.com/create-ai-agent-microsoft-copilot-studio/" target="_blank" rel="noreferrer noopener">Copilot Studio agents</a>, in plain English. No jargon, no fluff, and definitely no assumption that you have a developer background. Whether you&#8217;re an HR manager, a business analyst, a team lead, or just someone curious about what this whole AI agent thing is about, this tutorial is written for you.</p>



<p class="wp-block-paragraph">Let&#8217;s go.</p>



<h2 class="wp-block-heading">What Is Generative AI, Really?</h2>



<p class="wp-block-paragraph">Before we talk about Copilot Studio specifically, let me give you a quick, honest explanation of generative AI — because most articles either oversimplify it or make it sound more mysterious than it is.</p>



<p class="wp-block-paragraph">Generative AI is a type of artificial intelligence that can create new content — text, answers, summaries — based on what it has learned from massive amounts of data. Think of it like a very well-read colleague who has absorbed thousands of documents, FAQs, manuals, and articles. When you ask them a question, they don&#8217;t just look up a saved answer. They actually compose a response on the spot, based on what they know.</p>



<p class="wp-block-paragraph">That&#8217;s the key difference between old-school chatbots and generative AI.</p>



<p class="wp-block-paragraph"><strong>Old-style chatbot:</strong>&nbsp;You ask a question. It matches your question to a predefined answer from a list. If your phrasing doesn&#8217;t match exactly, it fails.</p>



<p class="wp-block-paragraph"><strong>Generative AI-powered agent:</strong>&nbsp;You ask a question. It understands the meaning behind your words and composes a fresh, relevant answer — even if it hasn&#8217;t seen that exact question before.</p>



<p class="wp-block-paragraph">Microsoft Copilot Studio uses generative AI (specifically <a href="https://powerplatformfaqs.com/ai-model-copilot-studio/" target="_blank" rel="noreferrer noopener">GPT models</a> from Azure OpenAI — the same technology behind ChatGPT and Bing) to make your agents smarter, more flexible, and much easier to build.</p>



<h2 class="wp-block-heading">What Is Copilot Studio, and Where Does AI Fit In?</h2>



<p class="wp-block-paragraph"><a href="https://powerplatformfaqs.com/copilot-studio-tutorials/" target="_blank" rel="noreferrer noopener">Microsoft Copilot Studio</a> is a low-code platform that lets you build AI agents — basically smart assistants that can answer questions, help users complete tasks, automate workflows, and integrate with your Microsoft 365 environment.</p>



<p class="wp-block-paragraph">Before generative AI came along, building one of these agents meant manually creating &#8220;topics&#8221; — conversation flows where you&#8217;d define every possible question and every possible answer. It was like writing a giant decision tree. Very tedious. Very limited.</p>



<p class="wp-block-paragraph">Now, with generative AI baked in, Copilot Studio can:</p>



<ul class="wp-block-list">
<li>Automatically answer questions from your company&#8217;s documents and websites — without you writing a single topic manually</li>



<li>Understand what a user is asking even when they phrase it in unexpected ways</li>



<li>Pick the right topic, action, or knowledge source based on context — automatically</li>



<li>Generate natural, conversational responses instead of robotic pre-written ones</li>
</ul>



<p class="wp-block-paragraph">This is a genuinely big shift. Let me break down exactly how it works inside the platform.</p>



<h2 class="wp-block-heading">The Four Pillars of Generative AI in Copilot Studio</h2>



<p class="wp-block-paragraph">There are four main ways generative AI appears in Copilot Studio. Understanding these four things will give you a solid mental model of how it all fits together.</p>



<h3 class="wp-block-heading">1. Generative Answers</h3>



<p class="wp-block-paragraph">This is the most commonly used generative AI feature, and it&#8217;s the one that surprises people most when they first see it in action.</p>



<p class="wp-block-paragraph">Here&#8217;s the idea: instead of manually writing topics for every possible question your users might ask, you connect your agent to a knowledge source — like your company&#8217;s SharePoint site, a public website, a PDF document, or a set of files. The agent then uses generative AI to read through that content and compose answers in real time.</p>



<p class="wp-block-paragraph"><strong>Example:</strong>&nbsp;Let&#8217;s say you&#8217;re building an HR bot for your company. You upload your company&#8217;s HR policy document (leave policy, expense claims, code of conduct) to the agent as a knowledge source. Now when an employee asks &#8220;How many days of sick leave do I get per year?&#8221;, the agent reads through that document, finds the relevant section, and generates a clear, conversational answer — without you ever writing that Q&amp;A pair manually.</p>



<p class="wp-block-paragraph">This is called&nbsp;<strong>Generative Answers</strong>&nbsp;in Copilot Studio. It&#8217;s what makes it possible to build a useful agent in hours, not weeks.</p>



<p class="wp-block-paragraph"><strong>Where it shows up:</strong> In the Topics section under System Topics, you&#8217;ll find a topic called <strong>Conversation Boosting</strong>. This is what handles generative answers. It triggers when the agent doesn&#8217;t recognize the user&#8217;s intent in any manually created topic. At that point, it reaches out to your knowledge sources and generates an answer on the fly.</p>



<p class="wp-block-paragraph">You can control this completely — you can turn it on or off, decide whether to use only your own data or also allow public AI knowledge, and set how strictly it moderates content.</p>



<h3 class="wp-block-heading">2. AI General Knowledge</h3>



<p class="wp-block-paragraph">This is a setting that lets your agent answer general questions using the AI&#8217;s broader training — even when the question isn&#8217;t related to any of your uploaded documents.</p>



<p class="wp-block-paragraph">Think of it this way: your knowledge sources are like your company&#8217;s internal library. AI General Knowledge is about letting the agent also draw on its understanding of the wider world.</p>



<p class="wp-block-paragraph"><strong>Example:</strong> A user asks your IT support agent, &#8220;What is a VPN?&#8221; — you probably haven&#8217;t uploaded a document explaining what a VPN is, but the AI already knows. If you have AI General Knowledge enabled, the agent will answer it.</p>



<p class="wp-block-paragraph">This is useful for internal-facing agents where users might ask both company-specific questions and general questions in the same conversation. Just be mindful — if you&#8217;re building an agent that should only answer from your own data (for compliance reasons, for example), you&#8217;d want to keep this turned off.</p>



<h3 class="wp-block-heading">3. Topic Authoring with AI</h3>



<p class="wp-block-paragraph">This one is a time-saver for anyone building agents, including non-developers.</p>



<p class="wp-block-paragraph">When you want to create a new conversation topic manually — say, a flow where the agent collects information, asks follow-up questions, and then takes an action — you no longer have to build each step node by node. Instead, you just describe what you want in plain English, and Copilot Studio&#8217;s AI generates the topic structure for you.</p>



<p class="wp-block-paragraph"><strong>Example:</strong>&nbsp;You type:&nbsp;<em>&#8220;Ask the user for their name and email address, confirm the details with them, and then say you&#8217;ll get back to them within 24 hours.&#8221;</em></p>



<p class="wp-block-paragraph">Copilot Studio will create a complete topic with message nodes, question nodes, and a confirmation message — all in a few seconds. You can then tweak it, add branching logic, or leave it as is.</p>



<p class="wp-block-paragraph">This doesn&#8217;t mean the AI does everything perfectly every time. You&#8217;ll still review and adjust things. But it cuts out the grunt work of building from scratch, especially for people who aren&#8217;t familiar with the node-based editor.</p>



<h3 class="wp-block-heading">4. Generative Orchestration</h3>



<p class="wp-block-paragraph">This is the most advanced of the four, and once you understand it, it completely changes how you think about building agents.</p>



<p class="wp-block-paragraph">In Classic mode (the older way), an agent would look at what the user says, match it to a trigger phrase, and run the corresponding topic. Simple enough — but limited. If a user&#8217;s message matched multiple intents at once, the agent would struggle.</p>



<p class="wp-block-paragraph"><strong>Generative Orchestration</strong> (also called Generative mode) flips this. Instead of using keyword matching, the agent uses AI to read the full context of a user&#8217;s question and then decide — at runtime — which topic, action, or knowledge source is the best match. It&#8217;s not looking for exact phrases. It&#8217;s understanding the meaning.</p>



<p class="wp-block-paragraph"><strong>Example:</strong>&nbsp;A user messages your HR agent:&nbsp;<em>&#8220;I want to apply for leave next week and also check my remaining balance.&#8221;</em>&nbsp;In classic mode, this might confuse the agent because it&#8217;s two intents in one message. In generative orchestration mode, the AI understands both intents and can handle them intelligently — either by running two separate topics in sequence or by pulling information from both the leave application flow and the balance knowledge source.</p>



<p class="wp-block-paragraph">To turn this on: go to&nbsp;<strong>Settings</strong>&nbsp;→&nbsp;<strong>Generative AI</strong>&nbsp;→ switch the mode from&nbsp;<strong>Classic</strong>&nbsp;to&nbsp;<strong>Generative</strong>.</p>



<h2 class="wp-block-heading">How the AI Actually &#8220;Reads&#8221; Your Documents</h2>



<p class="wp-block-paragraph">One question I get a lot is: &#8220;Does the AI memorize my documents?&#8221; The answer is: not exactly — and understanding this properly helps you set realistic expectations.</p>



<p class="wp-block-paragraph">When you add a knowledge source to your agent (such as a SharePoint site or a PDF), Copilot Studio doesn&#8217;t permanently store the entire document in the AI&#8217;s memory. Instead, it uses a technique called <strong>Retrieval Augmented Generation (RAG)</strong>.</p>



<p class="wp-block-paragraph">Here&#8217;s how RAG works in simple terms:</p>



<ol class="wp-block-list">
<li>A user asks your agent a question</li>



<li>The agent searches your connected knowledge sources to find the most relevant sections</li>



<li>Those relevant chunks of content are then passed to the AI model as context</li>



<li>The AI reads that context and generates a natural language answer based on it</li>
</ol>



<p class="wp-block-paragraph">So the AI isn&#8217;t &#8220;remembering&#8221; your document. It&#8217;s reading relevant parts of it in real time, every single time a question is asked, and composing an answer based on what it finds.</p>



<p class="wp-block-paragraph">This is why the quality of your knowledge sources matters a lot. If your document is well-organized, clearly written, and up to date, the agent will give great answers. If the document is full of scanned images, tables that don&#8217;t paste well, or outdated information, the agent will struggle.</p>



<p class="wp-block-paragraph"><strong>Practical tip:</strong>&nbsp;Use clean, text-based documents. Break information into clear sections with headings. Avoid embedding important information only in images or charts.</p>



<h2 class="wp-block-heading">Knowledge Sources You Can Connect</h2>



<p class="wp-block-paragraph">One of the things that makes Copilot Studio genuinely useful for businesses is the range of sources you can connect. You&#8217;re not limited to uploading PDFs. Here&#8217;s what&#8217;s supported:</p>



<ul class="wp-block-list">
<li><strong>Public websites</strong>&nbsp;— paste a URL and the agent will crawl and index it</li>



<li><strong>SharePoint sites and documents</strong>&nbsp;— perfect for internal knowledge bases</li>



<li><strong>Uploaded files</strong>&nbsp;— Word documents, PDFs, text files</li>



<li><strong>Dataverse</strong>&nbsp;— great if you&#8217;re using Dynamics 365 or custom data models</li>



<li><strong>Custom connectors</strong>&nbsp;— for advanced scenarios, pull data from external APIs</li>
</ul>



<p class="wp-block-paragraph">You can have multiple knowledge sources active at the same time. The agent will search across all of them and pull the most relevant content to answer each query.</p>



<p class="wp-block-paragraph">When both your private knowledge sources and AI General Knowledge are enabled, the agent prioritizes your own data first. If it doesn&#8217;t find a relevant answer there, it falls back on the AI&#8217;s general knowledge. You control this priority.</p>



<h2 class="wp-block-heading">The Conversation Boosting Topic — What It Is and Why It Matters</h2>



<p class="wp-block-paragraph">Let me spend a moment on this because it confuses a lot of people.</p>



<p class="wp-block-paragraph">When you look at your Topics list in Copilot Studio and click on&nbsp;<strong>System</strong>&nbsp;topics, you&#8217;ll see one called&nbsp;<strong>Conversation Boosting</strong>. This is the system topic that handles generative answers.</p>



<p class="wp-block-paragraph">The trigger condition is:&nbsp;<strong>On unknown intent</strong>&nbsp;— meaning, whenever the agent receives a message that doesn&#8217;t match any manually created topic, this system topic kicks in.</p>



<p class="wp-block-paragraph"><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Within this topic, there&#8217;s a special node called <strong>&#8220;Create Generative Answers&#8221;</strong></span>. This node is what connects to your knowledge sources and generates the AI response.</p>



<p class="wp-block-paragraph">Inside the data source configuration of this node, you have two choices:</p>



<ol class="wp-block-list">
<li><strong>Search from connected knowledge sources</strong>&nbsp;— this uses your own uploaded content</li>



<li><strong>Allow AI to use its general knowledge</strong>&nbsp;— this opens up the broader AI training</li>
</ol>



<p class="wp-block-paragraph">You can choose one or both. If you choose both, the agent searches your knowledge first. This is the right setup for most business scenarios.</p>



<p class="wp-block-paragraph">Why does this matter? Because it gives you control. You&#8217;re not just flipping an AI switch and hoping for the best. You decide exactly what the agent is allowed to draw from.</p>



<h2 class="wp-block-heading">Setting Up Generative Answers — Step by Step</h2>



<p class="wp-block-paragraph">Let me walk you through how to actually enable and configure generative answers in Copilot Studio, even if you&#8217;ve never opened the tool before.</p>



<p class="wp-block-paragraph"><strong>Step 1: Create or open your agent</strong><br>Go to copilotstudio.microsoft.com and either create a new agent or open an existing one.</p>



<p class="wp-block-paragraph"><strong>Step 2: Add a knowledge source</strong><br>In the left navigation, click on&nbsp;<strong>Knowledge</strong>. Then click&nbsp;<strong>+ Add knowledge</strong>&nbsp;and choose your source type — website URL, SharePoint, files, or Dataverse. Follow the prompts to connect it.</p>



<p class="wp-block-paragraph"><strong>Step 3: Enable generative answers mode</strong><br>Go to&nbsp;<strong>Settings</strong>&nbsp;→&nbsp;<strong>Generative AI</strong>. Here you can switch between Classic and Generative mode. For a beginner setup, keeping it on the default settings works fine. For more control, switch to Generative mode.</p>



<p class="wp-block-paragraph"><strong>Step 4: Check your Conversation Boosting topic</strong><br>In the Topics section, click&nbsp;<strong>System</strong>&nbsp;and open&nbsp;<strong>Conversation Boosting</strong>. Make sure it&#8217;s turned on. Click the&nbsp;<strong>Edit</strong>&nbsp;option inside the Create Generative Answers node and confirm your data source settings match what you want.</p>



<p class="wp-block-paragraph"><strong>Step 5: Test it</strong><br>Click the&nbsp;<strong>Test</strong>&nbsp;button (usually a chat icon in the top right). Ask a question that should be answered from your knowledge source. See what happens. If the answer isn&#8217;t quite right, check if the document has the relevant content in a clear, readable format.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-Generative-AI-Works-Inside-Copilot-Studio-1024x576.jpg" alt="How Generative AI Works Inside Copilot Studio" class="wp-image-1239" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-Generative-AI-Works-Inside-Copilot-Studio-1024x576.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-Generative-AI-Works-Inside-Copilot-Studio-300x169.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-Generative-AI-Works-Inside-Copilot-Studio-768x432.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-Generative-AI-Works-Inside-Copilot-Studio.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">What Makes a Good Generative AI Response vs. a Bad One</h2>



<p class="wp-block-paragraph">Once you&#8217;ve set everything up, you&#8217;ll notice some answers are great, and some are not so great. Here&#8217;s what makes the difference.</p>



<p class="wp-block-paragraph"><strong>Things that lead to good answers:</strong></p>



<ul class="wp-block-list">
<li>Your knowledge source has clear, well-written content that directly addresses common questions</li>



<li>You&#8217;ve connected the right documents — not just anything, but the content that&#8217;s actually relevant to what users will ask</li>



<li>You&#8217;ve tested with realistic questions, not just obvious ones</li>



<li>Topic descriptions are clear and specific (for generative orchestration to work well)</li>
</ul>



<p class="wp-block-paragraph"><strong>Things that lead to poor answers:</strong></p>



<ul class="wp-block-list">
<li>Documents with scanned text that wasn&#8217;t OCR-processed properly</li>



<li>Outdated content that contradicts itself</li>



<li>Knowledge sources that are too broad or unrelated to the agent&#8217;s purpose</li>



<li>Over-relying on AI General Knowledge when you actually need your own data to take priority</li>
</ul>



<p class="wp-block-paragraph">One thing I always tell clients: garbage in, garbage out. The AI is genuinely good at synthesizing and presenting information — but it can only work with what you give it.</p>



<h2 class="wp-block-heading">Responsible AI — What Guardrails Does Microsoft Put In?</h2>



<p class="wp-block-paragraph">This is a question that comes up often, especially from compliance teams and management.</p>



<p class="wp-block-paragraph">Microsoft has built responsible AI principles into Copilot Studio. Here&#8217;s what that looks like practically:</p>



<ul class="wp-block-list">
<li><strong>Content moderation:</strong>&nbsp;You can set how strictly the AI screens responses. There are options ranging from low to high moderation. High moderation will refuse to generate anything that looks potentially harmful, offensive, or inappropriate — even if the question itself seems innocent.</li>



<li><strong>Grounding:</strong>&nbsp;When using your knowledge sources, the agent is grounded to your content. It won&#8217;t make up facts that aren&#8217;t in your documents. If it can&#8217;t find an answer, it should tell the user it doesn&#8217;t know — rather than inventing something.</li>



<li><strong>Transparency:</strong> Microsoft is transparent about the fact that these agents are AI-powered. You can configure your agent to say it&#8217;s an AI when asked.</li>



<li><strong>Data privacy:</strong>&nbsp;Your internal documents connected via SharePoint or file upload are not used to train the AI model. They&#8217;re used only to answer questions for your users, within your tenant.</li>
</ul>



<p class="wp-block-paragraph">That last point matters a lot for organizations concerned about data leakage. Your company&#8217;s HR policy isn&#8217;t being sent to OpenAI to improve future models. It stays within your Microsoft 365 environment.</p>



<h2 class="wp-block-heading">Real-World Scenarios Where This Shines</h2>



<p class="wp-block-paragraph">Let me give you some concrete examples of where generative AI in Copilot Studio actually delivers value:</p>



<p class="wp-block-paragraph"><strong>HR Self-Service Agent</strong><br>Upload your HR policy documents. Let employees ask questions about leave balance, expense processes, holiday schedules, and onboarding steps — all answered automatically from your official documents.</p>



<p class="wp-block-paragraph"><strong>IT Helpdesk Agent</strong><br>Connect your IT knowledge base articles. Users can troubleshoot common issues like password resets, VPN problems, and software installation — without raising a ticket or waiting for a human.</p>



<p class="wp-block-paragraph"><strong>Customer Support Agent (External)</strong><br>Connect your product documentation, FAQs, and pricing pages. Customers visiting your website get instant answers without waiting for a support agent.</p>



<p class="wp-block-paragraph"><strong>Procurement &amp; Vendor Queries (Internal)</strong><br>Connect your vendor contracts, procurement policies, and supplier lists. Employees can ask about approval thresholds, preferred vendors, and ordering processes without emailing the procurement team.</p>



<p class="wp-block-paragraph">In all of these cases, you haven&#8217;t written a single Q&amp;A pair manually. The agent figures out the answers from your connected content, powered by generative AI.</p>



<h2 class="wp-block-heading">Common Misconceptions I Keep Hearing</h2>



<p class="wp-block-paragraph">Before I wrap up, let me quickly address the things I hear most often that aren&#8217;t quite right.</p>



<p class="wp-block-paragraph"><strong>&#8220;The AI will give wrong answers and embarrass us.&#8221;</strong><br>This is a valid concern, but it&#8217;s manageable. If your knowledge sources are accurate and your content moderation is set properly, the agent is actually quite reliable. Always test before going live, and start with a narrower scope.</p>



<p class="wp-block-paragraph"><strong>&#8220;We need a developer to set this up.&#8221;</strong><br>Not anymore. Copilot Studio is genuinely low-code. If you can navigate Microsoft Teams and SharePoint, you can build a basic generative AI agent yourself. You might need a developer for advanced integrations — like custom connectors to external APIs — but for most business use cases, no coding is needed.</p>



<p class="wp-block-paragraph"><strong>&#8220;Once we set it up, it runs forever without maintenance.&#8221;</strong><br>Not quite. If your underlying documents change, your agent&#8217;s answers will change too — or become outdated if you don&#8217;t refresh the knowledge sources. Plan for regular reviews of your connected content.</p>



<p class="wp-block-paragraph"><strong>&#8220;The AI is reading everything in real time from the live document.&#8221;</strong><br>Depends on the source type. Some sources are indexed periodically (not always live), so there can be a lag between updating a document and the agent reflecting that update. Check the indexing schedule for your specific source type.</p>



<h2 class="wp-block-heading">Quick Recap: The Key Things to Remember</h2>



<ul class="wp-block-list">
<li>Generative AI in Copilot Studio uses GPT models (Azure OpenAI) to generate natural language answers</li>



<li><strong>Generative Answers</strong>&nbsp;lets your agent answer questions from your own documents and websites — no manual topic authoring needed</li>



<li><strong>Conversation Boosting</strong>&nbsp;is the system topic that controls when and how generative answers are triggered</li>



<li><strong>Generative Orchestration</strong>&nbsp;(Generative mode) makes the agent smarter about choosing which topic or knowledge source to use at runtime</li>



<li><strong>RAG (Retrieval Augmented Generation)</strong>&nbsp;is the technique used — the agent retrieves relevant content from your sources, then generates an answer based on it</li>



<li>Your data stays in your tenant and isn&#8217;t used to train the AI model</li>



<li>The quality of your knowledge sources directly determines the quality of your agent&#8217;s answers</li>
</ul>



<p class="wp-block-paragraph">If you&#8217;re just getting started, my suggestion is simple: pick one use case (like an HR FAQ bot), upload one clean document as your knowledge source, enable Conversation Boosting, and test it. You&#8217;ll understand 80% of how generative AI works in Copilot Studio just from doing that one exercise.</p>



<p class="wp-block-paragraph">It&#8217;s more approachable than it sounds. Give it a go.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Create Your First AI Agent in Microsoft Copilot Studio: Step‑by‑Step Guide</title>
		<link>https://powerplatformfaqs.com/create-ai-agent-microsoft-copilot-studio/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 18:03:45 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[Create Your First AI Agent in Microsoft Copilot Studio]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1175</guid>

					<description><![CDATA[If you are getting started with Microsoft Copilot Studio and want to build your first AI agent without any coding, this tutorial is for you. In this step‑by‑step guide, you will create a simple question‑and‑answer agent, test it inside Copilot Studio, and then publish it to a demo website so others can try it. This ... <a title="How to Create Your First AI Agent in Microsoft Copilot Studio: Step‑by‑Step Guide" class="read-more" href="https://powerplatformfaqs.com/create-ai-agent-microsoft-copilot-studio/" aria-label="Read more about How to Create Your First AI Agent in Microsoft Copilot Studio: Step‑by‑Step Guide">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you are getting started with <a href="https://powerplatformfaqs.com/copilot-studio-tutorials/" target="_blank" rel="noreferrer noopener">Microsoft Copilot Studio</a> and want to build your first AI agent without any coding, this tutorial is for you. In this step‑by‑step guide, you will create a simple question‑and‑answer agent, test it inside Copilot Studio, and then publish it to a demo website so others can try it.</p>



<p class="wp-block-paragraph">This is a great foundation before you move into more advanced topics like integrating with Power Automate, Dataverse, or SharePoint.</p>



<h2 class="wp-block-heading">What you will build and prerequisites</h2>



<p class="wp-block-paragraph">In this tutorial, you will:</p>



<ul class="wp-block-list">
<li>Create a new Copilot Studio agent from scratch.</li>



<li>Configure a basic persona and instructions so the agent behaves like an HR assistant.</li>



<li>Add a knowledge source for your agent.</li>



<li>Test the agent in the built‑in test pane.</li>



<li>Publish the agent to a public demo website.</li>
</ul>



<p class="wp-block-paragraph">Before you begin, make sure you have:</p>



<ul class="wp-block-list">
<li>A Microsoft 365 tenant with Copilot Studio available or a trial enabled.</li>



<li>The correct license and permission to create agents in your environment.</li>



<li>Access to at least one environment (for example: Dev, Test, or Default).</li>
</ul>



<p class="wp-block-paragraph">If you already work with Power Apps or Power Automate, you will feel at home in the interface.</p>



<h2 class="wp-block-heading">Step 1: Open Copilot Studio and choose the right environment</h2>



<p class="wp-block-paragraph">First, sign in to Microsoft 365 and open Copilot Studio (https://copilotstudio.microsoft.com/) from the app launcher or via the direct URL provided by your admin.</p>



<p class="wp-block-paragraph">At the top of the Copilot Studio home page, you will see an environment selector. This works just like environments in Power Apps and Power Automate. If you have multiple environments, choose a Dev or Sandbox environment for experimentation. This keeps your test agents separate from production workloads.</p>



<p class="wp-block-paragraph">If you only see a single “Default” environment, that is fine for learning and testing.</p>



<p class="wp-block-paragraph">Here is a screenshot showing that I chose one development environment.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="600" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-Agent-in-Microsoft-Copilot-Studio-1024x600.jpg" alt="Create Your First Agent in Microsoft Copilot Studio" class="wp-image-1210" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-Agent-in-Microsoft-Copilot-Studio-1024x600.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-Agent-in-Microsoft-Copilot-Studio-300x176.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-Agent-in-Microsoft-Copilot-Studio-768x450.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-Agent-in-Microsoft-Copilot-Studio.jpg 1356w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">Step 2: Create a new Copilot Studio agent</h2>



<p class="wp-block-paragraph">On the Copilot Studio home page, click the button to create a&nbsp;<strong>New agent</strong>. You can see the screenshot below of how the recent Copilot Studio home page looks. Choose Agent and then click on Agent from the &#8220;Start building from scratch&#8221; option.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="598" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-create-first-agent-1024x598.jpg" alt="Copilot Studio create first agent" class="wp-image-1211" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-create-first-agent-1024x598.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-create-first-agent-300x175.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-create-first-agent-768x448.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-create-first-agent.jpg 1237w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">You will see a simple wizard:</p>



<ol class="wp-block-list">
<li><strong>Name</strong>&nbsp;– Give your agent a meaningful name, for example:&nbsp;<code>HR FAQ Agent</code>.</li>



<li><strong>Description</strong>&nbsp;– Describe what this agent does, such as “Answers common HR and leave policy questions for employees”.</li>



<li><strong>Language</strong>&nbsp;– Choose the primary language for the conversations (for example, English).</li>



<li><strong>Region or environment settings</strong>&nbsp;– Keep the default for now unless your organization has specific requirements.</li>
</ol>



<p class="wp-block-paragraph">After you confirm, Copilot Studio will create the agent with some default system topics and capabilities. These built‑in topics handle basic greetings, conversation endings, and fallback behavior.</p>



<p class="wp-block-paragraph">You can see the screenshot below for your reference. Here, the agent&#8217;s name is important.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="759" height="622" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-agent.jpg" alt="microsoft copilot studio create agent" class="wp-image-1212" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-agent.jpg 759w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-agent-300x246.jpg 300w" sizes="(max-width: 759px) 100vw, 759px" /></figure>
</div>


<p class="wp-block-paragraph">This might take a few seconds to be ready. Wait, till you get a confirmation message like &#8220;Your agent has been provisioned&#8221;. Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="429" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-chatbot-1024x429.jpg" alt="microsoft copilot studio create chatbot" class="wp-image-1213" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-chatbot-1024x429.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-chatbot-300x126.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-chatbot-768x322.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/microsoft-copilot-studio-create-chatbot.jpg 1185w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">You will customize the agent in the next steps.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/copilot-studio-token-usage/">How to Monitor Token Usage by AI Model in Copilot Studio</a></p>



<h2 class="wp-block-heading">Step 3: Update Agent details</h2>



<p class="wp-block-paragraph">In the <strong>Details</strong> section, you can customize the basic information for your agent:</p>



<ol class="wp-block-list">
<li>Change the <strong>Agent name</strong>.</li>



<li>Upload or replace the <strong>Agent icon</strong>.</li>



<li>Provide or update the <strong>Agent description</strong>.</li>
</ol>



<p class="wp-block-paragraph">Configure these settings as shown in the screenshot below.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="415" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-your-first-AI-agent-in-Copilot-Studio-1024x415.jpg" alt="Create your first AI agent in Copilot Studio" class="wp-image-1216" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-your-first-AI-agent-in-Copilot-Studio-1024x415.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-your-first-AI-agent-in-Copilot-Studio-300x122.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-your-first-AI-agent-in-Copilot-Studio-768x311.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-your-first-AI-agent-in-Copilot-Studio.jpg 1059w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">Step 4: Select your Agent&#8217;s model</h2>



<p class="wp-block-paragraph">In the <strong>Model</strong> section, <a href="https://powerplatformfaqs.com/ai-model-copilot-studio/" target="_blank" rel="noreferrer noopener">choose the AI model</a> that your agent will use to understand user requests, generate responses, and perform reasoning tasks.</p>



<p class="wp-block-paragraph">As shown in the screenshot below, Copilot Studio provides access to multiple AI models from different providers, including OpenAI and Anthropic. You can select the model that best matches your business requirements and use case.</p>



<p class="wp-block-paragraph"><strong>Some available options include:</strong></p>



<ul class="wp-block-list">
<li><strong>GPT-5 Chat</strong> – Optimized for general-purpose conversations and everyday tasks.</li>



<li><strong>GPT-5 Auto</strong> – Automatically switches between chat and reasoning capabilities as needed.</li>



<li><strong>GPT-5 Reasoning</strong> – Designed for complex problem-solving and advanced reasoning scenarios.</li>



<li><strong>GPT-5.3 Chat</strong> – Suitable for general chat-based interactions.</li>



<li><strong>GPT-4.1</strong> – Provides fast responses and efficient analysis.</li>



<li><strong>Claude Sonnet 4.5 / 4.6</strong> – Well-suited for content creation, question answering, and general business tasks.</li>



<li><strong>Claude Opus 4.6 / 4.7 / 4.8</strong> – Intended for deep reasoning, complex workflows, and structured problem-solving.</li>
</ul>



<p class="wp-block-paragraph">Here is a screenshot for your reference. I chose the Claude Sonnet 4.6.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="759" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-AI-Agent-in-Microsoft-Copilot-Studio-1024x759.jpg" alt="Create Your First AI Agent in Microsoft Copilot Studio" class="wp-image-1217" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-AI-Agent-in-Microsoft-Copilot-Studio-1024x759.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-AI-Agent-in-Microsoft-Copilot-Studio-300x222.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-AI-Agent-in-Microsoft-Copilot-Studio-768x569.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-Your-First-AI-Agent-in-Microsoft-Copilot-Studio.jpg 1082w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Note:</strong> The models available in your environment may vary depending on your organization&#8217;s licensing, region, and administrator settings. Select the model that best aligns with your agent&#8217;s expected workload and performance requirements, as shown in the screenshot below.</p>
</blockquote>



<h2 class="wp-block-heading">Step 5: Configure the agent’s persona and instructions</h2>



<p class="wp-block-paragraph">Every good agent needs a clear role and tone. In Copilot Studio, this is controlled by the&nbsp;<strong>instructions</strong>&nbsp;(similar to a system prompt).</p>



<p class="wp-block-paragraph">In the Instructions section, click on the Edit icon and describe what the agent should do and how it should behave.</p>



<p class="wp-block-paragraph">Add something like this (you can rewrite in your own words):</p>



<ul class="wp-block-list">
<li>“You are an HR assistant for Contoso. You help employees with general HR and leave policy questions. Use a friendly and professional tone. Keep answers short and clear.”</li>
</ul>



<p class="wp-block-paragraph">Then add a few simple boundaries:</p>



<ul class="wp-block-list">
<li>“If a user asks about technical support, politely tell them you only handle HR questions.”</li>



<li>“If you are not sure about an answer, ask the user to contact the HR team via email.”</li>
</ul>



<p class="wp-block-paragraph">It should look like the screenshot below.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="286" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Agent-from-Scratch-using-copilot-studio-1024x286.jpg" alt="Build Your First Agent from Scratch using copilot studio" class="wp-image-1219" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Agent-from-Scratch-using-copilot-studio-1024x286.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Agent-from-Scratch-using-copilot-studio-300x84.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Agent-from-Scratch-using-copilot-studio-768x215.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Agent-from-Scratch-using-copilot-studio.jpg 1044w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">These instructions help shape the agent’s personality and provide basic guardrails. You can refine them later once you observe real conversations.</p>



<h2 class="wp-block-heading">Step 6: Add a Knowledge Source to Your Agent</h2>



<p class="wp-block-paragraph">Knowledge sources help your agent provide accurate, context-aware responses by grounding answers in your organization&#8217;s content. In this example, a PDF document stored on the local computer is uploaded and used as the agent&#8217;s knowledge source.</p>



<p class="wp-block-paragraph"><strong>Step 1: Open the Add Knowledge Dialog</strong></p>



<p class="wp-block-paragraph">Click <strong>Add knowledge</strong> from the <strong>Knowledge</strong> section of the agent.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="375" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-a-conversational-AI-agent-in-Copilot-Studio-1024x375.jpg" alt="Create a conversational AI agent in Copilot Studio" class="wp-image-1225" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-a-conversational-AI-agent-in-Copilot-Studio-1024x375.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-a-conversational-AI-agent-in-Copilot-Studio-300x110.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-a-conversational-AI-agent-in-Copilot-Studio-768x281.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Create-a-conversational-AI-agent-in-Copilot-Studio.jpg 1036w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">As shown in the screenshot below, Copilot Studio provides multiple knowledge source options, including:</p>



<ul class="wp-block-list">
<li>Upload a file from your local device</li>



<li>OneDrive</li>



<li>SharePoint</li>



<li>Public websites</li>



<li>Azure AI Search</li>



<li>Dataverse</li>



<li>Dynamics 365</li>



<li>Salesforce</li>



<li>ServiceNow</li>



<li>Azure SQL</li>
</ul>



<p class="wp-block-paragraph">Since the knowledge source is stored locally, select <strong>Upload file</strong> and browse to the PDF document.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="600" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/build-a-custom-copilot-in-Copilot-Studio-1024x600.jpg" alt="build a custom copilot in Copilot Studio" class="wp-image-1226" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/build-a-custom-copilot-in-Copilot-Studio-1024x600.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/build-a-custom-copilot-in-Copilot-Studio-300x176.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/build-a-custom-copilot-in-Copilot-Studio-768x450.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/build-a-custom-copilot-in-Copilot-Studio.jpg 1262w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Step 2: Upload the PDF Document</strong></p>



<p class="wp-block-paragraph">After selecting the file, Copilot Studio displays the uploaded document in the file list.</p>



<p class="wp-block-paragraph">In this example, the <strong>Employee HR Policy Handbook.pdf</strong> file has been uploaded successfully and is ready to be added to the agent.</p>



<p class="wp-block-paragraph">To continue, click <strong>Add to agent</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Note:</strong> Copilot Studio currently supports text-based files. The uploaded content is processed and indexed so the agent can use it when generating responses.</p>
</blockquote>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="716" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-an-AI-chatbot-using-Microsoft-Copilot-Studio-1024x716.jpg" alt="Build an AI chatbot using Microsoft Copilot Studio" class="wp-image-1227" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-an-AI-chatbot-using-Microsoft-Copilot-Studio-1024x716.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-an-AI-chatbot-using-Microsoft-Copilot-Studio-300x210.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-an-AI-chatbot-using-Microsoft-Copilot-Studio-768x537.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-an-AI-chatbot-using-Microsoft-Copilot-Studio.jpg 1294w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Step 3: Verify the Knowledge Source</strong></p>



<p class="wp-block-paragraph">Once the upload is complete, the document appears in the <strong>Knowledge</strong> section of the agent.</p>



<p class="wp-block-paragraph">A <strong>Ready</strong> status indicates that the file has been successfully processed and is available for the agent to use when answering user questions.</p>



<p class="wp-block-paragraph">In this example, the <strong>Employee HR Policy Handbook.pdf</strong> document is now connected to the agent and can be used to answer HR-related queries based on the information contained in the handbook.</p>



<p class="wp-block-paragraph"><strong>Step 4: Disable Web Search</strong></p>



<p class="wp-block-paragraph">By default, you can optionally enable <strong>Web Search</strong> to allow the agent to retrieve information from public websites.</p>



<p class="wp-block-paragraph">For this HR policy agent, Web Search has been <strong>disabled</strong>, as shown in the screenshot below.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="321" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Conversational-AI-Agent-Using-Microsoft-Copilot-Studio-1024x321.jpg" alt="Build Your First Conversational AI Agent Using Microsoft Copilot Studio" class="wp-image-1224" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Conversational-AI-Agent-Using-Microsoft-Copilot-Studio-1024x321.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Conversational-AI-Agent-Using-Microsoft-Copilot-Studio-300x94.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Conversational-AI-Agent-Using-Microsoft-Copilot-Studio-768x241.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Build-Your-First-Conversational-AI-Agent-Using-Microsoft-Copilot-Studio.jpg 1037w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Disabling Web Search ensures that:</p>



<ul class="wp-block-list">
<li>Responses are based only on approved internal knowledge sources.</li>



<li>The agent does not pull information from external websites.</li>



<li>Users receive answers that are consistent with organizational policies and documentation.</li>



<li>The risk of providing conflicting or outdated public information is reduced.</li>
</ul>



<p class="wp-block-paragraph">This approach is recommended for scenarios involving internal policies, employee handbooks, compliance documents, standard operating procedures (SOPs), and other organization-specific content.</p>



<h2 class="wp-block-heading">Step 7: Test your agent in the Test pane</h2>



<p class="wp-block-paragraph">Before publishing, always test the agent inside Copilot Studio.</p>



<p class="wp-block-paragraph">Before testing your agent with a new query, start a fresh test session to clear the existing conversation context. This ensures that the agent responds as if it is interacting with a new user and prevents previous messages from influencing the results.</p>



<ol class="wp-block-list">
<li>Open the <strong>Test your agent</strong> pane by clicking the <strong>Test</strong> button in the upper-right corner.</li>



<li>In the test pane toolbar, click the <strong>Start new test session</strong> icon (highlighted in the screenshot below).</li>



<li>A new conversation session will begin, and the agent will be ready to receive a fresh query.</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="664" height="853" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Step-by-step-guide-to-creating-a-Copilot-Studio-agent.jpg" alt="Step-by-step guide to creating a Copilot Studio agent" class="wp-image-1228" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Step-by-step-guide-to-creating-a-Copilot-Studio-agent.jpg 664w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Step-by-step-guide-to-creating-a-Copilot-Studio-agent-234x300.jpg 234w" sizes="(max-width: 664px) 100vw, 664px" /></figure>
</div>


<p class="wp-block-paragraph">This is especially useful when validating new topics, testing agent changes, or troubleshooting responses after making updates to your Copilot Studio agent.</p>



<p class="wp-block-paragraph">After starting a new test session, enter a question in the test pane to verify how your agent responds using the configured knowledge sources.</p>



<p class="wp-block-paragraph">In this example, the user asks:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>&#8220;Explain me about the leave policy&#8221;</strong></p>
</blockquote>



<p class="wp-block-paragraph">The agent searches the connected knowledge source and generates a response based on the information it finds.</p>



<p class="wp-block-paragraph">You can see the exact response in the screenshot below:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="598" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-agent-creation-1024x598.jpg" alt="Copilot Studio agent creation" class="wp-image-1229" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-agent-creation-1024x598.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-agent-creation-300x175.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-agent-creation-768x448.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Copilot-Studio-agent-creation.jpg 1304w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>What to Review in the Test Panel</strong></p>



<p class="wp-block-paragraph"><strong>1. Search Sources Activity</strong></p>



<ul class="wp-block-list">
<li>The <strong>Search sources</strong> activity shows that the agent successfully searched the configured knowledge source.</li>



<li>The <strong>Completed</strong> status indicates that the search operation finished successfully.</li>
</ul>



<p class="wp-block-paragraph"><strong>2. Referenced Sources</strong></p>



<ul class="wp-block-list">
<li>Under <strong>Referenced sources</strong>, you can see the document that was used to generate the response.</li>



<li>In this example, the agent retrieved information from:
<ul class="wp-block-list">
<li><strong>Employee HR Policy Handbook.pdf</strong></li>
</ul>
</li>



<li>The source preview helps you verify exactly where the answer originated.</li>
</ul>



<p class="wp-block-paragraph"><strong>3. Agent Response</strong></p>



<ul class="wp-block-list">
<li>The response generated by the agent appears in the conversation pane.</li>



<li>Here, the agent summarizes the leave policy and displays details such as:
<ul class="wp-block-list">
<li>Annual Leave entitlement</li>



<li>Sick Leave entitlement</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><strong>4. Validate Response Accuracy</strong></p>



<ul class="wp-block-list">
<li>Compare the generated answer with the referenced document to ensure the information is accurate.</li>



<li>This helps confirm that the knowledge source is properly indexed and that the agent is retrieving the correct content.</li>
</ul>



<p class="wp-block-paragraph"><strong>Why This Is Important</strong></p>



<p class="wp-block-paragraph">Reviewing the <strong>Search sources</strong> details is one of the most effective ways to troubleshoot and validate your Copilot Studio agent. It allows you to:</p>



<ul class="wp-block-list">
<li>Verify that the correct knowledge source is being used.</li>



<li>Understand how the agent generated its answer.</li>



<li>Identify missing or incorrect information in your knowledge base.</li>



<li>Improve the quality and reliability of responses before publishing the agent to users.</li>
</ul>



<h2 class="wp-block-heading">Step 8: Publish the agent to a demo website</h2>



<p class="wp-block-paragraph">Once you are happy with the basic behavior, you can publish the agent so others can try it.</p>



<ul class="wp-block-list">
<li><strong>Publish the Agent</strong></li>
</ul>



<p class="wp-block-paragraph">Once you have finished testing your agent, click the <strong>Publish</strong> button from the top navigation bar like in the screenshot below:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="658" height="204" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/What-is-an-agent-in-Microsoft-Copilot-Studio.jpg" alt="What is an agent in Microsoft Copilot Studio" class="wp-image-1230" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/What-is-an-agent-in-Microsoft-Copilot-Studio.jpg 658w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/What-is-an-agent-in-Microsoft-Copilot-Studio-300x93.jpg 300w" sizes="(max-width: 658px) 100vw, 658px" /></figure>
</div>


<p class="wp-block-paragraph">This opens the <strong>Publish this agent</strong> dialog, where you can make the latest version of your agent available to users.</p>



<ul class="wp-block-list">
<li><strong>Publish the Latest Version</strong></li>
</ul>



<p class="wp-block-paragraph">In the <strong>Publish this agent</strong> dialog:</p>



<ol class="wp-block-list">
<li>Select the <strong>Force newest version</strong> option.</li>



<li>Click <strong>Publish</strong>.</li>
</ol>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="762" height="419" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-do-I-create-my-first-agent-in-Copilot-Studio.jpg" alt="How do I create my first agent in Copilot Studio" class="wp-image-1231" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-do-I-create-my-first-agent-in-Copilot-Studio.jpg 762w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-do-I-create-my-first-agent-in-Copilot-Studio-300x165.jpg 300w" sizes="(max-width: 762px) 100vw, 762px" /></figure>
</div>


<p class="wp-block-paragraph">This ensures users receive the most recent version of the agent and any updates you have made.</p>



<ul class="wp-block-list">
<li><strong>Open the Channels Page</strong></li>
</ul>



<p class="wp-block-paragraph">After the publishing process completes:</p>



<ol class="wp-block-list">
<li>Navigate to the <strong>Channels</strong> tab.</li>



<li>If you see a message indicating that only Microsoft channels are available, your agent is currently using Microsoft authentication.</li>
</ol>



<p class="wp-block-paragraph">Here is how it appears:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="308" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Is-Microsoft-Copilot-Studio-free-to-use-1024x308.jpg" alt="Is Microsoft Copilot Studio free to use" class="wp-image-1232" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Is-Microsoft-Copilot-Studio-free-to-use-1024x308.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Is-Microsoft-Copilot-Studio-free-to-use-300x90.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Is-Microsoft-Copilot-Studio-free-to-use-768x231.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Is-Microsoft-Copilot-Studio-free-to-use.jpg 1202w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">To publish the agent to a public demo website, you need to change the authentication settings.</p>



<ul class="wp-block-list">
<li><strong>Change Authentication Settings</strong></li>
</ul>



<ol class="wp-block-list">
<li>Click <strong>Settings</strong> in the top menu.</li>



<li>Select <strong>Security</strong> from the left navigation.</li>



<li>Under <strong>Authentication</strong>, choose <strong>No authentication</strong>.</li>



<li>Click <strong>Save</strong>.</li>
</ol>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="514" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-build-an-AI-chatbot-without-coding-1024x514.jpg" alt="How to build an AI chatbot without coding" class="wp-image-1233" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-build-an-AI-chatbot-without-coding-1024x514.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-build-an-AI-chatbot-without-coding-300x151.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-build-an-AI-chatbot-without-coding-768x385.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-build-an-AI-chatbot-without-coding.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">This allows the agent to be shared through public channels, including the Demo Website channel.</p>



<ul class="wp-block-list">
<li><strong>Open the Demo Website Channel</strong></li>
</ul>



<ol class="wp-block-list">
<li>Return to the <strong>Channels</strong> page.</li>



<li>Open the <strong>Demo Website</strong> channel.</li>



<li>Configure the following information:
<ul class="wp-block-list">
<li><strong>Welcome message</strong> (for example, <em>I am your HR FAQ Agent</em>)</li>



<li><strong>Conversation starters</strong> (optional)</li>
</ul>
</li>



<li>Click <strong>Save</strong>.</li>
</ol>



<p class="wp-block-paragraph">Here is a screenshot for your reference.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="804" height="913" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-publish-an-agent-in-Copilot-Studio.jpg" alt="How to publish an agent in Copilot Studio" class="wp-image-1234" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-publish-an-agent-in-Copilot-Studio.jpg 804w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-publish-an-agent-in-Copilot-Studio-264x300.jpg 264w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/How-to-publish-an-agent-in-Copilot-Studio-768x872.jpg 768w" sizes="(max-width: 804px) 100vw, 804px" /></figure>
</div>


<p class="wp-block-paragraph">You can also copy the generated website URL if you want to share it directly.</p>



<ul class="wp-block-list">
<li><strong>Launch the Demo Website</strong></li>
</ul>



<p class="wp-block-paragraph">Click <strong>Open demo website</strong>.</p>



<p class="wp-block-paragraph">The demo website opens in a new browser tab, allowing you to interact with the published agent exactly as an end user would.</p>



<p class="wp-block-paragraph">At this point, your Copilot Studio agent is successfully published and available through the Demo Website channel for testing and sharing.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Microsoft Copilot Studio makes it easy to <strong>build AI-powered agents without extensive coding knowledge</strong>. In this tutorial, you learned how to <strong>create your first AI agent</strong>, add knowledge sources, test its responses, publish it, and make it available through a demo website.</p>



<p class="wp-block-paragraph">By following these steps, you can quickly build agents that answer questions, automate common tasks, and provide self-service support for employees, customers, or business users. As you become more familiar with Copilot Studio, you can further enhance your agents with topics, actions, Power Automate flows, and integrations with other Microsoft services.</p>



<p class="wp-block-paragraph">Start with simple use cases, validate the responses using the testing tools, and gradually add more advanced capabilities to create intelligent agents that deliver real business value.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Monitor Token Usage by AI Model in Copilot Studio</title>
		<link>https://powerplatformfaqs.com/copilot-studio-token-usage/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 19:15:15 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[Monitor Token Usage by AI Model in Copilot Studio]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1142</guid>

					<description><![CDATA[If you&#8217;ve already picked your AI model in Copilot Studio — great. Now there&#8217;s a follow-up question that catches a lot of people off guard:&#160;how much is this actually costing me? Token usage, Copilot Credits, billing meters — these terms get thrown around a lot, and it&#8217;s easy to ignore them until you suddenly get ... <a title="How to Monitor Token Usage by AI Model in Copilot Studio" class="read-more" href="https://powerplatformfaqs.com/copilot-studio-token-usage/" aria-label="Read more about How to Monitor Token Usage by AI Model in Copilot Studio">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you&#8217;ve already picked your <a href="https://powerplatformfaqs.com/ai-model-copilot-studio/" target="_blank" rel="noreferrer noopener">AI model in Copilot Studio</a> — great. Now there&#8217;s a follow-up question that catches a lot of people off guard:&nbsp;<em>how much is this actually costing me?</em></p>



<p class="wp-block-paragraph">Token usage, Copilot Credits, billing meters — these terms get thrown around a lot, and it&#8217;s easy to ignore them until you suddenly get a notification that your environment has hit its usage limit or you&#8217;ve blown past your monthly capacity. I&#8217;ve seen it happen more times than I&#8217;d like.</p>



<p class="wp-block-paragraph">In this tutorial, I&#8217;ll walk you through how Copilot Studio measures and tracks usage, where to monitor it, what the different billing rates mean, and how to keep costs under control before they spiral. I&#8217;ll also cover the specific behavior of reasoning models like GPT-5 Reasoning, which have a different billing structure that trips people up.</p>



<p class="wp-block-paragraph">Let&#8217;s get into it.</p>



<h2 class="wp-block-heading">First, Let&#8217;s Clear Up the Terminology</h2>



<p class="wp-block-paragraph">When people say &#8220;token usage&#8221; in Copilot Studio, they&#8217;re really talking about&nbsp;<strong>Copilot Credits</strong>&nbsp;— that&#8217;s the unit Microsoft uses to measure consumption. The underlying AI models do process tokens internally (the words and word-fragments the model reads and generates), but from a billing and monitoring perspective, Copilot Studio wraps everything into Copilot Credits.</p>



<p class="wp-block-paragraph">Think of Copilot Credits like a prepaid data plan. You buy a pack, you spend credits based on how your agents run, and when you run out, things stop working — unless you&#8217;ve set up a pay-as-you-go fallback.</p>



<p class="wp-block-paragraph">When you purchase a Copilot Studio license, your organization gets a pool of Copilot Credits. This pool is shared across your entire tenant, so every environment draws from the same bucket by default (unless you specifically allocate capacity to individual environments, which I&#8217;ll cover later).</p>



<h2 class="wp-block-heading">What Consumes Microsoft Copilot Credits?</h2>



<p class="wp-block-paragraph">This is where a lot of people are surprised. It&#8217;s not just the AI responses that consume credits — it&#8217;s also actions, flows, and tools that your agent invokes along the way.</p>



<p class="wp-block-paragraph">Here&#8217;s the breakdown of what gets billed and how much:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Agent Feature</th><th class="has-text-align-left" data-align="left">Copilot Credits Used</th></tr></thead><tbody><tr><td>Classic answer (static response)</td><td>1 credit</td></tr><tr><td>Generative answer (AI-generated response)</td><td>2 credits</td></tr><tr><td>Agent action (trigger, reasoning, topic transition)</td><td>5 credits</td></tr><tr><td>Tenant graph grounding</td><td>10 credits</td></tr><tr><td>Agent flow actions (per 100 actions)</td><td>13 credits</td></tr><tr><td>Text &amp; generative AI tools – Basic (per 10 responses)</td><td>1 credit</td></tr><tr><td>Text &amp; generative AI tools – Standard (per 10 responses)</td><td>15 credits</td></tr><tr><td>Text &amp; generative AI tools – Premium (per 10 responses)</td><td>100 credits</td></tr><tr><td>Content processing tools (per page)</td><td>8 credits</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A single conversation turn can hit multiple of these. For example, if a user asks a question and the agent:</p>



<ul class="wp-block-list">
<li>Performs a generative answer → 2 credits</li>



<li>Does tenant graph grounding to search your SharePoint content → 10 credits</li>



<li>Total for that single response:&nbsp;<strong>12 Copilot Credits</strong></li>
</ul>



<p class="wp-block-paragraph">And that&#8217;s for a straightforward Q&amp;A. The more complex and action-heavy your agent is, the more credits each session burns through.</p>



<h2 class="wp-block-heading">The Reasoning Model Billing: A Special Case</h2>



<p class="wp-block-paragraph">If you&#8217;ve chosen one of the reasoning models — like&nbsp;<strong>GPT-5 Reasoning</strong>&nbsp;or&nbsp;<strong>Claude Opus 4.1</strong>&nbsp;— the billing works differently from standard models. You need to understand this before you deploy a reasoning model in any agent that gets regular use.</p>



<p class="wp-block-paragraph">Reasoning models are billed on&nbsp;<strong>two meters at the same time</strong>:</p>



<ol class="wp-block-list">
<li><strong>The feature rate</strong>&nbsp;— the standard rate for whatever the agent is doing (generative answer, agent action, etc.)</li>



<li><strong>Text and generative AI tools (premium)</strong>&nbsp;— an additional 100 Copilot Credits per 10 responses, specifically to cover the extra compute that deep reasoning requires</li>
</ol>



<p class="wp-block-paragraph">So the total cost formula for a reasoning model operation looks like this:</p>



<p class="wp-block-paragraph"><strong>Total cost = Feature rate + Premium AI tools rate (100 credits per 10 responses)</strong></p>



<p class="wp-block-paragraph">Let me make that concrete with an example:</p>



<p class="wp-block-paragraph">Say your agent uses a reasoning model to generate a response to a complex policy question. That&#8217;s one generative answer (2 credits) plus the premium reasoning cost (100 credits per 10 responses, so 10 credits per single response). One interaction =&nbsp;<strong>12 credits minimum</strong>, just for the answer — before any actions or graph grounding.</p>



<p class="wp-block-paragraph">That doesn&#8217;t mean you shouldn&#8217;t use reasoning models. But it does mean you should be careful about which agents get them. Don&#8217;t put a reasoning model on an agent that handles 5,000 interactions a day unless you&#8217;ve done the math and you&#8217;re comfortable with the consumption.</p>



<h2 class="wp-block-heading">Where to Monitor Copilot Credit Consumption</h2>



<p class="wp-block-paragraph">Now that you understand what drives consumption, here&#8217;s where to actually check it.</p>



<h3 class="wp-block-heading">In the Power Platform Admin Center</h3>



<p class="wp-block-paragraph">This is the main place to monitor your organization&#8217;s overall Copilot Credit usage. Here&#8217;s how to get there:</p>



<ol class="wp-block-list">
<li>Go to&nbsp;<strong>admin.powerplatform.microsoft.com</strong></li>



<li>Sign in with your admin account</li>



<li>In the left navigation, go to&nbsp;<strong>Billing → Licenses</strong>&nbsp;or&nbsp;<strong>Analytics → Copilot Studio</strong></li>



<li>Look for the&nbsp;<strong>Copilot Credit consumption</strong>&nbsp;report</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="728" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio-1024x728.jpg" alt="Monitor Token Usage by AI Model in Copilot Studio" class="wp-image-1166" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio-1024x728.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio-300x213.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio-768x546.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio-1536x1092.jpg 1536w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/Monitor-Token-Usage-by-AI-Model-in-Copilot-Studio.jpg 2014w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">This report shows you:</p>



<ul class="wp-block-list">
<li>How many Copilot Credits your tenant has consumed</li>



<li>Which environments are using the most</li>



<li>Whether you&#8217;re approaching or have exceeded your capacity limits</li>
</ul>



<p class="wp-block-paragraph">If you&#8217;ve allocated credits to specific environments, you&#8217;ll see per-environment breakdowns. If you haven&#8217;t allocated credits to environments, all consumption rolls up to tenant-level and environments share from the common pool.</p>



<h3 class="wp-block-heading">In Copilot Studio Analytics</h3>



<p class="wp-block-paragraph">Within Copilot Studio itself, each agent has an Analytics section that gives you engagement and session-level data. To access it:</p>



<ol class="wp-block-list">
<li>Open your agent in Copilot Studio</li>



<li>Click the&nbsp;<strong>Analytics</strong>&nbsp;tab in the left navigation</li>



<li>Review the&nbsp;<strong>Summary</strong>,&nbsp;<strong>Engagement</strong>, and&nbsp;<strong>Billing</strong>&nbsp;tabs</li>
</ol>



<p class="wp-block-paragraph">The Billing tab is particularly useful. It shows you session counts, message volume, and can help you estimate your ongoing credit consumption for that specific agent. It&#8217;s not a real-time credit counter, but it gives you enough data to spot trends and flag agents that are consuming more than expected.</p>



<h3 class="wp-block-heading">Using the Copilot Studio Usage Estimator</h3>



<p class="wp-block-paragraph">Before you deploy an agent, it&#8217;s worth using Microsoft&#8217;s <strong><a href="https://microsoft.github.io/copilot-studio-estimator/" target="_blank" rel="noreferrer noopener">Copilot Studio agent usage estimator</a></strong> to forecast your credit consumption. You can find this tool through the Microsoft Copilot Studio licensing documentation.</p>



<p class="wp-block-paragraph">You plug in:</p>



<ul class="wp-block-list">
<li>Agent type (generative, classic, or mixed)</li>



<li>Estimated daily/monthly traffic</li>



<li>Orchestration mode</li>



<li>Knowledge sources (graph grounded or not)</li>



<li>Whether it uses tools or flows</li>
</ul>



<p class="wp-block-paragraph">The estimator then gives you a projected Copilot Credit usage figure, which you can use to check whether your current capacity covers it. This is especially valuable before launching a new agent in production.</p>



<h2 class="wp-block-heading">Understanding Quotas vs. Credits in Copilot</h2>



<p class="wp-block-paragraph">These are two different things, and it&#8217;s worth being clear on the difference.</p>



<p class="wp-block-paragraph"><strong>Copilot Credits</strong>&nbsp;are about&nbsp;<em>how much capacity</em>&nbsp;you&#8217;ve purchased. Run out of credits, and your agents stop working until you top up.</p>



<p class="wp-block-paragraph"><strong>Quotas</strong>&nbsp;are about&nbsp;<em>how fast</em>&nbsp;your agents can process requests — measured in requests per minute (RPM) or requests per hour (RPH). These exist to protect the platform from traffic spikes.</p>



<p class="wp-block-paragraph">Here&#8217;s what the quotas look like depending on your capacity:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Prepaid Message Packs</th><th class="has-text-align-left" data-align="left">Quota</th></tr></thead><tbody><tr><td>1–10 packs</td><td>50 RPM / 1,000 RPH</td></tr><tr><td>11–50 packs</td><td>80 RPM / 1,600 RPH</td></tr><tr><td>51–150 packs</td><td>100 RPM / 2,000 RPH</td></tr><tr><td>Pay-as-you-go</td><td>100 RPM / 2,000 RPH</td></tr><tr><td>Microsoft 365 Copilot users</td><td>100 RPM / 2,000 RPH</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">If your agent hits the RPM quota, users will see a failure message when they try to send a message. This is separate from running out of credits — it&#8217;s a throttle, not a shutdown. Once traffic drops back within the limit, the agent works again automatically.</p>



<p class="wp-block-paragraph">So if you&#8217;re building an agent that you expect to handle high-traffic periods (like a lunch-hour HR helpdesk spike), make sure your capacity tier supports the throughput you need.</p>



<h2 class="wp-block-heading">What Happens When You Hit Your Limit?</h2>



<p class="wp-block-paragraph">This is the part no one wants to learn the hard way.</p>



<p class="wp-block-paragraph">When your tenant reaches&nbsp;<strong>125% of its prepaid Copilot Credit capacity</strong>, enforcement kicks in. Here&#8217;s what that means in practice:</p>



<ul class="wp-block-list">
<li><strong>Custom agents are disabled</strong>&nbsp;— but not mid-conversation. Any active conversation finishes, then no new conversations are accepted.</li>



<li><strong>Users see an error message</strong>&nbsp;like:&nbsp;<em>&#8220;This agent is currently unavailable. It has reached its usage limit.&#8221;</em></li>



<li><strong>Your admin gets an email notification</strong>, and a banner appears in the Power Platform admin center.</li>
</ul>



<p class="wp-block-paragraph">To recover, your admin can do one of three things:</p>



<ol class="wp-block-list">
<li>Reallocate unused capacity from another environment</li>



<li>Purchase additional Copilot Credits</li>



<li>Set up a&nbsp;<strong>pay-as-you-go meter</strong>&nbsp;for overage handling</li>
</ol>



<p class="wp-block-paragraph">The pay-as-you-go option is worth considering for unpredictable workloads. Instead of your agent going dark when credits run out, consumption continues and gets billed on a usage basis. It costs more per credit, but it keeps your agent running.</p>



<h2 class="wp-block-heading">How to Allocate Credits to Specific Environments</h2>



<p class="wp-block-paragraph">By default, all your environments share from the tenant-level credit pool. This works fine when you have one or two agents, but when you have multiple environments — development, testing, production — it creates a risk: a poorly optimized test agent could eat through credits and impact production.</p>



<p class="wp-block-paragraph">To prevent that, you can allocate a specific credit budget to individual environments.</p>



<p class="wp-block-paragraph">Here&#8217;s how:</p>



<ol class="wp-block-list">
<li>Go to&nbsp;<strong>Power Platform Admin Center</strong></li>



<li>Navigate to&nbsp;<strong>Resources → Capacity</strong></li>



<li>Select the environment you want to allocate capacity to</li>



<li>Set a Copilot Credit allocation for that environment</li>
</ol>



<p class="wp-block-paragraph">Once an environment has its own allocation, it only consumes from that pool. If it runs out, it can draw from the tenant pool — but if you want strict isolation, you can configure it so that tenant-level fallback doesn&#8217;t apply.</p>



<p class="wp-block-paragraph">In the example from Microsoft&#8217;s documentation: if you allocate 10,000 credits to Environment A, that environment runs independently until it burns through those 10,000. Only then does it start drawing from the shared tenant pool.</p>



<h2 class="wp-block-heading">Practical Tips to Keep Usage in Check</h2>



<p class="wp-block-paragraph">Here are the habits I&#8217;d recommend building if you&#8217;re running multiple agents or managing an environment for a team:</p>



<p class="wp-block-paragraph"><strong>1. Use classic answers where you don&#8217;t need AI</strong><br>Classic answers (manually authored responses) cost just 1 credit vs. 2 credits for generative answers. For highly predictable questions with fixed answers — think FAQs, standard procedures — stick to classic topics. Save generative AI for the queries that actually need it.</p>



<p class="wp-block-paragraph"><strong>2. Be selective with graph grounding</strong><br>Tenant graph grounding costs 10 credits per response on top of everything else. It&#8217;s powerful, but it adds up fast. Use it only in agents that genuinely need to search across your organization&#8217;s data, not as a default &#8220;just in case&#8221; setting.</p>



<p class="wp-block-paragraph"><strong>3. Don&#8217;t deploy reasoning models for high-volume, simple tasks</strong><br>GPT-5 Reasoning or Claude Opus 4.1 for a Q&amp;A bot that handles 10,000 questions a month is going to burn through a disproportionate amount of credits. Match the model to the task. Simple questions don&#8217;t need premium reasoning models.</p>



<p class="wp-block-paragraph"><strong>4. Check the analytics weekly</strong><br>The Copilot Studio Analytics tab gives you session and message volume trends. Build a habit of looking at it once a week during rollout. Spotting a spike early is much easier than explaining an overage to finance after the fact.</p>



<p class="wp-block-paragraph"><strong>5. Use the estimator before every new agent launch</strong><br>Run the usage estimator before you publish a new agent to production. It takes five minutes and can save you from an unexpected bill or a hard shutdown.</p>



<p class="wp-block-paragraph"><strong>6. Allocate credits per environment in production setups</strong><br>If you&#8217;re running multiple environments, allocate budgets explicitly. It gives you clear visibility into which environments are spending what, and prevents a dev environment from accidentally draining your production capacity.</p>



<h2 class="wp-block-heading">A Quick Example to Put It All Together</h2>



<p class="wp-block-paragraph">Let me run through a real scenario to show how the pieces fit.</p>



<p class="wp-block-paragraph">You&#8217;re running a customer support agent on your company website. Here&#8217;s its average configuration per session:</p>



<ul class="wp-block-list">
<li>4 classic answers (for standard return policy questions): 4 × 1 =&nbsp;<strong>4 credits</strong></li>



<li>2 generative answers (for troubleshooting): 2 × 2 =&nbsp;<strong>4 credits</strong></li>



<li>Total per session:&nbsp;<strong>8 credits</strong></li>



<li>900 customer interactions per day: 8 × 900 =&nbsp;<strong>7,200 Copilot Credits per day</strong></li>
</ul>



<p class="wp-block-paragraph">Over 30 days, that&#8217;s roughly&nbsp;<strong>216,000 Copilot Credits</strong>&nbsp;for that one agent.</p>



<p class="wp-block-paragraph">Now, imagine you switch the agent to use a reasoning model for those generative answers. Each generative answer now costs 2 credits (feature rate) + 10 credits (premium reasoning, amortized at 100/10). So those 2 generative answers become 2 × 12 =&nbsp;<strong>24 credits</strong>&nbsp;per session instead of 4. Your daily cost goes from 7,200 credits to over 25,000 credits — just by changing the model.</p>



<p class="wp-block-paragraph">That&#8217;s a 3.5× increase in credit consumption for the same workload. Sometimes a reasoning model is worth it. For a customer support FAQ agent? Almost certainly not.</p>



<h2 class="wp-block-heading">Wrapping Up</h2>



<p class="wp-block-paragraph">Monitoring token (Copilot Credit) usage in Copilot Studio isn&#8217;t complicated once you know what to look for and where to look. The key places are:</p>



<ul class="wp-block-list">
<li><strong>Power Platform Admin Center</strong>&nbsp;for tenant-wide and per-environment credit consumption</li>



<li><strong>Copilot Studio Analytics</strong>&nbsp;for per-agent session and billing data</li>



<li><strong>Microsoft&#8217;s usage estimator</strong>&nbsp;for pre-launch forecasting</li>
</ul>



<p class="wp-block-paragraph">The most important habit is to check these regularly and match your model choice to your workload. Use generative AI where it adds value, use classic responses where it doesn&#8217;t, and be especially careful with reasoning models in high-volume scenarios.</p>



<p class="wp-block-paragraph">If you haven&#8217;t already, explicitly allocate credits to your environments — it gives you much cleaner visibility into where spending is occurring and protects your production environment from surprises.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Choose an AI Model in Copilot Studio: GPT-5, Claude, and More</title>
		<link>https://powerplatformfaqs.com/ai-model-copilot-studio/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 17:43:27 +0000</pubDate>
				<category><![CDATA[Copilot Studio]]></category>
		<category><![CDATA[AI Model in Copilot Studio]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1137</guid>

					<description><![CDATA[If you&#8217;ve opened Copilot Studio recently and noticed a dropdown to select your agent&#8217;s AI model, you&#8217;re not alone in wondering —&#160;which one should I pick?&#160;The options have expanded fast. You&#8217;ve got GPT-4.1, GPT-5 Chat, GPT-5 Reasoning, Claude Sonnet 4.5, Claude Opus 4.1, and more. It can feel overwhelming when you&#8217;re just trying to build ... <a title="How to Choose an AI Model in Copilot Studio: GPT-5, Claude, and More" class="read-more" href="https://powerplatformfaqs.com/ai-model-copilot-studio/" aria-label="Read more about How to Choose an AI Model in Copilot Studio: GPT-5, Claude, and More">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you&#8217;ve opened <a href="https://powerplatformfaqs.com/copilot-studio-tutorials/" target="_blank" rel="noreferrer noopener">Copilot Studio</a> recently and noticed a dropdown to select your agent&#8217;s AI model, you&#8217;re not alone in wondering —&nbsp;<em>which one should I pick?</em>&nbsp;The options have expanded fast. You&#8217;ve got GPT-4.1, GPT-5 Chat, GPT-5 Reasoning, Claude Sonnet 4.5, Claude Opus 4.1, and more. It can feel overwhelming when you&#8217;re just trying to build a working agent.</p>



<p class="wp-block-paragraph">In this tutorial, I&#8217;ll walk you through everything you need to know about <strong>AI model selection in Copilot Studio</strong> — what each model does, when to use it, how to switch models, and what your admin needs to set up before you can use the newer ones. I&#8217;ll also cover some real practical scenarios so you know exactly which model fits which situation.</p>



<p class="wp-block-paragraph">Let&#8217;s get into it.</p>



<h2 class="wp-block-heading">Why Does AI Model Choice Even Matter?</h2>



<p class="wp-block-paragraph">Think of the AI model as the brain powering your Copilot agent. When a user asks a question, the model is what decides how to understand that question and frame a response.</p>



<p class="wp-block-paragraph">Different models are built differently — some are faster, some are more thorough, some are better at following complex instructions, and some are particularly good at reasoning through multi-step problems.</p>



<p class="wp-block-paragraph">Picking the wrong model won&#8217;t break your agent, but it can lead to:</p>



<ul class="wp-block-list">
<li>Slow responses when a lightweight model would do the job just fine</li>



<li>Shallow or incomplete answers when your use case needs deeper reasoning</li>



<li>Higher message consumption than you expected</li>



<li>Inconsistent formatting, even when you&#8217;ve given detailed instructions</li>
</ul>



<p class="wp-block-paragraph">So yes, model choice genuinely matters, and now that Copilot Studio lets you switch, it&#8217;s worth understanding what each option brings to the table.</p>



<h2 class="wp-block-heading">How to Change the AI Model in Copilot Studio</h2>



<p class="wp-block-paragraph">Before we dive into which model to pick, let me show you how to actually change it. It&#8217;s simpler than you&#8217;d think.</p>



<ol class="wp-block-list">
<li>Open your agent in&nbsp;<strong>Copilot Studio</strong></li>



<li>Go to the&nbsp;<strong>Overview</strong>&nbsp;tab of your agent</li>



<li>In the&nbsp;<strong>Model</strong>&nbsp;section, you&#8217;ll see a dropdown showing your current model</li>



<li>Click the&nbsp;<strong>chevron</strong>&nbsp;(the small arrow icon) to expand the model list, you can see all the models in the screenshot below:</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="727" src="https://powerplatformfaqs.com/wp-content/uploads/2026/06/AI-Model-in-Copilot-Studio-1024x727.jpg" alt="AI Model in Copilot Studio" class="wp-image-1162" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/06/AI-Model-in-Copilot-Studio-1024x727.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/AI-Model-in-Copilot-Studio-300x213.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/AI-Model-in-Copilot-Studio-768x545.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/06/AI-Model-in-Copilot-Studio.jpg 1123w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ol start="5" class="wp-block-list">
<li>Select the model you want to use</li>



<li>A confirmation message will appear, letting you know the model has been updated</li>
</ol>



<p class="wp-block-paragraph">That&#8217;s it. You can switch models at any time, even after your agent is already built and tested. This makes it easy to experiment — build your agent with the default model, then try swapping to a different one and compare the responses.</p>



<p class="wp-block-paragraph">One important thing: the model you see in that dropdown depends on what your admin has enabled. If you only see GPT-4.1, it probably means preview and experimental models haven&#8217;t been turned on for your environment. More on that in the admin settings section below.</p>



<h2 class="wp-block-heading">Understanding the Model Tags</h2>



<p class="wp-block-paragraph">When you look at the model list, each model comes with a couple of tags. Understanding these tags saves you from picking a model that&#8217;s not ready for what you&#8217;re building.</p>



<h3 class="wp-block-heading">Tag 1: Model Use Category</h3>



<p class="wp-block-paragraph">This tells you what kind of tasks the model is optimized for:</p>



<ul class="wp-block-list">
<li><strong>General</strong>&nbsp;— Fast and cost-efficient. Best for everyday chat, FAQs, summarization, translation, and simple question-answer scenarios. If you&#8217;re building a basic helpdesk bot or an internal FAQ agent, a General model is your go-to.</li>



<li><strong>Auto</strong>&nbsp;— Handles a mixed bag of tasks intelligently. It routes queries dynamically, so it&#8217;s great when you have an agent that might need to handle a mix of simple questions and more complex actions. Think of it like a smart router that adjusts based on what the user is asking.</li>



<li><strong>Deep</strong>&nbsp;— Built for complex, multi-step reasoning. If your agent needs to analyze long documents, work through policy-heavy scenarios, or perform multi-hop reasoning (where the answer depends on combining information from several places), this is your model. It&#8217;s slower and costs more, but for the right use case, it&#8217;s worth it.</li>
</ul>



<h3 class="wp-block-heading">Tag 2: Availability Status</h3>



<p class="wp-block-paragraph">This tells you how production-ready the model is:</p>



<ul class="wp-block-list">
<li><strong>Default</strong>&nbsp;— This is the currently recommended model for most agents. Copilot Studio periodically upgrades the default model as better ones become generally available. Right now,&nbsp;<strong>GPT-4.1</strong>&nbsp;is the default.</li>



<li><strong>No tag (GA)</strong>&nbsp;— Generally Available. Fully tested, stable, and ready for production use at scale.</li>



<li><strong>Preview</strong>&nbsp;— Works well but isn&#8217;t officially recommended for production yet. You can use it in test environments or non-critical scenarios. Performance is generally good, but Microsoft is still gathering feedback.</li>



<li><strong>Experimental</strong>&nbsp;— Early access only. These models are there for you to explore and provide feedback on. Don&#8217;t deploy them in production. You might experience slowdowns, timeouts, or variable quality.</li>



<li><strong>Retired</strong>&nbsp;— The model has been replaced but is still available for up to 30 days after retirement. More on this below.</li>
</ul>



<h2 class="wp-block-heading">The OpenAI Models Available in Copilot Studio</h2>



<p class="wp-block-paragraph">Here&#8217;s a breakdown of the current OpenAI models you&#8217;ll find in Copilot Studio:</p>



<h3 class="wp-block-heading">GPT-4.1 (Default)</h3>



<p class="wp-block-paragraph">This is the default model for all new agents right now. It replaced GPT-4o as the default in late 2025. GPT-4.1 is a text-only model with strong accuracy and reasoning — it&#8217;s particularly good at analyzing detailed documents, complex knowledge-base Q&amp;A, and scenarios where precision matters.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;Document analysis agents, policy Q&amp;A, knowledge management bots, and scenarios where you need reliable and consistent responses.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Generally Available (GA) — safe for production.</p>



<h3 class="wp-block-heading">GPT-5 Chat (General)</h3>



<p class="wp-block-paragraph">GPT-5 Chat is the conversational upgrade from GPT-4.1. It handles context better across long conversations and produces more natural, human-like dialogue. If your agent needs to maintain context across a multi-turn conversation or feel genuinely conversational, GPT-5 Chat performs noticeably better than GPT-4.1 in that department.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;Employee self-service chatbots, IT/HR helpdesk agents, customer-facing agents where natural conversation flow matters.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Generally Available — production ready.</p>



<h3 class="wp-block-heading">GPT-5 Auto (Auto)</h3>



<p class="wp-block-paragraph">This is where it gets interesting. GPT-5 Auto isn&#8217;t just a chat model — it&#8217;s built to orchestrate multi-step workflows. It can automate actions across multiple systems, not just respond to questions. Think of it as a &#8220;digital project manager&#8221; that can figure out what needs to happen, in what order, and kick off those steps.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;End-to-end process automation, ticket creation to resolution flows, multi-step task sequences that touch several apps or systems.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Preview — good for testing and non-critical environments, not recommended for production yet.</p>



<h3 class="wp-block-heading">GPT-5 Reasoning (Deep)</h3>



<p class="wp-block-paragraph">If you need serious analytical power, this is it. GPT-5 Reasoning is trained specifically for complex reasoning tasks — the kind where the model needs to think carefully through the problem, not just retrieve an answer. It scores high on document understanding and structured problem-solving.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;Compliance auditing, financial analysis, interpreting complex multi-part data, and advanced planning scenarios where you need thorough, carefully thought-out responses.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Preview — test it, but hold off on deploying it in production.</p>



<h3 class="wp-block-heading">GPT-5.2 Chat and GPT-5.2 Reasoning (Experimental)</h3>



<p class="wp-block-paragraph">These are the most cutting-edge models in the lineup right now. GPT-5.2 builds on GPT-5 with improved context awareness and reasoning depth. They were made available in late 2025 in early release environments.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;Experimenting with the latest capabilities. Use these if you want to stay ahead of the curve and test what the newest model can do before it hits GA.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Experimental — strictly for testing. Do not use in production.</p>



<h3 class="wp-block-heading">The Anthropic (Claude) Models</h3>



<p class="wp-block-paragraph">This is the big news from 2025. Microsoft opened up Copilot Studio to external models from Anthropic, meaning you can now power your agents with Claude models, not just OpenAI ones.</p>



<p class="wp-block-paragraph">These are &#8220;external&#8221; models — meaning they&#8217;re hosted outside Microsoft&#8217;s infrastructure, on Anthropic&#8217;s side. Because of that, your admin needs to explicitly enable them, and you need to accept Anthropic&#8217;s data handling terms before using them. More on that in a moment.</p>



<h3 class="wp-block-heading">Claude Sonnet 4.5 (General)</h3>



<p class="wp-block-paragraph">Claude Sonnet 4.5 is Anthropic&#8217;s latest coding and agent-focused model. It&#8217;s exceptional at tool use, step-by-step reasoning, and handling complex multi-step agent workflows. In practice, when I&#8217;ve seen it tested for response formatting tasks — like following specific date format instructions — it consistently does better than GPT-4.1 at following detailed instructions.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;Advanced software development assistance, building multi-step autonomous agents, tasks that require integration with external tools and systems, and scenarios where following complex formatting instructions precisely is important.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Preview (Frontier Program) — available for early experimentation, not recommended for production.</p>



<h3 class="wp-block-heading">Claude Opus 4.1 (Deep)</h3>



<p class="wp-block-paragraph">Claude Opus 4.1 is Anthropic&#8217;s reasoning powerhouse. It&#8217;s designed for intensive analysis and structured problem-solving. If you have a scenario that needs very thorough, methodical reasoning — think compliance auditing, elaborate planning, or synthesizing information from long documents — this is worth testing.</p>



<p class="wp-block-paragraph"><strong>Best for:</strong>&nbsp;In-depth data analysis, research summarization, complex reasoning tasks where depth and thoroughness are more important than speed.</p>



<p class="wp-block-paragraph"><strong>Availability:</strong>&nbsp;Experimental — use only for exploration and testing.</p>



<h2 class="wp-block-heading">A Quick Side-by-Side Comparison</h2>



<p class="wp-block-paragraph">Here&#8217;s a summary to help you match your use case to the right model:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Your Use Case</th><th class="has-text-align-left" data-align="left">Recommended Model</th><th class="has-text-align-left" data-align="left">Why</th></tr></thead><tbody><tr><td>Basic FAQ / helpdesk bot</td><td>GPT-4.1</td><td>Fast, accurate, stable, production-ready</td></tr><tr><td>Natural multi-turn conversations</td><td>GPT-5 Chat</td><td>Better context retention, more conversational</td></tr><tr><td>Multi-step process automation</td><td>GPT-5 Auto</td><td>Designed to orchestrate actions across systems</td></tr><tr><td>Document analysis / compliance</td><td>GPT-5 Reasoning or Claude Opus 4.1</td><td>Deep reasoning capability</td></tr><tr><td>Code generation / tool-heavy agents</td><td>Claude Sonnet 4.5</td><td>Excels at tool use and agentic workflows</td></tr><tr><td>Mixed intents, unpredictable queries</td><td>GPT-5 Auto</td><td>Routes queries dynamically</td></tr><tr><td>Testing the latest features</td><td>GPT-5.2 Chat / GPT-5.2 Reasoning</td><td>Cutting-edge, experimental</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">What Your Admin Needs to Enable</h2>



<p class="wp-block-paragraph">This part catches a lot of makers off guard. If you open the model dropdown and only see GPT-4.1, it doesn&#8217;t mean other models don&#8217;t exist — it means your admin hasn&#8217;t turned on the settings for them.</p>



<p class="wp-block-paragraph">There are three key admin controls:</p>



<h3 class="wp-block-heading">1. Allow Preview and Experimental Models</h3>



<p class="wp-block-paragraph">Your admin needs to go into the&nbsp;<strong>Power Platform admin center</strong>&nbsp;and turn on the&nbsp;<strong>&#8220;Preview and experimental AI models&#8221;</strong>&nbsp;setting for your environment. Without this, you&#8217;ll only see Generally Available models.</p>



<p class="wp-block-paragraph">To check or change this:</p>



<ol class="wp-block-list">
<li>Go to&nbsp;<strong>Power Platform admin center</strong></li>



<li>Select your environment</li>



<li>Go to&nbsp;<strong>Settings → Features</strong></li>



<li>Enable&nbsp;<strong>Allow Preview &amp; Experimental AI models</strong></li>
</ol>



<h3 class="wp-block-heading">2. Move Data Across Regions</h3>



<p class="wp-block-paragraph">Experimental models may not run in the same data center as your environment. For example, if your environment is in Europe but the experimental model is hosted in the US, your data needs to cross regions to use it.</p>



<p class="wp-block-paragraph">Your admin needs to enable&nbsp;<strong>Move data across regions</strong>&nbsp;in the Power Platform admin center. If this is off, experimental model features simply won&#8217;t work.</p>



<h3 class="wp-block-heading">3. Enable Anthropic as a Microsoft Subprocessor (for Claude Models)</h3>



<p class="wp-block-paragraph">To use Claude Sonnet 4.5 or Claude Opus 4.1, a&nbsp;<strong>Global Administrator</strong>&nbsp;needs to go to the&nbsp;<strong>Microsoft 365 Admin Center</strong>&nbsp;and enable the setting:</p>



<p class="wp-block-paragraph"><strong>&#8220;Enable Anthropic as a Microsoft subprocessor subject to the above terms&#8221;</strong></p>



<p class="wp-block-paragraph">If this isn&#8217;t enabled, the Anthropic models won&#8217;t appear in your dropdown at all — not even as an option. Once it&#8217;s enabled, users also need to accept Anthropic&#8217;s data handling terms in Copilot Studio before they can start building with Claude.</p>



<h2 class="wp-block-heading">What Happens When a Model Gets Retired?</h2>



<p class="wp-block-paragraph">Microsoft periodically upgrades the default model. When that happens, the old model gets a&nbsp;<strong>&#8220;Retired&#8221;</strong>&nbsp;tag. You can still use a retired model for up to&nbsp;<strong>30 days</strong>&nbsp;after the upgrade.</p>



<p class="wp-block-paragraph">Why would you want to do that? A few real reasons:</p>



<ul class="wp-block-list">
<li>Your agent&#8217;s downstream systems expect a specific response format or style, and the new model&#8217;s output is structured differently</li>



<li>You&#8217;re in the middle of a product launch or critical event, and stability is more important than getting new features right now</li>



<li>Your compliance team needs to vet the new model before it processes sensitive data in your environment</li>
</ul>



<p class="wp-block-paragraph">To keep using a retired model:</p>



<ol class="wp-block-list">
<li>Go to your agent&#8217;s&nbsp;<strong>Settings</strong>&nbsp;page</li>



<li>In the&nbsp;<strong>Generative AI</strong>&nbsp;tab, find the&nbsp;<strong>Model</strong>&nbsp;section</li>



<li>Toggle on&nbsp;<strong>&#8220;Continue using retired models&#8221;</strong></li>
</ol>



<p class="wp-block-paragraph">This gives you up to 30 days to update and test your agent with the new model before the old one is fully removed. After 30 days, the retired model is gone — so don&#8217;t wait too long.</p>



<h2 class="wp-block-heading">My Practical Recommendation: How to Actually Decide</h2>



<p class="wp-block-paragraph">Honestly, the best approach is to start with GPT-4.1 and test your way to a better model if needed. Here&#8217;s how I&#8217;d approach it:</p>



<p class="wp-block-paragraph"><strong>Step 1: Build your agent with GPT-4.1 (the default)</strong><br>It&#8217;s stable, production-ready, and handles most scenarios well. Don&#8217;t overthink the model before you&#8217;ve even built the thing.</p>



<p class="wp-block-paragraph"><strong>Step 2: Test it with real questions</strong><br>Put in 10–15 realistic prompts that represent what your users will actually ask. Look at the quality, depth, and structure of responses.</p>



<p class="wp-block-paragraph"><strong>Step 3: Identify what&#8217;s missing</strong><br>Is it too shallow? Too slow? Not following your formatting instructions precisely? That tells you what to look for in another model.</p>



<p class="wp-block-paragraph"><strong>Step 4: Test one alternative</strong><br>If conversations feel robotic or context is getting lost, try GPT-5 Chat. If your agent needs to reason through complex multi-step problems, try GPT-5 Reasoning in a dev environment.</p>



<p class="wp-block-paragraph"><strong>Step 5: Compare side by side</strong><br>Ask the same question with two different models and compare the responses for depth, structure, tone, and accuracy. Copilot Studio makes this easy since you can switch models and start a new test session instantly.</p>



<h2 class="wp-block-heading">A Real Example: HR Recruitment Agent</h2>



<p class="wp-block-paragraph">Let me put this in context with a real scenario. Say you&#8217;re building an HR recruitment agent that:</p>



<ul class="wp-block-list">
<li>Summarizes candidate resumes</li>



<li>Suggests interview questions based on job criteria</li>



<li>Answers employee policy questions</li>
</ul>



<p class="wp-block-paragraph">Here&#8217;s how the models perform differently for this:</p>



<ul class="wp-block-list">
<li><strong>GPT-4.1</strong>&nbsp;will return structured summaries. It&#8217;s reliable but sometimes misses nuanced formatting instructions (like specific date formats).</li>



<li><strong>GPT-5 Chat</strong>&nbsp;generally follows formatting instructions more precisely and provides richer, more contextual responses with natural suggestions.</li>



<li><strong>Claude Sonnet 4.5</strong>&nbsp;tends to produce more concise responses and is notably better at consistently following detailed response formatting rules.</li>
</ul>



<p class="wp-block-paragraph">In testing, Claude Sonnet 4.5 correctly formatted dates using a specific&nbsp;<code>MMM dd, yyyy</code>&nbsp;format when the other models occasionally slipped up. For a scenario where precise formatting matters — like structured candidate reports — that&#8217;s a meaningful difference.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/copilot-studio-token-usage/">How to Monitor Token Usage by AI Model in Copilot Studio</a></p>



<h2 class="wp-block-heading">One More Thing: You Can Mix Models in Multi-Agent Systems</h2>



<p class="wp-block-paragraph">If you&#8217;re building multi-agent systems in Copilot Studio (where one orchestrator agent calls specialized sub-agents), you don&#8217;t have to use the same model for everything. You can give different agents different models based on their role.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>Your&nbsp;<strong>orchestrator agent</strong>&nbsp;uses GPT-5 Auto for intelligent routing</li>



<li>Your&nbsp;<strong>document analysis agent</strong>&nbsp;uses GPT-5 Reasoning for deep document comprehension</li>



<li>Your&nbsp;<strong>chat-facing agent</strong>&nbsp;uses GPT-5 Chat for natural conversation</li>
</ul>



<p class="wp-block-paragraph">With the prompt tools in Copilot Studio, you can even mix Anthropic and OpenAI models across different tasks in the same workflow. This is powerful when you have diverse workloads with very different requirements.</p>



<h2 class="wp-block-heading">Wrapping Up</h2>



<p class="wp-block-paragraph">Choosing the right AI model in Copilot Studio doesn&#8217;t have to be complicated. The short version:</p>



<ul class="wp-block-list">
<li><strong>GPT-4.1</strong>&nbsp;is your solid, production-ready default for most agents</li>



<li><strong>GPT-5 Chat</strong>&nbsp;is the upgrade for more natural, conversational experiences</li>



<li><strong>GPT-5 Auto</strong>&nbsp;is what you want for complex automation workflows</li>



<li><strong>GPT-5 Reasoning / Claude Opus 4.1</strong>&nbsp;are for deep analytical and reasoning tasks</li>



<li><strong>Claude Sonnet 4.5</strong>&nbsp;shines at agentic workflows, code, and following detailed instructions</li>
</ul>



<p class="wp-block-paragraph">Start simple, test with real data, compare responses, and don&#8217;t be afraid to switch. The model dropdown is right there on your agent&#8217;s Overview tab — use it.</p>



<p class="wp-block-paragraph">If you&#8217;re using experimental or Claude models, loop in your admin early to make sure the environment settings are in place. Nothing is more frustrating than building out an agent only to find out your environment doesn&#8217;t have preview models enabled.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Components in Power Apps: A Practical Guide with a Real Header Example</title>
		<link>https://powerplatformfaqs.com/power-apps-components/</link>
		
		<dc:creator><![CDATA[Bijay]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 17:35:38 +0000</pubDate>
				<category><![CDATA[Power Apps]]></category>
		<category><![CDATA[Components in Power Apps]]></category>
		<guid isPermaLink="false">https://powerplatformfaqs.com/?p=1114</guid>

					<description><![CDATA[Power Apps components become much easier to understand when you stop thinking about them as a feature and start thinking about them as a way to avoid repeating yourself. The best example of this is a header. In many apps, I need the same top area again and again: a welcome message, the logged-in user’s ... <a title="Components in Power Apps: A Practical Guide with a Real Header Example" class="read-more" href="https://powerplatformfaqs.com/power-apps-components/" aria-label="Read more about Components in Power Apps: A Practical Guide with a Real Header Example">Read more &#62;&#62;</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong>Power Apps components</strong> become much easier to understand when you stop thinking about them as a feature and start thinking about them as a way to avoid repeating yourself. The best example of this is a header. In many apps, I need the same top area again and again: a welcome message, the logged-in user’s name, and maybe the user’s profile image.</p>



<p class="wp-block-paragraph">That is exactly the kind of thing a component is good at. So in this tutorial, I’m going to keep the focus on <strong>components inside a canvas app</strong>, and I’ll build the explanation around one realistic example: a reusable Header component that shows “Welcome” and the <a href="https://powerplatformfaqs.com/get-user-details-power-apps/" target="_blank" rel="noreferrer noopener">logged-in user name</a> on the left side, and on the right side shows the user image and the user name again.</p>



<h2 class="wp-block-heading">Why I Use Components in Power Apps</h2>



<p class="wp-block-paragraph">When I <a href="https://www.spguides.academy/" target="_blank" rel="noreferrer noopener">build Power Apps</a>, I usually notice the same pattern very quickly. I create one screen, then another, and then I end up copying the same controls across both screens. Maybe it is a header, maybe a footer, maybe a filter bar, maybe a popup.</p>



<p class="wp-block-paragraph">That works at first, but it becomes painful later.</p>



<p class="wp-block-paragraph">If I manually build the same header on five screens, and then I decide to change the layout, font size, spacing, or colors, I need to update all five versions. That is exactly the kind of repetitive work I try to avoid.</p>



<p class="wp-block-paragraph">A component solves that problem.</p>



<p class="wp-block-paragraph">I create the header once, design it properly, and then reuse it wherever I want. If I need to make a change later, I update the component once, and the rest of the app stays consistent.</p>



<p class="wp-block-paragraph">That is the simplest reason to use components:</p>



<ul class="wp-block-list">
<li>Less duplicate work.</li>



<li>Cleaner app design.</li>



<li>Easier maintenance.</li>



<li>More consistency across screens.</li>
</ul>



<p class="wp-block-paragraph">And honestly, that last one matters a lot. Users may not know what a component is, but they do notice when one screen looks slightly different from another.</p>



<h2 class="wp-block-heading">What Are Components in Power Apps</h2>



<p class="wp-block-paragraph">A component in Power Apps is a reusable building block that can contain controls, formulas, styles, and custom properties. Think of it as a self-contained mini app element that you can design once and use many times.</p>



<p class="wp-block-paragraph">Instead of placing ten labels, five icons, and a few buttons separately on every screen, I can wrap them into a component and reuse that component wherever needed. That saves time, keeps the design consistent, and makes future changes much easier.</p>



<p class="wp-block-paragraph">Components are most useful in canvas apps, where you often build reusable UI patterns such as:</p>



<ul class="wp-block-list">
<li>Headers.</li>



<li>Side navigation.</li>



<li>Dialog boxes.</li>



<li>Tabs.</li>



<li>Cards.</li>



<li>Status indicators.</li>



<li>Search bars.</li>



<li>Date or filter selectors.</li>
</ul>



<p class="wp-block-paragraph">The component can contain:</p>



<ul class="wp-block-list">
<li>Labels.</li>



<li>Icons.</li>



<li>Images.</li>



<li>Shapes.</li>



<li>Buttons.</li>



<li>Formulas.</li>



<li>Custom properties.</li>
</ul>



<p class="wp-block-paragraph">That last part is important. Custom properties are what make the component flexible. They let me pass different values into the component or get values out of it.</p>



<p class="wp-block-paragraph">The big idea is simple: build once, reuse everywhere.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/data-table-control-in-power-apps/">Data Table Control in Power Apps Canvas App</a></p>



<h2 class="wp-block-heading">Components vs Component Libraries in Power Apps</h2>



<p class="wp-block-paragraph">This is where many people get confused, so I like to keep it very simple.</p>



<p class="wp-block-paragraph">A&nbsp;<strong>component</strong>&nbsp;is the reusable object itself.</p>



<p class="wp-block-paragraph">A&nbsp;<strong>component library</strong>&nbsp;is a container where components can be stored and reused across multiple apps in Power Apps.</p>



<p class="wp-block-paragraph">If you only need a reusable element inside one Power Apps app, a local component may be enough. But if you want to reuse that same component in several apps in Power Apps, a component library is usually the better choice.</p>



<p class="wp-block-paragraph">Here is the practical difference:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">Item</th><th class="has-text-align-left" data-align="left">Best for</th><th class="has-text-align-left" data-align="left">Main advantage</th></tr></thead><tbody><tr><td>Local component</td><td>Reuse inside one app</td><td>Quick and simple</td></tr><tr><td>Component library</td><td>Reuse across multiple apps</td><td>Centralized maintenance</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">In real projects, I often start with a local component while designing. Once the pattern proves useful, I move it into a library so I can reuse it across future apps too.</p>



<h2 class="wp-block-heading">Power Apps Component Example</h2>



<p class="wp-block-paragraph">To make this practical, let’s use your exact scenario.</p>



<p class="wp-block-paragraph">I want to create a Header component with this layout:</p>



<p class="wp-block-paragraph"><strong>Left side</strong></p>



<ul class="wp-block-list">
<li>Text:&nbsp;<code>Welcome</code></li>



<li>Logged-in user name</li>
</ul>



<p class="wp-block-paragraph"><strong>Right side</strong></p>



<ul class="wp-block-list">
<li>Logged-in user image</li>
</ul>



<p class="wp-block-paragraph">So visually it might look like this:</p>



<p class="wp-block-paragraph"><strong>Left side:</strong><br>Welcome {User Name}</p>



<p class="wp-block-paragraph"><strong>Right side:</strong> [User Photo]</p>



<p class="wp-block-paragraph">This is actually a very useful example because it covers the most common things people want to do with components:</p>



<ul class="wp-block-list">
<li>Reuse a header on multiple screens.</li>



<li>Show logged-in user information.</li>



<li>Control layout inside a component.</li>



<li>Keep the app clean and consistent.</li>
</ul>



<p class="wp-block-paragraph">And the nice part is that Power Apps already gives us the user details we need through <a href="https://powerplatformfaqs.com/get-user-details-power-apps/" target="_blank" rel="noreferrer noopener">the&nbsp;<code>User()</code>&nbsp;function</a>.</p>



<p class="wp-block-paragraph">The most useful values are:</p>



<ul class="wp-block-list">
<li><code>User().FullName</code></li>



<li><code>User().Email</code></li>



<li><code>User().Image</code></li>
</ul>



<p class="wp-block-paragraph">That means I can use the current user’s name and image directly inside the component without making the app complicated.</p>



<h3 class="wp-block-heading">When I would use a component for this header</h3>



<p class="wp-block-paragraph">This header is a perfect case for a component if:</p>



<ul class="wp-block-list">
<li>I want the same header on multiple screens.</li>



<li>I want the same look and spacing everywhere.</li>



<li>I may change the design later.</li>



<li>I want a cleaner structure in the app.</li>
</ul>



<p class="wp-block-paragraph">If the app has only one screen and the header will never be reused, I could build it directly on the screen. But in most real-world apps, especially business apps, the header appears repeatedly.</p>



<p class="wp-block-paragraph">Examples:</p>



<ul class="wp-block-list">
<li>Home screen.</li>



<li>Dashboard screen.</li>



<li>Request form screen.</li>



<li>Approval screen.</li>



<li>Details screen.</li>
</ul>



<p class="wp-block-paragraph">If the same header appears in these places, I almost always turn it into a component.</p>



<h3 class="wp-block-heading">What this header component should contain</h3>



<p class="wp-block-paragraph">Before building any component, I like to decide what belongs inside it.</p>



<p class="wp-block-paragraph">For this header, I would include:</p>



<ul class="wp-block-list">
<li>A background shape, usually a rectangle or container.</li>



<li>A label for “Welcome”.</li>



<li>A label for the user’s full name on the left side.</li>



<li>An image control for the user&#8217;s photo on the right side.</li>
</ul>



<p class="wp-block-paragraph">You can keep it simple at first. The point is not to make the header fancy. The point is to make it reusable.</p>



<p class="wp-block-paragraph">A clean header is usually better than an overloaded one.</p>



<h3 class="wp-block-heading">Step-by-step: Create the Header component</h3>



<p class="wp-block-paragraph">Now let’s build it.</p>



<h4 class="wp-block-heading"><strong>Step 1:</strong> Open your canvas app</h4>



<p class="wp-block-paragraph">Open your app in Power Apps Studio. Here, I have created a responsive Canvas app.</p>



<h4 class="wp-block-heading"><strong>Step 2:</strong> Make sure components are available</h4>



<p class="wp-block-paragraph">In most apps, components are available by default. If you don’t see the Components area, check the app settings and confirm components are enabled.</p>



<h4 class="wp-block-heading"><strong>Step 3:</strong> Create a new component</h4>



<p class="wp-block-paragraph">In the tree view, create a new component.</p>



<p class="wp-block-paragraph">I would rename it immediately to something meaningful, such as:</p>



<ul class="wp-block-list">
<li><code>cmpHeader</code></li>



<li><code>cmpAppHeader</code></li>



<li><code>cmpUserHeader</code></li>
</ul>



<p class="wp-block-paragraph">I prefer names that clearly tell me what the component does.</p>



<p class="wp-block-paragraph">For this example, I’ll use&nbsp;<code>cmpHeader</code>. You can see the screenshot below. I have created a component.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="441" height="345" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-components-tutorial.jpg" alt="Power Apps components tutorial" class="wp-image-1132" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-components-tutorial.jpg 441w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-components-tutorial-300x235.jpg 300w" sizes="(max-width: 441px) 100vw, 441px" /></figure>
</div>


<h4 class="wp-block-heading"><strong>Step 4:</strong> Set the size</h4>



<p class="wp-block-paragraph">Set the component width and height.</p>



<p class="wp-block-paragraph">A common starting point could be:</p>



<ul class="wp-block-list">
<li>Width:&nbsp;<code>App.Width</code></li>



<li>Height:&nbsp;<code>80</code>&nbsp;or&nbsp;<code>90</code></li>
</ul>



<p class="wp-block-paragraph">If I want the header to stretch across the app, using&nbsp;<code>App.Width</code>&nbsp;is usually a good option.</p>



<p class="wp-block-paragraph">Optionally, you can set a background color for the header using the Fill property. I chose a dark blue color for the header component background.</p>



<h4 class="wp-block-heading"><strong>Step 5:</strong> Add the “Welcome” label</h4>



<p class="wp-block-paragraph">Insert a label on the left side.</p>



<p class="wp-block-paragraph">Set the Text property to:</p>



<pre class="wp-block-preformatted">"Welcome" &amp; User().FullName</pre>



<p class="wp-block-paragraph">Here, User().FullName gives the logged-in user’s full name.</p>



<p class="wp-block-paragraph">Here, I used the Font color property to change the font color to white.</p>



<h4 class="wp-block-heading"><strong>Step 6:</strong> Add the user image on the right</h4>



<p class="wp-block-paragraph">Insert an Image control on the right side.</p>



<p class="wp-block-paragraph">Set its Image property to:</p>



<pre class="wp-block-preformatted">User().Image</pre>



<p class="wp-block-paragraph">This shows the logged-in user’s profile image, as long as it is available in Microsoft 365.</p>



<p class="wp-block-paragraph">Here, I adjusted the X property as:</p>



<pre class="wp-block-code"><code>Parent.Width-Self.Width-5</code></pre>



<p class="wp-block-paragraph">Then make the size to 80 * 80.</p>



<p class="wp-block-paragraph">If you want to give the image a rounded look, change the Border radius to 50.</p>



<p class="wp-block-paragraph">You can see the screenshot below of how the header component looks:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="368" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/how-to-use-components-in-Power-Apps-1-1024x368.jpg" alt="how to use components in Power Apps" class="wp-image-1148" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/how-to-use-components-in-Power-Apps-1-1024x368.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/how-to-use-components-in-Power-Apps-1-300x108.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/how-to-use-components-in-Power-Apps-1-768x276.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/how-to-use-components-in-Power-Apps-1.jpg 1426w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">At this stage, the component is already functional. And we can use it on our screens.</p>



<p class="wp-block-paragraph">Read <a href="https://powerplatformfaqs.com/set-control-value-in-button-click-on-power-apps/">Set Control Value in Button Click on Power Apps</a></p>



<h2 class="wp-block-heading">How to Use the Component on a Power Apps Screen</h2>



<p class="wp-block-paragraph">Now, let me show you how to use the component on a Power Apps screen.</p>



<ul class="wp-block-list">
<li>Open the screen where you want to add the component. In our case, I want to add the component to the header container.</li>



<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;">Click the + icon, then under the&nbsp;<strong>Custom</strong>&nbsp;category, select the component, as shown</span> in the screenshot below.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="953" height="798" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-canvas-Power-Apps.jpg" alt="create components in canvas Power Apps" class="wp-image-1149" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-canvas-Power-Apps.jpg 953w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-canvas-Power-Apps-300x251.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-canvas-Power-Apps-768x643.jpg 768w" sizes="(max-width: 953px) 100vw, 953px" /></figure>
</div>


<ul class="wp-block-list">
<li>Once you have added successfully, you can see the header component appears as below. In the same way, you can add the component to other screens also.</li>



<li>You can also adjust the width if it overlaps, like the Width property as <em>App</em>.Width-40</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="475" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-reusable-UI-components-in-Power-Apps-1024x475.jpg" alt="create reusable UI components in Power Apps" class="wp-image-1150" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-reusable-UI-components-in-Power-Apps-1024x475.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-reusable-UI-components-in-Power-Apps-300x139.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-reusable-UI-components-in-Power-Apps-768x356.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-reusable-UI-components-in-Power-Apps.jpg 1398w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">This is how to create and use components in Power Apps.</p>



<h2 class="wp-block-heading">Power Apps Component Properties</h2>



<p class="wp-block-paragraph">The real power of Power Apps components comes from custom properties. These allow the parent app and the component to communicate with each other.</p>



<p class="wp-block-paragraph">Component properties are what make a component flexible.</p>



<p class="wp-block-paragraph">Without properties, a component is mostly fixed.<br>With properties, a component becomes reusable in different ways.</p>



<p class="wp-block-paragraph">There are three property types a beginner should know:</p>



<ul class="wp-block-list">
<li><strong>Input properties</strong></li>



<li><strong>Output properties</strong></li>



<li><strong>Behavior properties</strong></li>
</ul>



<p class="wp-block-paragraph">Let me explain each one simply.</p>



<h3 class="wp-block-heading">Input Properties</h3>



<p class="wp-block-paragraph">An&nbsp;<strong>input property</strong>&nbsp;is a value that goes&nbsp;<strong>into</strong>&nbsp;the component.</p>



<p class="wp-block-paragraph">In simple words, the screen gives something to the component.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>A greeting text</li>



<li>A title</li>



<li>A color</li>



<li>A true/false value</li>



<li>A name</li>



<li>An image</li>
</ul>



<p class="wp-block-paragraph">So if I want the header to show different greetings on different screens, I should not hardcode “Welcome” forever. Instead, I can create an input property.</p>



<h4 class="wp-block-heading">Example</h4>



<p class="wp-block-paragraph">Suppose I create an input property called:</p>



<ul class="wp-block-list">
<li><code>GreetingText</code></li>
</ul>



<p class="wp-block-paragraph">Now, instead of setting the label text to:</p>



<pre class="wp-block-preformatted">"Welcome"</pre>



<p class="wp-block-paragraph">I can set it to:</p>



<pre class="wp-block-preformatted">cmpHeader.GreetingText</pre>



<p class="wp-block-paragraph">Then from one screen I can pass:</p>



<pre class="wp-block-preformatted">"Welcome"</pre>



<p class="wp-block-paragraph">And from another screen I can pass:</p>



<pre class="wp-block-preformatted">"Hello"</pre>



<p class="wp-block-paragraph">Same component, different text.</p>



<h4 class="wp-block-heading">Where to Create an Input Property</h4>



<p class="wp-block-paragraph">Here is the exact flow:</p>



<ul class="wp-block-list">
<li>Select the&nbsp;<strong>component</strong>&nbsp;itself, not a label or image inside it. Go to the option for&nbsp;<strong>custom properties</strong>. Here is the screenshot for your reference.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="416" height="675" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-Power-Apps.jpg" alt="create components in Power Apps" class="wp-image-1152" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-Power-Apps.jpg 416w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/create-components-in-Power-Apps-185x300.jpg 185w" sizes="(max-width: 416px) 100vw, 416px" /></figure>
</div>


<ul class="wp-block-list">
<li>Click&nbsp;<strong>New custom property</strong>. Enter the property name, such as&nbsp;<strong>GreetingText</strong>.</li>



<li>Choose&nbsp;<strong>Input</strong>&nbsp;as the property type.</li>



<li>Choose the data type, such as&nbsp;<strong>Text</strong>. Save it. Here is the screenshot for your reference.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="730" height="766" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/custom-components-in-Power-Apps.jpg" alt="custom components in Power Apps" class="wp-image-1153" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/custom-components-in-Power-Apps.jpg 730w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/custom-components-in-Power-Apps-286x300.jpg 286w" sizes="(max-width: 730px) 100vw, 730px" /></figure>
</div>


<p class="wp-block-paragraph">The property is now available for the component.</p>



<p class="wp-block-paragraph">For this header example, you can add more useful input properties:</p>



<ul class="wp-block-list">
<li><code>GreetingText</code>&nbsp;– Text</li>



<li><code>HeaderFillColor</code>&nbsp;– Color</li>



<li><code>HeaderTextColor</code>&nbsp;– Color</li>



<li><code>ShowUserPhoto</code>&nbsp;– Boolean</li>
</ul>



<p class="wp-block-paragraph">Now, we need to change the greeting message. In the same component, select the Text label and change the Text property to this:</p>



<pre class="wp-block-code"><code>Parent.GreetingText&amp;" " &amp; User().FullName</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="486" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-1024x486.jpg" alt="Power Apps component input properties" class="wp-image-1154" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-1024x486.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-300x142.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-768x364.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties.jpg 1111w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>Now, go to the screen where you have used the component, and change the GreetingText property to &#8220;Welcome&#8221;. Now, you can see how it appears below:</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="450" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1024x450.jpg" alt="Power Apps component input properties examples" class="wp-image-1155" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1024x450.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-300x132.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-768x338.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples.jpg 1333w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>Now, you can see I have added two components, and you can see I can give different <strong>GreetingText</strong>. Here is a screenshot for your reference.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="450" src="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1-1024x450.jpg" alt="Power Apps component input properties examples" class="wp-image-1156" srcset="https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1-1024x450.jpg 1024w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1-300x132.jpg 300w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1-768x338.jpg 768w, https://powerplatformfaqs.com/wp-content/uploads/2026/05/Power-Apps-component-input-properties-examples-1.jpg 1333w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">This is how to use the input component properties in Power Apps.</p>



<h3 class="wp-block-heading">Output Properties</h3>



<p class="wp-block-paragraph">An&nbsp;<strong>output property</strong>&nbsp;is a value that comes&nbsp;<strong>out of</strong>&nbsp;the component.</p>



<p class="wp-block-paragraph">In simple terms, the component returns something to the screen.</p>



<p class="wp-block-paragraph">This is useful when something happens inside the component, and the screen needs that result.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>A text entered inside the component</li>



<li>A selected item</li>



<li>A chosen tab</li>



<li>A value calculated inside the component</li>
</ul>



<p class="wp-block-paragraph">A very simple way to understand it</p>



<p class="wp-block-paragraph">If input means:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Screen gives data to component”</p>
</blockquote>



<p class="wp-block-paragraph">Then output means:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Component gives data back to screen”</p>
</blockquote>



<h4 class="wp-block-heading">Example output property idea</h4>



<p class="wp-block-paragraph">Suppose the component had a search box.</p>



<p class="wp-block-paragraph">Then I could create an output property called:</p>



<ul class="wp-block-list">
<li><code>SearchText</code></li>
</ul>



<p class="wp-block-paragraph">And return the text entered in the text input.</p>



<p class="wp-block-paragraph">That way, the parent screen can use:</p>



<pre class="wp-block-preformatted">cmpHeader.SearchText</pre>



<p class="wp-block-paragraph">to filter a Power Apps gallery.</p>



<h4 class="wp-block-heading">Where to create an output property</h4>



<ol class="wp-block-list">
<li>Select the component.</li>



<li>Go to&nbsp;<strong>Custom properties</strong>.</li>



<li>Click&nbsp;<strong>New custom property</strong>.</li>



<li>Give it a name like&nbsp;<strong>SearchText</strong>.</li>



<li>Choose&nbsp;<strong>Output</strong>.</li>



<li>Choose the data type, such as&nbsp;<strong>Text</strong>.</li>



<li>Save it.</li>
</ol>



<p class="wp-block-paragraph">Then link that property to the control value inside the component.</p>



<p class="wp-block-paragraph">For a fresher, the easiest way to remember it is:</p>



<ul class="wp-block-list">
<li><strong>Input</strong>&nbsp;= screen to component</li>



<li><strong>Output</strong>&nbsp;= component to screen</li>
</ul>



<h2 class="wp-block-heading">Behavior Properties</h2>



<p class="wp-block-paragraph">A&nbsp;<strong>behavior property</strong>&nbsp;is used when the component needs to trigger an action.</p>



<p class="wp-block-paragraph">This one is slightly different from input and output.</p>



<p class="wp-block-paragraph">It is not mainly for passing data.<br>It is for doing something.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>Clicking a button</li>



<li>Opening a popup</li>



<li>Navigating somewhere</li>



<li>Running logic on select</li>
</ul>



<h4 class="wp-block-heading">A Practical Example</h4>



<p class="wp-block-paragraph">Suppose I add a small icon in the header for profile settings.</p>



<p class="wp-block-paragraph">When the user clicks it, I want the parent screen to decide what should happen.</p>



<p class="wp-block-paragraph">Maybe:</p>



<ul class="wp-block-list">
<li>Open a popup</li>



<li>Navigate to Profile screen</li>



<li>Show a menu</li>
</ul>



<p class="wp-block-paragraph">In that case, I create a behavior property like:</p>



<ul class="wp-block-list">
<li><code>OnProfileClick</code></li>
</ul>



<p class="wp-block-paragraph">Then I connect that property to the icon’s&nbsp;<strong>OnSelect</strong>.</p>



<p class="wp-block-paragraph">So the component handles the click, but the screen decides what action should happen.</p>



<h4 class="wp-block-heading">Where to create a behavior property</h4>



<ol class="wp-block-list">
<li>Select the component.</li>



<li>Go to&nbsp;<strong>Custom properties</strong>.</li>



<li>Click&nbsp;<strong>New custom property</strong>.</li>



<li>Name it something like&nbsp;<strong>OnProfileClick</strong>.</li>



<li>Choose&nbsp;<strong>Behavior</strong>&nbsp;or&nbsp;<strong>Event</strong>, depending on what the studio shows.</li>



<li>Save it.</li>
</ol>



<p class="wp-block-paragraph">Then use that property in the control’s behavior formula.</p>



<p class="wp-block-paragraph">An easy way to remember behavior properties</p>



<p class="wp-block-paragraph">If input and output are about data, behavior is about&nbsp;<strong>actions</strong>.</p>



<p class="wp-block-paragraph">That is the simplest way to think about it.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/power-apps-concatenate-strings/">Power Apps Concatenate Strings</a></p>



<h3 class="wp-block-heading">A Beginner-Friendly Way to Remember All Three Properties</h3>



<p class="wp-block-paragraph">This is the easiest explanation I use:</p>



<ul class="wp-block-list">
<li><strong>Input property</strong>&nbsp;= I send something into the component.</li>



<li><strong>Output property</strong>&nbsp;= I get something back from the component.</li>



<li><strong>Behavior property</strong>&nbsp;= I make the component do something.</li>
</ul>



<p class="wp-block-paragraph">If you remember just that, you are already in a good place.</p>



<h2 class="wp-block-heading">A Better Version of This Header with Input Properties</h2>



<p class="wp-block-paragraph">Now let me make the example a little smarter, but still beginner-friendly.</p>



<p class="wp-block-paragraph">Instead of hardcoding everything, I can add these input properties:</p>



<ul class="wp-block-list">
<li><code>GreetingText</code></li>



<li><code>HeaderFillColor</code></li>



<li><code>HeaderTextColor</code></li>



<li><code>ShowUserPhoto</code></li>
</ul>



<p class="wp-block-paragraph">Then I can use them like this</p>



<p class="wp-block-paragraph">For the welcome label:</p>



<pre class="wp-block-preformatted">cmpHeader.GreetingText</pre>



<p class="wp-block-paragraph">For the background fill:</p>



<pre class="wp-block-preformatted">cmpHeader.HeaderFillColor</pre>



<p class="wp-block-paragraph">For label text color:</p>



<pre class="wp-block-preformatted">cmpHeader.HeaderTextColor</pre>



<p class="wp-block-paragraph">For the image visibility:</p>



<pre class="wp-block-preformatted">cmpHeader.ShowUserPhoto</pre>



<p class="wp-block-paragraph">Now this same component becomes much more flexible.</p>



<p class="wp-block-paragraph">On one screen, I can say:</p>



<ul class="wp-block-list">
<li>GreetingText = “Welcome”</li>
</ul>



<p class="wp-block-paragraph">On another screen:</p>



<ul class="wp-block-list">
<li>GreetingText = “Hello”</li>
</ul>



<p class="wp-block-paragraph">And I still use the same component.</p>



<p class="wp-block-paragraph">That is exactly why custom properties are so important.</p>



<h3 class="wp-block-heading">How to Use the Component on a Screen</h3>



<p class="wp-block-paragraph">Once the component is ready, here is what a beginner should do next.</p>



<ol class="wp-block-list">
<li>Go to any screen in the app.</li>



<li>Insert the component.</li>



<li>Place it at the top of the screen.</li>



<li>Resize it if needed.</li>



<li>Set any custom input properties you created.</li>
</ol>



<p class="wp-block-paragraph">For example, if you created&nbsp;<code>GreetingText</code>, select the component on the screen and set:</p>



<pre class="wp-block-preformatted">"Welcome"</pre>



<p class="wp-block-paragraph">If you created&nbsp;<code>HeaderFillColor</code>, set it to a color such as:</p>



<pre class="wp-block-preformatted">RGBA(0, 120, 212, 1)</pre>



<p class="wp-block-paragraph">Now the component is working from the screen level.</p>



<p class="wp-block-paragraph">This is the point where most beginners suddenly understand components. They see that the component is not stuck with one design. It can be reused and configured.</p>



<p class="wp-block-paragraph">Check out <a href="https://powerplatformfaqs.com/patch-function-in-power-apps/">Patch Function in Power Apps</a></p>



<h2 class="wp-block-heading">When to Use&nbsp;<code>User()</code>&nbsp;Directly and When to Use Input Properties</h2>



<p class="wp-block-paragraph">This is another question beginners often have.</p>



<h3 class="wp-block-heading">Use&nbsp;<code>User()</code>&nbsp;directly inside the component when:</h3>



<ul class="wp-block-list">
<li>You always want the logged-in user’s details</li>



<li>You want the simplest setup</li>



<li>The component is specifically meant for the signed-in user</li>
</ul>



<h3 class="wp-block-heading">Use input properties when:</h3>



<ul class="wp-block-list">
<li>You want the parent screen to control the values</li>



<li>You may reuse the component for another person later</li>



<li>You want more flexibility</li>
</ul>



<p class="wp-block-paragraph">For this beginner header example, using&nbsp;<code>User().FullName</code>&nbsp;and&nbsp;<code>User().Image</code>&nbsp;directly is perfectly fine.</p>



<p class="wp-block-paragraph">It keeps the example simple and easy to follow.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph"><strong>Power Apps components</strong> are a simple but powerful way to make your apps cleaner, more reusable, and easier to maintain. In this tutorial, I showed how a Header component can display a welcome message, the logged-in user name, and the user image in a neat layout that you can reuse across screens.</p>



<p class="wp-block-paragraph">The main idea is to build once and reuse many times. Once you get comfortable with components, you will spend less time repeating the same controls and more time building better app experiences. Do let me know in the comments below if this helps to you.</p>



<p class="wp-block-paragraph">You may also like the following tutorials:</p>



<ul class="wp-block-list">
<li><a href="https://powerplatformfaqs.com/power-apps-checkbox/">Power Apps Modern Checkbox Control</a></li>



<li><a href="https://powerplatformfaqs.com/power-apps-modern-date-picker-with-time/">Power Apps Modern Date Picker with Time</a></li>



<li><a href="https://powerplatformfaqs.com/sequence-function-in-power-apps/">Sequence Function in Power Apps</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: powerplatformfaqs.com @ 2026-07-12 12:50:24 by W3 Total Cache
-->