12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Power BIAdvent Calendar 2024

Day 19

NETWORKDAYS関数を使ってみた

Last updated at Posted at 2024-12-18

オフィスのキャパシティ/出社人数の観測など、土日祝を除いて計算をしたい場合がありますが、稼働日数を簡単に計算してくれるNETWORKDAYS関数があることを知り、使い方を確認しました。

私の所属会社の基本の休日は土日祝です。
NETWORKDAYS関数を知る前までは、まずは日付テーブルと祝日テーブルを用意し、①日付テーブルにて曜日列が1(日曜日)または7(土曜日)であるかどうか、またLOOKUPVALUE関数を使い、日付テーブルが祝日テーブルの祝日に存在するかどうかをみて、稼働日かどうかを0(=非稼働日)と1(=稼働日)で示す列(下図の"IsWorkingday"列)を追加し、その上で、②その列の値を加算することで稼働日を計算をしていました。

※以下の日は非稼働日なので"0"を指定
2024年1月1日:祝日(元日)
2024年1月6日:土曜日
2024年1月7日:日曜日
2024年1月8日:祝日(成人の日)

image.png

NETWORKDAYS関数とは

NETWORKDAY関数は指定された日の間で稼働日を返す関数です。週末の除外、祝日の除外を関数内で簡単に行えます。
週末が必ずしも土日ではない場合も想定されており、簡単にカスタマイズできるようにオプションが用意されています。
祝日も祝日用テーブルを用意すれば簡単に稼働日から除外することができます。

構文
NETWORKDAYS(<start_date>, <end_date>[, <weekend>, <holidays>])

実際に使ってみた

以下は実際に記述したメジャーです。
※事前に日付テーブル(Calendar)と祝日テーブル(Japan Holidays)を用意しておきます。

NETWORKDAYS関数を使ったDAX例
WorkingDays_2 = 
var _StartDate = MIN('Calendar'[Date])
var _EndDate = MAX('Calendar'[Date])

RETURN

NETWORKDAYS(
    _StartDate,
    _EndDate,
    1,
    DISTINCT('Japan Holidays'[Date]))

指定した期間の稼働日を計算するので、期間の始まりと終わりを_StartDate(=始まり)、_EndDate(=終わり)として定義しました。
前述のとおり、私が所属している会社は土日が非稼働日なので、3つ目の引数(weekend)には"1"を指定しました。
祝日テーブルは下記のような感じで用意していましたが、実際に必要なのはDate列のみになります。DISTINCT関数を使って、Date列の内容のみを指定しました。

image.png

結果、従来のやり方と同じように、問題なく動作することを確認しました。
NETWORKDAYS関数を使うとこれまで2ステップで行っていた稼働日計算を1ステップで行えるし、なんだかスマートな気がしています!

WorkingDays_1:従来のやり方で算出した稼働日数
WorkingDays_2:NETWORKDAYS関数を使って算出した稼働日数
image.png

以上

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?