One hub for everything Power Platform — Power Apps, Power Automate, Power BI, Power Pages and Copilot Studio. Learn with guided paths, run real code in the browser playground, copy production-ready snippets, study real-world architectures, and drill interview questions.
Power Platform is Microsoft's low-code stack. Every product below connects to Dataverse and 1,400+ connectors — learn them individually, then combine them to build end-to-end business solutions.
Create canvas apps with pixel-perfect drag-and-drop UI, or model-driven apps generated from your Dataverse data model. Powered by the Power Fx formula language.
Cloud flows for event-driven & scheduled automation, desktop flows (RPA) for legacy UI automation, and business process flows for guided stages.
Turn raw data into interactive reports and dashboards. Model with Power Query (M), calculate with DAX, and share securely across your org.
Build secure, external-facing websites over Dataverse. Design with the studio, extend with Liquid templates, JavaScript and Web APIs.
Create conversational copilots and autonomous agents with generative AI, topics, and actions that call Power Automate flows and connectors.
The managed data platform underneath it all: tables, relationships, business rules, security roles — plus a full Web API for pro developers.
A proven route through the ecosystem — each step maps to an official Microsoft certification.
Understand the business value of each product, Dataverse, connectors and AI Builder. PL-900 is the live entry exam (never expires). New for 2026: AB-900 — Copilot & Agent Administration Fundamentals for the AI track. Build your first canvas app and cloud flow in a free developer environment. Time: 2–4 weeks.
Go deep on one track: canvas apps + Power Fx via Microsoft's Applied Skills credentials (PL-100 was retired in 2024), or data modeling + DAX (PL-300, still live). Learn delegation, collections, variables, and publishing/sharing patterns.
Model-driven apps, Dataverse design (tables, relationships, security roles), business process flows, and Copilot Studio bots. Note: PL-200 retires Aug 31, 2026 — only attempt if you can pass before then; otherwise follow the incoming AB-role successor credentials. Solution packaging & ALM basics.
Extend with code: PCF components, plugins (C#), JavaScript form scripts, custom connectors, Web API integrations and Azure services. DevOps with pipelines.
Design enterprise solutions: environment strategy, DLP policies, governance (CoE Starter Kit), integration patterns, licensing, and leading delivery teams. PL-600 retires Jun 30, 2026 — architect-level AB credentials are rolling out as successors through 2026.
A real Power Fx expression engine running in your browser with IntelliSense autocomplete, syntax highlighting and line numbers — evaluating against two 100-record datasets (Employees & Orders). Hit ? help to explain any function at your cursor, and 🗄 data to browse the tables. Switch to JavaScript for PCF-style coding.
Power Fx formulas, Automate expressions, DAX measures, Power Query M, Dataverse Web API and Liquid — tested patterns you can paste straight into your solutions.
// Button OnSelect — insert + notify Patch(Employees, Defaults(Employees), { Name: txtName.Text, Department: ddDept.Selected.Value, Salary: Value(txtSalary.Text) } ); Notify("Employee created ✅", NotificationType.Success); Reset(txtName); Reset(txtSalary);
// Gallery.Items property SortByColumns( Filter(Employees, (IsBlank(txtSearch.Text) Or StartsWith(Name, txtSearch.Text)), (ddDept.Selected.Value = "All" Or Department = ddDept.Selected.Value) ), "Name", SortOrder.Ascending )⌁ try a live version in the playground
// Button DisplayMode — disable until valid If( And( Not(IsBlank(Trim(txtName.Text))), IsMatch(txtEmail.Text, Match.Email), Value(txtSalary.Text) > 0 ), DisplayMode.Edit, DisplayMode.Disabled )
// Screen OnVisible — cache + transform ClearCollect(colTeam, Filter(Employees, Department = "IT")); ForAll(colTeam, Collect(colEmails, { Mail: Lower(FirstName & "." & LastName & "@contoso.com") }));⌁ try a live version in the playground
// Common date expressions utcNow() // current UTC timestamp addDays(utcNow(), 7, 'yyyy-MM-dd') // +7 days, formatted convertTimeZone(utcNow(), 'UTC', 'India Standard Time', 'dd-MMM hh:mm tt') formatDateTime(addHours( triggerBody()?['CreatedOn'], 2), 'g')
// Safe navigation + fallback with coalesce coalesce( triggerBody()?['Approver']?['DisplayName'], 'No approver assigned') // Inline if — approve anything under $5k if(lessOrEquals( float(outputs('Get_Invoice')?['body/Amount']), 5000), 'Auto-Approved', 'Needs Manager')
// Distinct values without Apply-to-each union( body('Select_Departments'), body('Select_Departments')) // Join names with comma for an email body join(body('Select_Names'), ', ') // First item / count helpers first(body('Filter_array')) length(outputs('Get_items')?['body/value'])
// SharePoint "Get items" → Filter Query field Status eq 'Pending' and Amount gt 1000 substringof('urgent', Title) Created ge @{addDays(utcNow(),-30,'yyyy-MM-dd')} // Dataverse "List rows" → Filter rows statecode eq 0 and prioritycode eq 1 createdon ge @{formatDateTime( addDays(utcNow(),-7),'yyyy-MM-dd')}
Total Sales = SUM ( Sales[Amount] ) Sales YTD = CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) Sales vs LY % = VAR LY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LY, LY )
Product Rank = RANKX ( ALLSELECTED ( 'Product'[Name] ), [Total Sales], , DESC, Dense ) Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) )
let Source = Csv.Document(File.Contents("C:\data\orders.csv"), [Delimiter=",", Encoding=65001]), Promoted = Table.PromoteHeaders(Source), Typed = Table.TransformColumnTypes(Promoted, {{"Amount", Currency.Type}, {"OrderDate", type date}}), Clean = Table.SelectRows(Typed, each [Amount] <> null and [Amount] > 0) in Clean
let Source = Excel.CurrentWorkbook() {[Name="SalesTable"]}[Content], WithMargin = Table.AddColumn(Source, "Margin", each [Revenue] - [Cost], type number), Unpivoted = Table.UnpivotOtherColumns( WithMargin, {"Region"}, "Measure", "Value") in Unpivoted
// Create a record (model-driven form / PCF) const account = { name: "Contoso Ltd", revenue: 1500000 }; await Xrm.WebApi.createRecord("account", account); // Query with OData const res = await Xrm.WebApi.retrieveMultipleRecords( "account", "?$select=name,revenue" + "&$filter=revenue gt 100000" + "&$orderby=revenue desc&$top=5");
function onIndustryChange(executionContext) { const form = executionContext.getFormContext(); const industry = form.getAttribute("industrycode").getValue(); if (industry === 1) { // Accounting form.getControl("creditlimit") .setNotification("Requires CFO approval", "warn1"); } else { form.getControl("creditlimit") .clearNotification("warn1"); } }⌁ run JS in the playground
GET https://org.crm.dynamics.com/api/data/v9.2/
accounts?$select=name&$top=3
Authorization: Bearer eyJ0eXAiOi...
OData-MaxVersion: 4.0
Prefer: odata.maxpagesize=50
PATCH .../api/data/v9.2/accounts(<guid>)
Content-Type: application/json
{ "telephone1": "555-0199",
"description": "Updated via Web API" }
{% fetchxml openTickets %}
<fetch top="5">
<entity name="incident">
<attribute name="title" />
<filter><condition attribute="statecode"
operator="eq" value="0" /></filter>
</entity>
</fetch>
{% endfetchxml %}
{% for case in openTickets.results.entities %}
<li>{{ case.title | escape }}</li>
{% endfor %}
The complete Power Fx function library — search it, filter by category, read the syntax, and run every example live in the playground against real data. Based on the official Microsoft Learn reference.
Six production-grade architectures from real industries. Expand any card to see the end-to-end build sequence.
New hires waited 3+ days for laptops, accounts and access. HR tracked everything in spreadsheets and email threads.
▲ Day-1 readiness 98% · 12 hrs saved per hire
Field staff photographed receipts and emailed them; finance re-keyed amounts. Month-end close took 9 days.
▲ Close time 9 → 3 days · zero manual entry
Leadership made decisions on week-old Excel exports. No single view of pipeline vs. actuals across 40 stores.
▲ Refresh daily 6am · one source of truth
A city council handled 40k calls/month for permits, complaints and status checks. Phone queues averaged 25 minutes.
▲ 62% of queries deflected to self-service
Technicians inspected machinery in plants with no connectivity, logging results on paper and re-entering them weekly.
▲ 100% digital audits · 6 hrs/tech/week saved
2,000 PDF invoices/month arrived by email. AP clerks typed each one into the finance system — error rate ~4%.
▲ 91% touchless · error rate 4% → 0.3%
Real interview questions with model answers, filtered by topic and tagged by difficulty. Click any question to reveal the answer.
Official docs, free learning paths, communities and the creator channels the pros actually follow.
Free, hands-on learning paths & sandbox modules for every product and exam.
Canvas & model-driven reference, Power Fx function library, delegation tables.
Connector reference, expression guide, desktop flow (RPA) documentation.
DAX reference, modeling guidance, Fabric integration and embedding APIs.
Official forums — ask questions, find gallery samples, join user groups.
Shane Young, Reza Dorrani, April Dunnam, Leila Gharani — free deep-dive videos.
Essential Windows app with 200+ tools for Dataverse admin & development.
Microsoft's open-source samples, templates and the CoE Starter Kit for governance.
Start building — sign up for the free Developer Plan to get your own environment.