The DAX function NETWORKDAYS(StartDate, EndDate [, Holidays]) returns the count of working days between two dates in Power BI, automatically excluding Saturdays and Sundays and counting both endpoints when they land on a weekday. For example, NETWORKDAYS(DATE(2025,1,6), DATE(2025,1,10)) returns 5 because Monday through Friday of the same week are all counted, the same convention used by Excel's NETWORKDAYS. The optional third argument accepts a single-column table or column reference of dates to subtract as holidays, and any holiday that lands on a Saturday or Sunday is ignored because that day was already excluded. Because the function executes inside the Power BI engine, the result refreshes with the model and can be dropped into a measure, a calculated column, or a card visual without extra plumbing. This makes NETWORKDAYS the most direct path for SLA reports, payroll summaries, and shipping dashboards built on top of a date table.

how to calculate business days in power bi
Calculate Business Days in Power BI with NETWORKDAYS

Why Business Days Matter in Power BI Reports

Calendar arithmetic is rarely what stakeholders actually want. A contract SLA measured in raw days inflates the figure with weekends that nobody was ever on the clock. A shipping estimate that ends on a Sunday makes the carrier look late when the package simply waited for Monday. A payroll run that includes Saturday and Sunday quietly overpays by two days a week. Working-day math solves all three at once, and Power BI exposes it through the NETWORKDAYS and NETWORKDAYS.INTL DAX functions.

For reporting teams, the typical use cases line up like this:

  • SLA turnaround measured in working hours or days between an order date and a delivery date.
  • Payroll and billable-day summaries scoped to the days staff were actually on duty.
  • Project deadline countdowns that respect weekends and named holidays.
  • Customer-support first-response metrics expressed in business hours.
  • Procurement and lead-time dashboards that compare vendor promises to actual working-day performance.

How the NETWORKDAYS DAX Function Works

NETWORKDAYS has exactly three arguments: a start date, an end date, and an optional single-column table of holiday dates. Both endpoints are treated as inclusive, so a Monday-to-Friday range in the same week always returns 5, never 4. The function counts every weekday strictly between the two dates and then adds 1 for the start date if it is itself a weekday, plus 1 for the end date if it is itself a weekday. Holidays in the third argument are subtracted one-for-one, but only if they fall inside the range and on a weekday; a holiday that lands on a Saturday or Sunday changes nothing because that day was already excluded, and a duplicate date in the holiday table is also ignored.

NETWORKDAYS is hard-coded to a Monday-through-Friday working week. If your organization runs a different schedule, NETWORKDAYS.INTL swaps the implicit weekend mask for an integer or string you supply, where each of the seven bits represents one day of the week. Weekend mask 7 keeps the standard Sat–Sun weekend, mask 6 shifts to Sun–Thu for Middle East operations, and a string like "0000011" lets you mark Friday and Saturday as the weekend.

AspectNETWORKDAYSNETWORKDAYS.INTL
Weekend definitionAlways Saturday and SundayConfigurable via weekend mask argument
Required argumentsStart date, end dateStart date, end date, weekend mask
Holiday supportOptional third argumentOptional fourth argument
Best fitStandard Western business calendarsCustom shifts, regional calendars, four-day workweeks
Introduced in DAXOriginal Power BI versionAdded in later DAX updates

How to Calculate Business Days in Power BI

The fastest way to add a business-day measure to a Power BI report is to create a measure against an existing date table. If your model already has a marked date table with continuous dates from your earliest order to your latest delivery, the following steps walk through a typical setup.

  1. Open your report in Power BI Desktop and switch to the data view so you can see the table that holds your order dates and delivery dates.
  2. Verify a marked date table exists. Go to the Modeling tab, select your date table, and confirm "Mark as date table" is set with a date column. NETWORKDAYS expects real date values, not text.
  3. Create a new measure. Right-click your fact table or sales table in the Fields pane and choose "New measure" from the Modeling ribbon.
  4. Enter the DAX formula Business Days = NETWORKDAYS(MIN('Sales'[OrderDate]), MAX('Sales'[DeliveryDate])) for a summary measure, or use NETWORKDAYS('Sales'[OrderDate], 'Sales'[DeliveryDate]) for a row-level calculated column.
  5. Add the measure to a visual such as a card, table, or matrix. The number refreshes whenever the model refreshes and respects all row, filter, and slicer context the visual receives.
  6. Test a same-week edge case by filtering OrderDate and DeliveryDate to Monday and Friday of the same week. The measure should return 5, not 4, because NETWORKDAYS is inclusive on both ends.

For a worked example with concrete numbers, consider a single order placed on Monday, 6 January 2025 and delivered on Friday, 10 January 2025. With no holidays in range, the formula becomes NETWORKDAYS(DATE(2025,1,6), DATE(2025,1,10)). The five weekdays Mon, Tue, Wed, Thu, and Fri are all counted, so the result is 5. If the end date had been Sunday, 12 January, the result would still be 5, because Sunday is excluded and only the five weekdays inside the range contribute.

Adding a Holiday Table to NETWORKDAYS

Real reporting usually needs to subtract public holidays as well. The cleanest pattern is to keep a small disconnected table of holiday dates and reference it in the third argument. Create a calculated table named Holidays containing a single column of dates in YYYY-MM-DD format, then update the measure to reference it. The DAX becomes NETWORKDAYS('Sales'[OrderDate], 'Sales'[DeliveryDate], 'Holidays'[Date]).

A few rules apply to the holiday argument. The column must be a real date type; text strings will fail type-checking inside the DAX engine. Dates outside the range you are measuring are skipped, so it is safe to keep one master holiday table for the whole year. Duplicates in the column are ignored, so you do not need to deduplicate before the call. A holiday that lands on a Saturday or Sunday never reduces the count, because that day was already excluded as part of the weekend.

Handling Blank Dates and Common Errors

The most common NETWORKDAYS error in production models is a blank date column. If a row has not shipped yet, Sales[DeliveryDate] may be BLANK, and NETWORKDAYS propagates the blank as an error into any visual. The standard fix is to wrap the call in IF and ISBLANK so the measure returns a clean value when input is missing.

Two safe patterns handle the most cases:

  • Row-level calculated column: Business Days = IF(ISBLANK('Sales'[DeliveryDate]), BLANK(), NETWORKDAYS('Sales'[OrderDate], 'Sales'[DeliveryDate], 'Holidays'[Date]))
  • Aggregate measure: Avg Business Days = AVERAGEX('Sales', IF(ISBLANK('Sales'[DeliveryDate]), BLANK(), NETWORKDAYS('Sales'[OrderDate], 'Sales'[DeliveryDate], 'Holidays'[Date])))

Another frequent gotcha is the inclusive-versus-exclusive expectation. NETWORKDAYS treats both endpoints as part of the range, so the same date returns 1, not 0. If your report needs the exclusive difference (the gap between two dates with neither endpoint counted), subtract the start day yourself, or use a different approach such as building the count from the underlying date table.

When a Browser Tool Is the Faster Answer

For a one-off check outside a Power BI model — confirming a deadline, sanity-checking a sprint, or quoting a delivery window to a customer — opening Desktop and writing DAX is overkill. The Business Days Calculator runs the same working-day math in your browser, picks up your start and end dates instantly, and accepts an optional comma-separated list of holidays to subtract. Nothing is uploaded, so the dates stay private, and the result updates the moment you finish picking.

Think of the two tools as complementary: NETWORKDAYS is the answer when you need a number that lives inside a report and updates with refresh; the browser calculator is the answer when you need an answer in the next few seconds without launching a model. Both arrive at the same inclusive working-day total for the same date pair, so you can use either to verify the other.