An HR coordinator opens an employee directory to find everyone who joined during a particular week. Instead of scrolling through hundreds of records, they choose a start date and an end date, and the employee gallery updates immediately.
I have built this pattern in many Canvas apps, including HR onboarding apps, leave management trackers, approval dashboards, and SharePoint-based employee directories. A well-designed date filter makes records easier to find, but an incorrect formula can hide valid records, fail on date-time columns, or return incomplete results from a large SharePoint list.
This step-by-step Power Apps tutorial shows how to filter an Employees SharePoint list with a Date Picker, handle blank dates, filter date ranges, sort results, and avoid common production issues.
Let’s discuss how to filter Power Apps data with a Date Picker using various examples.
Set Up Power Apps Filter With Date Picker
Here, we will build a date filter on a Canvas app gallery connected to the Employees SharePoint list.
Our example uses a SharePoint list i.e. Employees, with these columns:
| SharePoint column | Type | Example value |
|---|---|---|
| Full Name | Single line of text | John Smith |
| Employee ID | Single line of text | TS-001 |
| Single line of text | [email protected] | |
| Department | Choice | IT |
| Office | Choice | Seattle |
| Status | Choice | Active |
| Joining Date | Date and time | 3/18/2025 |
| Salary | Currency | 85,000 |

The main field for this article is Joining Date. It stores the date when each employee joined the company.
Before you build the formula, add the Employees list as a data source to your app. If you have not created the app yet, follow this guide to create a Canvas app from a SharePoint list.
Add these controls to a screen:
- A vertical Gallery named
galEmployees - A Date Picker named
dpJoiningDate - A second Date Picker named
dpEndDates - A Button named
btnClearDates - A Label named
lblResultCount
Set the Items property of galEmployees to:
Employees

At this point, the gallery should show every employee. You can use this guide on the Power Apps Gallery control if you need help displaying SharePoint list records.
Use clear control names
Control names matter in a real app. Names such as DatePicker1, DatePicker2, and Gallery1 work during early testing, but they become difficult to manage when the app grows.
I recommend names that explain the control’s purpose:
galEmployees
dpJoiningDate
dpEndDates
btnClearDates
lblResultCount
These names make every formula easier to read. When another developer opens the app six months later, they can quickly understand what each control does.
For example, compare these two formulas:
Filter(
Employees,
'Joining Date' = DatePicker1.SelectedDate
)
Filter(
Employees,
'Joining Date' = dpJoiningDate.SelectedDate
)
The second formula is easier to maintain because it explains the business purpose of the selected date.
Pro Tip: I rename controls before building formulas. In my experience, clear names reduce formula mistakes and save time when you return to an app after several weeks.
Filter Power Apps Data With Date Picker
The simplest requirement is filtering employees by one selected joining date. For example, HR may need to find everyone who joined on 18 March 2025.
Select the Gallery control, then set its Items property to:
Filter(
Employees,
'Joining Date' = dpJoiningDate.SelectedDate
)

This formula does the following:
Employeesis your SharePoint list data source'Joining Date'is the SharePoint date columndpJoiningDate.SelectedDateis the date chosen by the userFilter()returns only matching employee records
If the user selects 18 March 2025, the gallery displays employees whose Joining Date equals 18 March 2025.
This formula works well when the SharePoint column stores a date without a time. However, many SharePoint date columns store both a date and a time. That changes how you should build the filter.
Handle SharePoint date and time values
A Date and time column stores more information than a Date Picker. For example, SharePoint may store an employee’s joining date like this:
18/03/2025 12:00 AM
Or it may store an approval request date like this:
18/03/2025 10:42 AM
The Date Picker returns a date at midnight. If your SharePoint record has a time value, an exact equality check may fail even though both values show the same calendar date on the screen.
For a date-time field, use a range that includes the complete selected day:
Filter(
Employees,
'Joining Date' >= dpJoiningDate.SelectedDate &&
'Joining Date' < DateAdd(
dpJoiningDate.SelectedDate,
1,
TimeUnit.Days
)
)

This formula includes every employee whose Joining Date falls on the selected day.
For example, if the user selects 18 March 2025, the formula looks for records from:
18 March 2025, 12:00 AM
up to, but not including:
19 March 2025, 12:00 AM
This pattern handles every time value during the selected date. It is the formula I use most often for SharePoint date-time columns.
You can also use the Date Picker to set defaults, validate dates, and save values. Read this guide to set a default date in Power Apps Date Picker before adding default filter logic.
Filter Power Apps Data With Date Picker Range
A single date helps HR find employees who joined on one day. A date range works better for most business reporting needs.
For example, HR may want to see employees who joined between 1 March 2025 and 31 March 2025. The same approach works for leave requests, expense approvals, service tickets, project records, and employee onboarding tasks.
Use two Date Picker controls:
dpJoiningDatefor the start datedpEndDates for the end date
Set the Items property of galEmployees to:
Filter(
Employees,
'Joining Date' >= dpJoiningDate.SelectedDate &&
'Joining Date' < DateAdd(
dpEndDates.SelectedDate,
1,
TimeUnit.Days
)
)

This formula filters records from the selected start date through the entire selected end date.
The less-than operator is important:
'Joining Date' < DateAdd(dpEndDate.SelectedDate, 1, TimeUnit.Days)
It includes all times during the end date without requiring you to guess the exact time. It also avoids issues that appear when a record stores 11:59 PM or a different time zone value.
Support optional start and end dates
Users often want flexible filtering. They may select only a start date, only an end date, both dates, or neither date.
Set the Items property of galEmployees to this formula:
Filter(
Employees,
IsBlank(dpJoiningDate.SelectedDate) ||
'Joining Date' >= dpJoiningDate.SelectedDate,
IsBlank(dpEndDate.SelectedDate) ||
'Joining Date' < DateAdd(
dpEndDate.SelectedDate,
1,
TimeUnit.Days
)
)
This formula handles all four business cases:
| User selection | Gallery result |
|---|---|
| No start date and no end date | Shows all employees |
| Start date only | Shows employees who joined on or after that date |
| End date only | Shows employees who joined on or before that date |
| Both dates | Shows employees within the selected date range |
The comma between conditions inside Filter() acts like an And condition. Each employee must meet every active condition.
This flexible formula works especially well in a dashboard. HR users can quickly answer questions such as:
- Who joined this month?
- Who joined during the last quarter?
- Which employees started before a particular company event?
- How many people joined before the hiring freeze?Pro Tip: I always support blank start and end dates in reporting screens. Users rarely follow one fixed reporting pattern, and forcing both date inputs creates unnecessary clicks.
Validate an invalid date range
Users can accidentally select an end date before the start date. For example, they may choose 31 March as the start date and 1 March as the end date.
Add this formula to a label’s Visible property:
!IsBlank(dpJoiningDate.SelectedDate) &&
!IsBlank(dpEndDates.SelectedDate) &&
dpEndDates.SelectedDate < dpJoiningDate.SelectedDate
Set the label’s Text property to:
End date must be on or after the start date.
You can also stop the gallery from showing misleading data. Use this formula for galEmployees.Items:
If(
!IsBlank(dpJoiningDate.SelectedDate) &&
!IsBlank(dpEndDates.SelectedDate) &&
dpEndDates.SelectedDate < dpJoiningDate.SelectedDate,
Filter(Employees, false),
Filter(
Employees,
IsBlank(dpJoiningDate.SelectedDate) ||
'Joining Date' >= dpJoiningDate.SelectedDate,
IsBlank(dpEndDates.SelectedDate) ||
'Joining Date' < DateAdd(
dpEndDates.SelectedDate,
1,
TimeUnit.Days
)
)
)
When the date range is invalid, Filter(Employees, false) returns no records. This prevents HR staff from interpreting an incorrect list as a valid search result.
For date input rules in forms, see Power Apps form field validation on submit.
Filter Employees Joined Today
Some HR teams need a quick “new employees today” view. You can build this without requiring the user to select a date.
Set the Items property of the Gallery to:
Filter(
Employees,
'Joining Date' >= Today() &&
'Joining Date' < DateAdd(
Today(),
1,
TimeUnit.Days
)
)

The Today() function returns today’s date. The DateAdd() function creates tomorrow’s date. Together, these conditions return all records created or joined today.
You can also create a button named Show Today’s Joiners. Set its OnSelect property to:
Set(varStartDate, Today());
Set(varEndDate, Today());
Reset(dpJoiningDate);
Reset(dpEndDate)
Then set the DefaultDate property of dpJoiningDate to:
varStartDate
Set the DefaultDate property of dpEndDate to:
varEndDate
This pattern lets users choose a quick filter without losing the ability to select any custom date range later.
If you want more date formula examples, read how to get the current date in Power Apps and Power Apps date and time functions.
Combine Date Picker With Other Filters
Real HR apps usually need more than one filter. The Employees list contains Department, Office, Status, and Joining Date, so HR staff may want to find active IT employees who joined during a given period.
Assume the screen includes these dropdown controls:
ddDepartment
ddOffice
ddStatus
Each dropdown includes a readable first option such as “All Departments,” “All Offices,” and “All Statuses.”
Set the Items property of galEmployees to:
Filter(
Employees,
ddDepartment.Selected.Value = "All Departments" ||
Department.Value = ddDepartment.Selected.Value,
ddOffice.Selected.Value = "All Offices" ||
Office.Value = ddOffice.Selected.Value,
ddStatus.Selected.Value = "All Statuses" ||
Status.Value = ddStatus.Selected.Value,
IsBlank(dpJoiningDate.SelectedDate) ||
'Joining Date' >= dpJoiningDate.SelectedDate,
IsBlank(dpEndDate.SelectedDate) ||
'Joining Date' < DateAdd(
dpEndDates.SelectedDate,
1,
TimeUnit.Days
)
)
This is a practical multi-filter pattern for an employee directory:
- The Department filter checks the SharePoint Choice record with
Department.Value - The Office filter checks
Office.Value - The Status filter checks
Status.Value - The first Date Picker sets the lowest joining date
- The second Date Picker sets the highest joining date
If the user selects IT, Seattle, Active, 1 January 2025, and 31 December 2025, the Gallery shows only active Seattle-based IT employees who joined in 2025.
To build the dropdown part correctly, read how to filter a Power Apps gallery with multiple dropdowns. You can also use this guide for Power Apps dropdown filters.
Add a result count
A result count helps users understand what the filters returned. Add a Label and set its Text property to:
CountRows(galEmployees.AllItems) & " employee(s) found"

If five records match, the label displays:
5 employee(s) found
This is useful when users apply several filters and need instant feedback. It also makes an empty gallery easier to understand.
For a large SharePoint list, remember that gallery item counts may reflect the records loaded into the app, not always the full data source. Always test with realistic production data.
Sort Filtered Results by Joining Date
After filtering records, HR usually wants to see the newest joiners first. Wrap the existing Filter() formula inside SortByColumns().
Use this formula in galEmployees.Items:
SortByColumns(
Filter(
Employees,
IsBlank(dpJoiningDate.SelectedDate) ||
'Joining Date' >= dpJoiningDate.SelectedDate,
IsBlank(dpEndDate.SelectedDate) ||
'Joining Date' < DateAdd(
dpEndDates.SelectedDate,
1,
TimeUnit.Days
)
),
"Joining_x0020_Date",
SortOrder.Descending
)
SharePoint often converts spaces in internal column names. A column displayed as Joining Date may use this internal name:
Joining_x0020_Date
You must use the actual internal name in SortByColumns(). The SharePoint display name and internal name may differ, especially when someone renamed a column after creating it.
SortOrder.Descending displays the newest employees first. Use SortOrder.Ascending to show the earliest joiners first.
Before you add complex sorting, test with the actual SharePoint list. Column names often cause formula errors that look unrelated to sorting.
Pro Tip: I check the internal SharePoint column name before writing a
SortByColumns()formula. Renaming a SharePoint column changes its display name, but it does not always update the internal name that Power Apps uses.
Reset Date Picker Filters in Power Apps
A clear button makes the screen easier to use. HR users should not need to manually remove each selected date after every search.
First, set the DefaultDate property for both date pickers:
Blank()
For the start Date Picker:
dpJoiningDate.DefaultDate = Blank()
For the end Date Picker:
dpEndDate.DefaultDate = Blank()
Then set the OnSelect property of btnClearDates to:
Reset(dpJoiningDate);
Reset(dpEndDate)

The Reset() function returns each control to its configured default value. Since both defaults are blank, the controls clear their selected dates.
If your app uses variables for quick filters, clear those variables too:
Set(varStartDate, Blank());
Set(varEndDate, Blank());
Reset(dpJoiningDate);
Reset(dpEndDate)
This prevents old variable values from appearing again after the user clears the controls.
You can explore more reset examples in this guide on how to reset a Power Apps Date Picker.
Save Selected Dates With Patch
Sometimes users need to save selected dates rather than only filter records. For example, an HR manager might select an employee from the gallery and update their Joining Date.
Use the Patch function to update the selected employee:
Patch(
Employees,
galEmployees.Selected,
{
'Joining Date': dpJoiningDate.SelectedDate
}
);
Notify(
"Joining date updated successfully.",
NotificationType.Success
)
This formula updates the Joining Date for the employee selected in galEmployees.
Employeesidentifies the SharePoint listgalEmployees.Selectedidentifies the existing employee record'Joining Date'identifies the date column to updatedpJoiningDate.SelectedDatesupplies the selected dateNotify()shows a success message
For a new employee record, use Defaults(Employees):
Patch(
Employees,
Defaults(Employees),
{
Title: txtEmployeeName.Text,
'Employee ID': txtEmployeeID.Text,
'Joining Date': dpJoiningDate.SelectedDate,
Department: {
Value: ddDepartment.Selected.Value
},
Status: {
Value: "Active"
}
}
)
This creates a new Employees list item. The formula sends text to text fields and a record to the SharePoint Choice field.
If you need more details, read how to patch a Power Apps Date Picker and how to add an item to a SharePoint list from Power Apps.
Useful Tips
- Date versus date-time columns: Use an inclusive start date and exclusive next-day end date for SharePoint date-time fields. Exact equality often misses records that store a time.
- Blank date handling: Build formulas that support blank Date Picker values when users need flexible reporting. Otherwise, the gallery can appear empty before the user selects a date.
- Delegation warnings: Delegation means Power Apps sends supported queries to SharePoint instead of downloading only a limited number of records. Test date filters against large lists and review Power Apps delegation warnings before publishing.
- Time zone differences: A SharePoint date-time value can display differently for users in different time zones. Use date-only columns for employee joining dates unless your process truly needs an exact time.
- Internal column names: Use the correct SharePoint internal name when
SortByColumns()requires it. A renamed display name may not work in a formula. - SharePoint permissions: Filtering records does not secure them. Configure SharePoint list permissions so users can only access employee data that their role allows.
Frequently Asked Questions
How do I filter a Power Apps gallery by a Date Picker?
Set the Gallery Items property to a Filter() formula that compares your SharePoint date column with DatePicker.SelectedDate. For a date-only field, use direct equality. For a date-time field, use a start-of-day and next-day range.
Why does my Date Picker filter not show records in Power Apps?
Your SharePoint field may include a time value, while the Date Picker returns midnight. Use >= SelectedDate and < DateAdd(SelectedDate, 1, TimeUnit.Days) to match all records from the selected calendar day.
How do I filter Power Apps data between two dates?
Add two Date Picker controls and filter with a start-date condition and an exclusive next-day end-date condition. This approach includes records from the complete final day, even when the SharePoint field contains a time.
How do I show all records when the Date Picker is blank?
Use an IsBlank() condition inside the Filter formula. For example, use IsBlank(dpJoiningDate.SelectedDate) || 'Joining Date' >= dpJoiningDate.SelectedDate so the condition does not restrict records when the control is blank.
Can I filter a SharePoint list by today’s date in Power Apps?
Yes. Use Today() as the start of the range and DateAdd(Today(), 1, TimeUnit.Days) as the next-day boundary. This pattern works reliably with both SharePoint date-only and date-time values.
How do I clear a Power Apps Date Picker filter?
Set the Date Picker DefaultDate property to Blank(), then use Reset(DatePickerName) in a Clear button’s OnSelect property. Reset both controls if you use a date range.
You may also like:
- Create a custom calendar in Power Apps
- Power Apps Gallery Filter
- Filter a Power Apps gallery by month
- Filter a Power Apps gallery by week
- Filter a Power Apps gallery by year
- Create a gallery from a SharePoint list in Power Apps
A Power Apps Filter With Date Picker becomes reliable when you account for SharePoint date-time values, optional selections, full date ranges, and sorting. Start with a simple Gallery filter, then use flexible blank-date logic and next-day boundaries for a production-ready HR search screen. I hope you found this article helpful.

Preeti Sahu is an expert in Power Apps and has over six years of experience working with SharePoint Online and the Power Platform. She is the co-author of Microsoft Power Platform: A Deep Dive book. As a Power Platform developer, she has worked on developing various tools using Power Apps and Power Automate. She also makes Microsoft 365 videos and shares them on YouTube.
Hi Bijay. I’ve got so much out of your content and I’m truly grateful for your help.
I wonder if I could pose a question?
I’m building a booking/reservation system and I’ve been struggling with filtering two drop down controls using a date picker control.
Each drop down is connected to a separate SharePoint list and the ‘DatePicker’ control is ‘patching’ to a 3rd list that contains all of the bookings/reservations of the items in the other two lists.
I need to filter those drop down list items based on whether or not an item has already been made for the list item on the [DateSelected] value of the ‘DatePicker’ control.
Here’s what I’ve got so far but isn’t working due to the error below…
Filter(Desks,Not(‘Title’ in Filter(Desk_Booking,Reservation_Date = DatePicker.SelectedDate).Desk))
…”Power Apps can’t convert this Text to a Record”.
That error is specific to the ‘Title’ value in the first Filter function.
Title refers to the title column in the ‘Desks’ list and .Desk refers to the use of that title column value in the main ‘Desk_Booking’ list.
I’ll need to repeat this logic for the 2nd of the two drop downs so that both selections are constrained by the available resources for the selected date.
Can you see my mistake?
N03L.