/
Power Fx Cheat Sheet
Quick-reference formulas for Canvas App developers. Copy, paste, ship.
34 formulas across 8 categories
Format date
Text(Today(), "[$-en-US]mmmm d, yyyy")Relative time
If(
DateDiff(dt, Now(), TimeUnit.Minutes) < 60,
Text(DateDiff(dt, Now(), TimeUnit.Minutes)) & " min ago",
Text(DateDiff(dt, Now(), TimeUnit.Hours)) & " hr ago"
)Date range filter (last 30 days)
Filter(Items, Created >= DateAdd(Today(), -30, TimeUnit.Days))First / last day of month
// First day
Date(Year(Today()), Month(Today()), 1)
// Last day
DateAdd(Date(Year(Today()), Month(Today()) + 1, 1), -1, TimeUnit.Days)Business days between dates
With(
{d1: startDate, d2: endDate},
DateDiff(d1, d2, TimeUnit.Days)
- 2 * Int(DateDiff(d1, d2, TimeUnit.Days) / 7)
)Currency
Text(12500, "$#,###.00") // → "$12,500.00"Abbreviate large numbers
If(
v >= 1000000, Text(v / 1000000, "#.#") & "M",
If(v >= 1000, Text(v / 1000, "#.#") & "K", Text(v))
)Truncate with ellipsis
If(Len(txt) > 50, Left(txt, 47) & "...", txt)Extract initials
Upper(
Left(name, 1) &
If(Find(" ", name) > 0, Mid(name, Find(" ", name) + 1, 1), "")
)Proper case
Proper(Lower(text))Add computed column
AddColumns(Items, "FullName", FirstName & " " & LastName)Group by
GroupBy(Items, "Category", "GroupItems")Distinct values
Distinct(Items, Category)Sort multi-column
SortByColumns(Items, "Priority", SortOrder.Ascending, "Date", SortOrder.Descending)Remove duplicates
ForAll(Distinct(colItems, Title), LookUp(colItems, Title = Result))Delegation-safe search
// StartsWith is delegable — Contains is NOT
Filter(Items, StartsWith(Title, searchText))CountRows workaround
// CountIf is delegable, CountRows is not
CountIf(Items, true)Cache with ClearCollect
ClearCollect(colLocal, Filter(DataSource, Status = "Active"))Concurrent loading
Concurrent(
ClearCollect(col1, Source1),
ClearCollect(col2, Source2),
ClearCollect(col3, Source3)
)Patch to SharePoint with error check
Set(varResult,
Patch(
YourSharePointList,
Defaults(YourSharePointList),
{
Title: txtTitle.Value,
Status: {Value: "Active"},
AssignedTo: drpAssignee.Selected
}
)
);
If(
IsError(varResult),
Notify("Save failed: " & FirstError.Message, NotificationType.Error),
Notify("Saved successfully", NotificationType.Success);
Navigate(scrList, ScreenTransition.None)
)Edit existing SharePoint item
Set(varResult,
Patch(
YourSharePointList,
LookUp(YourSharePointList, ID = varSelectedId),
{
Title: txtTitle.Value,
Status: {Value: drpStatus.Selected.Value}
}
)
);
If(IsError(varResult),
Notify("Update failed: " & FirstError.Message, NotificationType.Error),
Notify("Updated", NotificationType.Success)
)IfError with fallback value
IfError(
LookUp(Items, ID = varId),
Notify("Not found", NotificationType.Error);
Blank()
)Validate before Patch
If(
IsBlank(txtTitle.Value),
Notify("Title is required", NotificationType.Warning),
IsBlank(drpStatus.Selected),
Notify("Select a status", NotificationType.Warning),
// All valid — save
Patch(YourSharePointList, Defaults(YourSharePointList),
{Title: txtTitle.Value, Status: drpStatus.Selected}
);
Notify("Saved", NotificationType.Success)
)Coalesce for defaults
Coalesce(varUser, "Unknown")Breakpoints
If(App.Width < 640, "mobile", If(App.Width < 1024, "tablet", "desktop"))Responsive padding
If(App.Width < 640, 12, 24)Responsive columns
If(App.Width < 640, 1, If(App.Width < 1024, 2, 4))Max-width centering
Min(Parent.Width - 48, 1200)Color theme
nfColors = {
pageBg: ColorValue("#F9FAFB"),
cardBg: ColorValue("#FFFFFF"),
primary: ColorValue("#2563EB"),
danger: ColorValue("#DC2626")
};Responsive check
nfIsMobile = App.Width < 640;User info
nfCurrentUser = {
Name: User().FullName,
Email: User().Email,
Initials: Upper(Left(User().FullName, 1))
};