土日の判定は簡単なんだけど、祝日の判定には祝日リストが必要。これは Excelと全く同じ。ただ国民の祝日一覧は「年」さえ指定すれば簡単に作れる。
祝日を判定するには祝日一覧がないとなんともならないので、まずはそこから。今回は当年に前後一年を加えた、3年分の一覧を「Holidays JP API」の WebAPIを使わせてもらって作成する。
祝日一覧
let
年テーブル = [
当年 = Date.Year(テーブル1{0}[日付]),
年リスト = List.Transform({-1,0,1}, each 当年+_),
テーブル変換 = Table.FromColumns(
{年リスト}, type table [年=number]
)
][テーブル変換],
祝日列の追加 = Table.AddColumn(年テーブル, "祝日", each [
年 = [年],
URL1 = "https://holidays-jp.github.io/api/v1/★/date.json",
URL2 = Text.Replace(URL1, "★", Number.ToText(年)),
変換 = Record.ToTable(Json.Document(Web.Contents(URL2)))
][変換], type table),
列の選択 = Table.SelectColumns(祝日列の追加,{"祝日"}),
祝日列の展開 = Table.ExpandTableColumn(
列の選択, "祝日", {"Name", "Value"}, {"日付", "名称"}
),
型の変更 = Table.TransformColumnTypes(
祝日列の展開, {{"日付", type date}, {"名称", type text}}
)
in
型の変更
上記のクエリを「接続のみ」で読み込んでおく。
あとは「日付」列(Date型)のあるテーブル1を別途読み込んで、フラグ列を追加すればおしまい。
土日祝日フラグ
let
ソース = テーブル1,
フラグ列の追加 = Table.AddColumn(ソース, "フラグ", each [
数値 = [数値],
chk1 = Date.DayOfWeek([日付],1)<5,
chk2 = (try 祝日一覧{[日付=[日付]]})[HasError],
休日判定 = if chk2 then if chk1 then 0 else 1 else 2
][休日判定])
in
フラグ列の追加
「chk1」で平日かどうかをチェックし、「chk2」で祝日一覧にない日付かをチェックしている。土日も祝日も「1」でいいなら休日判定を下記に変更。
休日判定 = if chk1 and chk2 then 0 else 1