Power Query | パラメーター設定を利用した指定期間のカレンダー作成(Power BI)
Power BIで日付をもとにカレンダーを作成したい場面で、指定した期間のカレンダーを自動生成する方法を説明します。
Power BIを使っていると、日付をもとにカレンダーを作成したい場面があります。今回は、指定した期間のカレンダーを自動生成する方法について説明します。これはなかなか便利に使えます。
補足:
DAXを使ってカレンダーを作成すると列の追加などで柔軟性が高くなることが分かりました。この記事は、クエリでパラメーターを利用する手順のリファレンスとして書いています。
カレンダー生成のワークフロー
手順は以下のワークフローとなります。
① パラメーター設定(複数モードを考慮)
↓
② モードに応じた日付の取得
↓
③ カレンダーの作成
パラメーター設定
今回設定するパラメーターは以下の通りです。

単純に日付範囲を指定するだけですが、利用者の便宜を考えて複数パターンに対応できるようモード選択機能を追加しています。
① 日付指定モード
指定した開始日・終了日でカレンダーを作成するモードです。
▼ パラメーター設定(前提条件)
A_DATE_MODE = 0
▼ パラメーター設定(設定が必要な項目)
B_START_DATE = 任意のYYYYMMDD [例.20200101]
C_END_DATE = 任意のYYYYMMDD [例.20200131]
② 何日前モード
本日の日付を基準として、指定した日数だけ遡ったところからカレンダーを作成するモードです。
▼ パラメーター設定(前提条件)
A_DATE_MODE = 1
▼ パラメーター設定(設定が必要な項目)
D_DAYS_AGO = 本日から何日遡るか [例.-5(5日前)]
E_DAYS_LATER = 本日から何日進めるか [例.2(2日後)]
モードに応じた日付の取得
前述のモードに応じて日付を算出するため、以下のような処理を行います。START_DATEとEND_DATEは、後述のCalendarクエリのために準備します。

▼ クエリ:START_DATE
let
// For A_date_mode = 0 (Date Specified)
start_date_0 = Date.FromText(Text.Start(B_START_DATE,4) & "," & Text.Middle(B_START_DATE,4,2) & "," & Text.End(B_START_DATE,2)),
// For A_date_mode = 1 (Days Ago)
now_1 = DateTime.LocalNow() ,
start_date_1 = DateTime.Date(Date.AddDays(now_1,D_DAYS_AGO)),
// For A_date_mode = 2 (Months Ago)
now_2 = DateTime.LocalNow() ,
start_month_2 = DateTime.Date(Date.AddMonths(now_2,F_MONTHS_AGO)),
start_date_2 = DateTime.Date(Date.AddDays(start_month_2,-Date.Day(start_month_2)+1)),
// Fetching date based on mode
start_date_ori = if A_DATE_MODE = 0 then start_date_0 else (if A_DATE_MODE = 1 then start_date_1 else start_date_2)
in
start_date_ori
▼ クエリ:END_DATE
let
// For A_date_mode = 0 (Date Specified)
end_date_0 = Date.FromText(Text.Start(C_END_DATE,4) & "," & Text.Middle(C_END_DATE,4,2) & "," & Text.End(C_END_DATE,2)),
// For A_date_mode = 1 (Days Ago)
now_1 = DateTime.LocalNow() ,
end_date_1 = DateTime.Date(Date.AddDays(now_1,E_DAYS_LATER)),
// For A_date_mode = 2 (Months Ago)
now_2 = DateTime.LocalNow() ,
end_date_2 = DateTime.Date(Date.AddDays(now_2,E_DAYS_LATER)),
// Fetching date based on mode
end_date_ori = if A_DATE_MODE = 0 then end_date_0 else (if A_DATE_MODE = 1 then end_date_1 else end_date_2)
in
end_date_ori
空のクエリを作成し、Advanced Editorに上記のコードを貼り付けることで利用できます。
カレンダーの作成
パラメーターで設定したモードに応じて、指定した期間のカレンダーを作成します。
▼ クエリ:Calendar
let
Source = List.Generate(
()=>[Date=START_DATE, DayOfWeek=Date.DayOfWeekName(Date)],
each [Date]<=END_DATE,
each [Date=Date.AddDays([Date],1),DayOfWeek=Date.DayOfWeekName(Date)]
),
Custom = Table.FromRecords(Source),
AddedCustom = Table.AddColumn(Custom, "YearMonth", each Number.ToText(Date.Year([Date])) & Text.PadStart(Number.ToText(Date.Month([Date])),2,"0")),
InsertedMonthWeek = Table.AddColumn(AddedCustom, "MonthWeek", each Date.WeekOfMonth([Date]), Int64.Type)
in
InsertedMonthWeek
このクエリの結果は以下のようになります。

以上で、指定した期間のカレンダーを生成する手順は完了です。
以上です。
関連コンテンツ
技術の記事をもっと見る →Power Query | 動的SQLの実行結果を取り込む方法(Power BI)
SQLクエリの条件(例えばWHERE句)とPower Queryのパラメーターを連携させて、動的にSQLを実行する方法を説明します。
#power-query#power-bi#sqlSpec for Codex: 仕様書駆動開発をVS Codeでシームレスに
Codex CLI と緊密に連携し、仕様(Specs)・Steering Docs・Prompts を視覚的に管理できる VS Code 拡張機能。Kiro の開発体験を Codex ワークフローで再現します。
#vscode#codex#sddmulti-agent-ff15: AIエージェントを「道具」から「仲間」へ変える革命
6人のAIエージェントが並行動作するマルチエージェントシステム。APIコストゼロの協調作業で、開発を加速させる新しいアプローチ
#ai#multi-agent#opencode