Microsoft Power Platform · The Complete Learning Hub

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.

0
Core Products
0+
Data Connectors
0
Fx Functions Documented
0
Playground Records
0
Interview Questions
0
Real Scenarios
01 The Platform

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.

/01
Pa

Power Apps

Build custom apps

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.

  • Canvas apps
  • Model-driven apps
  • Power Fx
  • Custom pages
EXPLORE FUNCTIONS & DOCS
/02
Pf

Power Automate

Automate workflows

Cloud 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
EXPLORE FUNCTIONS & DOCS
/03
Bi

Power BI

Analyze & visualize

Turn 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
EXPLORE FUNCTIONS & DOCS
/04
Pp

Power Pages

External portals

Build 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
EXPLORE FUNCTIONS & DOCS
/05
Cs

Copilot Studio

AI agents & bots

Create conversational copilots and autonomous agents with generative AI, topics, and actions that call Power Automate flows and connectors.

  • Generative answers
  • Topics
  • Agents
  • Channels
EXPLORE FUNCTIONS & DOCS
/06
Dv

Dataverse

The data backbone

The 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
EXPLORE FUNCTIONS & DOCS
02 Learning Path

From first app
to solution architect.

A proven route through the ecosystem — each step maps to an official Microsoft certification.

1

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.

2

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.

3

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.

4

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.

5

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.

03 Live Playground

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.

Output
// Press RUN or Ctrl/Cmd + Enter to evaluate.
// Try: Concatenate("Hello ", "Maker")
// Or pick a sample from the dropdown ↑
99 functions live in this engine: Text (Concatenate, Concat, Text, Upper, Lower, Proper, Trim, TrimEnds, Len, Left, Right, Mid, StartsWith, EndsWith, Find, Substitute, Replace, Split, Char, IsMatch, EncodeUrl) · Math (Sum, Average, Min, Max, Round, RoundUp, RoundDown, Trunc, Int, Abs, Sqrt, Power, Mod, Rand, RandBetween) · Dates (Today, Now, Date, Time, Year, Month, Day, Hour, Minute, Weekday, DateAdd, DateDiff, DateValue, TimeValue, DateTimeValue, IsToday) · Logic (If, Switch, And, Or, Not, IsBlank, IsBlankOrError, IsEmpty, IsNumeric, Coalesce, IfError, With) · Tables (Filter, Search, LookUp, Sort, SortByColumns, Distinct, GroupBy, Ungroup, AddColumns, ShowColumns, DropColumns, RenameColumns, First, Last, FirstN, LastN, Index, ForAll, Sequence, Count, CountA, CountRows, CountIf) · Behavior (Set, UpdateContext, Collect, ClearCollect, Clear, Remove, Patch, Defaults, Notify, Navigate, Reset) · records {a:1} · tables [1,2,3] · datasets: Employees (100), Orders (100)
04 Code Library

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.

POWER FX
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);
POWER FX
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
POWER FX
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
)
POWER FX
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
EXPRESSION
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')
EXPRESSION
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')
EXPRESSION
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'])
ODATA
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')}
DAX
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 )
DAX
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] )
    )
)
M
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
M
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
JAVASCRIPT
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");
JAVASCRIPT
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
REST
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" }
LIQUID
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 %}
05 Power Fx Function Reference

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.

06 Real-Life Scenarios

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.

HR · Enterprise

Employee Onboarding Automation

01
The Problem

New hires waited 3+ days for laptops, accounts and access. HR tracked everything in spreadsheets and email threads.

Solution Stack
Power AutomateDataverseApprovalsTeams + OutlookAdaptive Cards
Impact

▲ Day-1 readiness 98% · 12 hrs saved per hire

  1. Trigger: new row in Dataverse "Onboarding" table (created from a Power Apps form by HR).
  2. Parallel branches: IT ticket via ServiceNow connector, AD account via Graph API, hardware approval to manager.
  3. Adaptive Card posted to the manager in Teams with Approve/Reject buttons.
  4. Reminders: scheduled flow nudges outstanding tasks 24h before start date.
  5. Reporting: Power BI dashboard over Dataverse shows cycle time per department.
Finance · Mobile

Expense Approval Canvas App

02
The Problem

Field staff photographed receipts and emailed them; finance re-keyed amounts. Month-end close took 9 days.

Solution Stack
Canvas AppAI Builder OCRSharePointApproval flowPower BI
Impact

▲ Close time 9 → 3 days · zero manual entry

  1. Capture: mobile canvas app with camera control; AI Builder receipt processor extracts merchant, date, total.
  2. Validate: Power Fx rules flag policy violations (>$100 meals, weekend claims).
  3. Route: conditional approval — manager if <$1k, finance director above.
  4. Sync: approved rows flow to the ERP (SAP connector) as journal entries.
  5. Analyze: embedded Power BI tile shows spend by category inside the app.
Retail · Analytics

Executive Sales Command Center

03
The Problem

Leadership made decisions on week-old Excel exports. No single view of pipeline vs. actuals across 40 stores.

Solution Stack
Power BIDataflowsStar schemaRow-level securityTeams embed
Impact

▲ Refresh daily 6am · one source of truth

  1. Ingest: dataflows pull POS, CRM and inventory data nightly into a Lakehouse.
  2. Model: star schema — FactSales + DimDate/Store/Product; measures in DAX (YTD, vs LY, basket size).
  3. Secure: row-level security so regional managers see only their stores.
  4. Distribute: report embedded in a Teams tab + mobile layout for phones.
  5. Alert: data-driven alerts fire a Power Automate flow when a store drops >10% vs target.
Public Sector · Portal

Citizen Service Portal + AI Assistant

04
The Problem

A city council handled 40k calls/month for permits, complaints and status checks. Phone queues averaged 25 minutes.

Solution Stack
Power PagesCopilot StudioDataverseEntra ID / B2CWeb API
Impact

▲ 62% of queries deflected to self-service

  1. Portal: Power Pages site with permit application forms bound to Dataverse, Liquid templates for dynamic pages.
  2. Identity: citizens sign in with Azure AD B2C; table permissions scope rows to the signed-in contact.
  3. Copilot: Copilot Studio bot embedded on the site answers FAQs via generative AI over council documents.
  4. Escalation: unresolved chats create Dataverse cases and route to agents in a model-driven app.
  5. Status tracking: citizens see live case status via secure lists — no phone call needed.
Manufacturing · Field

Offline Equipment Inspection App

05
The Problem

Technicians inspected machinery in plants with no connectivity, logging results on paper and re-entering them weekly.

Solution Stack
Canvas App (offline)DataverseBarcode scannerSaveData/LoadDataFlow sync
Impact

▲ 100% digital audits · 6 hrs/tech/week saved

  1. Scan: technician scans the machine's barcode; app looks up the asset in Dataverse.
  2. Offline-first: checklists cached with SaveData/LoadData; results queued in a local collection.
  3. Evidence: photos + defect annotations captured via camera and pen input controls.
  4. Sync: on reconnection, a flow patches queued records and flags critical defects to supervisors instantly.
  5. Trending: Power BI defect heatmap per production line guides preventive maintenance.
Legal · AI

Intelligent Invoice Processing Pipeline

06
The Problem

2,000 PDF invoices/month arrived by email. AP clerks typed each one into the finance system — error rate ~4%.

Solution Stack
AI BuilderPower AutomateDataverseOutlook triggerException app
Impact

▲ 91% touchless · error rate 4% → 0.3%

  1. Trigger: flow fires when an email with attachment lands in invoices@contoso.com.
  2. Extract: custom AI Builder document model pulls vendor, PO#, line items, totals.
  3. Match: 3-way match against PO + goods-receipt in Dataverse; tolerance ±2%.
  4. Exceptions: low-confidence or mismatched invoices land in a model-driven review queue app.
  5. Post: clean invoices post directly to Dynamics 365 Finance via virtual tables / OData.
07 Interview Prep

Questions interviewers
actually ask.

Real interview questions with model answers, filtered by topic and tagged by difficulty. Click any question to reveal the answer.

08 Resources

Everything else
you'll ever need.

Official docs, free learning paths, communities and the creator channels the pros actually follow.

PL-900
Live · Fundamentals
Power Platform Fundamentals
AB-900
New 2026 · Fundamentals
Copilot & Agent Administration
PL-300
Live · Associate
Power BI Data Analyst
PL-400
Live · Expert
Power Platform Developer
PL-200/500/600
⚠ Retiring 2026
Jun 30 & Aug 31 deadlines