Build apps. Automate work. Analyze everything. Master the Power Platform.
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.
Six products.
One connected ecosystem.
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.
Power Apps
Build custom appsCreate 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.
- Canvas apps
- Model-driven apps
- Power Fx
- Custom pages
Power Automate
Automate workflowsCloud flows for event-driven & scheduled automation, desktop flows (RPA) for legacy UI automation, and business process flows for guided stages.
- Cloud flows
- Desktop flows / RPA
- Approvals
- Expressions
Power BI
Analyze & visualizeTurn raw data into interactive reports and dashboards. Model with Power Query (M), calculate with DAX, and share securely across your org.
- DAX
- Power Query / M
- Semantic models
- Dashboards
Power Pages
External portalsBuild secure, external-facing websites over Dataverse. Design with the studio, extend with Liquid templates, JavaScript and Web APIs.
- Portals studio
- Liquid
- Web roles
- Lists & forms
Copilot Studio
AI agents & botsCreate conversational copilots and autonomous agents with generative AI, topics, and actions that call Power Automate flows and connectors.
- Generative answers
- Topics
- Agents
- Channels
Dataverse
The data backboneThe managed data platform underneath it all: tables, relationships, business rules, security roles — plus a full Web API for pro developers.
- Tables & columns
- Security roles
- Web API / OData
- Plugins
From first app
to solution architect.
A proven route through the ecosystem — each step maps to an official Microsoft certification.
Foundations PL-900 · AB-900
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.
App Maker PL-300 · APPLIED SKILLS
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.
Functional Consultant PL-200 ⚠ RETIRING AUG 2026
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.
Pro Developer PL-400
Extend with code: PCF components, plugins (C#), JavaScript form scripts, custom connectors, Web API integrations and Azure services. DevOps with pipelines.
Solution Architect PL-600 ⚠ RETIRING JUN 2026
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.
Write code. Run it. Right here.
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.
// Try: Concatenate("Hello ", "Maker")
// Or pick a sample from the dropdown ↑
Copy-ready snippets for
every language in the stack.
Power Fx formulas, Automate expressions, DAX measures, Power Query M, Dataverse Web API and Liquid — tested patterns you can paste straight into your solutions.
Patch — create a Dataverse record
// 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 — search + filter + sort
// 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
Validate form before submit
// 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 )
Collections & ForAll loops
// 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
Dates & time in flows
// 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')
Conditionals & null-safety
// 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')
Array magic (no loops)
// 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'])
Filter queries (delegable)
// 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')}
Core measures with CALCULATE
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 )
Rank & running total
Product Rank = RANKX ( ALLSELECTED ( 'Product'[Name] ), [Total Sales], , DESC, Dense ) Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) )
Power Query — clean & shape
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
Custom column + unpivot
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
Dataverse Web API — CRUD
// 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");
Form scripting — onChange logic
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
Web API via HTTP (flows / Postman)
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" }
Power Pages — secure data loop
{% 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 %}
Every function.
Searchable. Runnable.
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.
How teams actually ship
Power Platform solutions.
Six production-grade architectures from real industries. Expand any card to see the end-to-end build sequence.
Employee Onboarding Automation
01New 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
- Trigger: new row in Dataverse "Onboarding" table (created from a Power Apps form by HR).
- Parallel branches: IT ticket via ServiceNow connector, AD account via Graph API, hardware approval to manager.
- Adaptive Card posted to the manager in Teams with Approve/Reject buttons.
- Reminders: scheduled flow nudges outstanding tasks 24h before start date.
- Reporting: Power BI dashboard over Dataverse shows cycle time per department.
Expense Approval Canvas App
02Field staff photographed receipts and emailed them; finance re-keyed amounts. Month-end close took 9 days.
▲ Close time 9 → 3 days · zero manual entry
- Capture: mobile canvas app with camera control; AI Builder receipt processor extracts merchant, date, total.
- Validate: Power Fx rules flag policy violations (>$100 meals, weekend claims).
- Route: conditional approval — manager if <$1k, finance director above.
- Sync: approved rows flow to the ERP (SAP connector) as journal entries.
- Analyze: embedded Power BI tile shows spend by category inside the app.
Executive Sales Command Center
03Leadership made decisions on week-old Excel exports. No single view of pipeline vs. actuals across 40 stores.
▲ Refresh daily 6am · one source of truth
- Ingest: dataflows pull POS, CRM and inventory data nightly into a Lakehouse.
- Model: star schema — FactSales + DimDate/Store/Product; measures in DAX (YTD, vs LY, basket size).
- Secure: row-level security so regional managers see only their stores.
- Distribute: report embedded in a Teams tab + mobile layout for phones.
- Alert: data-driven alerts fire a Power Automate flow when a store drops >10% vs target.
Citizen Service Portal + AI Assistant
04A city council handled 40k calls/month for permits, complaints and status checks. Phone queues averaged 25 minutes.
▲ 62% of queries deflected to self-service
- Portal: Power Pages site with permit application forms bound to Dataverse, Liquid templates for dynamic pages.
- Identity: citizens sign in with Azure AD B2C; table permissions scope rows to the signed-in contact.
- Copilot: Copilot Studio bot embedded on the site answers FAQs via generative AI over council documents.
- Escalation: unresolved chats create Dataverse cases and route to agents in a model-driven app.
- Status tracking: citizens see live case status via secure lists — no phone call needed.
Offline Equipment Inspection App
05Technicians inspected machinery in plants with no connectivity, logging results on paper and re-entering them weekly.
▲ 100% digital audits · 6 hrs/tech/week saved
- Scan: technician scans the machine's barcode; app looks up the asset in Dataverse.
- Offline-first: checklists cached with SaveData/LoadData; results queued in a local collection.
- Evidence: photos + defect annotations captured via camera and pen input controls.
- Sync: on reconnection, a flow patches queued records and flags critical defects to supervisors instantly.
- Trending: Power BI defect heatmap per production line guides preventive maintenance.
Intelligent Invoice Processing Pipeline
062,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%
- Trigger: flow fires when an email with attachment lands in invoices@contoso.com.
- Extract: custom AI Builder document model pulls vendor, PO#, line items, totals.
- Match: 3-way match against PO + goods-receipt in Dataverse; tolerance ±2%.
- Exceptions: low-confidence or mismatched invoices land in a model-driven review queue app.
- Post: clean invoices post directly to Dynamics 365 Finance via virtual tables / OData.
Questions interviewers
actually ask.
Real interview questions with model answers, filtered by topic and tagged by difficulty. Click any question to reveal the answer.
Everything else
you'll ever need.
Official docs, free learning paths, communities and the creator channels the pros actually follow.
Microsoft Learn ↗
Free, hands-on learning paths & sandbox modules for every product and exam.
Power Apps Docs ↗
Canvas & model-driven reference, Power Fx function library, delegation tables.
Power Automate Docs ↗
Connector reference, expression guide, desktop flow (RPA) documentation.
Power BI Docs ↗
DAX reference, modeling guidance, Fabric integration and embedding APIs.
Power Platform Community ↗
Official forums — ask questions, find gallery samples, join user groups.
Creator Channels ↗
Shane Young, Reza Dorrani, April Dunnam, Leila Gharani — free deep-dive videos.
XrmToolBox ↗
Essential Windows app with 200+ tools for Dataverse admin & development.
GitHub Samples + CoE Kit ↗
Microsoft's open-source samples, templates and the CoE Starter Kit for governance.
Maker Portal ↗
Start building — sign up for the free Developer Plan to get your own environment.