Power Query で日付テーブルを作成しよう : Mから始めよう #16

　以前、DAXで日付テーブルを作成してみましたが、今回はPower Queryを使って日付テーブルを作成していきます。（「[Power BIで日付テーブルを作成する](https://qiita.com/spumoni/items/c9716515dad2ada4fb0a)」）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/645fd146-54f3-466f-ca19-0f76f43fed99.png)

# パラメータの設定
　日付テーブルに設定するFrom-Toの日付をパラメータで設定します。その他、言語を日本語と英語の選択可能にし、週の始まりを日曜日にするか、月曜日にするかを選べるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/24027560-75ea-1d44-8983-2d61a1514ff1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/662d9ac7-08ef-9766-3729-da23defd3ef1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b8d983a4-df76-4c3d-7162-015cef6adc20.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b6000627-ba44-bd53-7006-d2ae99833a78.png)

# Power Query

　以下のようなクエリを作成しました。

```
let
    DateFromDate = Date.FromText(FromDate, "ja-JP"),
    DateToDate = Date.FromText(ToDate, "ja-JP"),
    Source = List.Dates(
        DateFromDate, 
        Duration.Days(DateToDate - DateFromDate) + 1, 
        #duration(1,0,0,0)
    ),
    ListToTable = Table.FromList(
        Source, 
        Splitter.SplitByNothing(), 
        type table [Date = Date.Type], 
        null, 
        ExtraValues.Error
    ),
    // 年
    YearAdded = Table.AddColumn(
        ListToTable,
        "Year",
        each Date.Year([Date]),
        Int32.Type
    ),
    // 月
    MonthAdd = Table.AddColumn(
        YearAdded,
        "Month",
        each Date.Month([Date]),
        Int32.Type
    ),
    // 日
    DayAdd = Table.AddColumn(
        MonthAdd,
        "Day",
        each Date.Day([Date]),
        Int32.Type
    ),
    // 年月
    YearMonthAdd = Table.AddColumn(
        DayAdd,
        "YearMonth",
        each Date.ToText([Date], "yyyyMM", Language),
        Text.Type
    ),
    // 年月日
    YearMonthDayAdd = Table.AddColumn(
        YearMonthAdd,
        "YearMonthDay",
        each Date.ToText([Date], "yyyyMMdd", Language),
        Text.Type
    ),
    // 曜日
    WeekAdd = Table.AddColumn(
        YearMonthDayAdd,
        "Week",
        each Date.ToText([Date], "ddd", Language),
        Text.Type
    ),
    WeekNumberAdd = Table.AddColumn(
        WeekAdd,
        "WeekNumber",
        each Date.DayOfWeek([Date], StartWeekDay),
        Int32.Type
    ),
    // 週開始日
    StartOfWeekAdd = Table.AddColumn(
        WeekNumberAdd,
        "WeekStartDate",
        each Date.AddDays([Date], - [WeekNumber]),
        Date.Type
    ),
    // 月末日
    EndOfMonthAdd = Table.AddColumn(
        StartOfWeekAdd,
        "EndOfMonth",
        each Date.EndOfMonth([Date]),
        Date.Type
    ),
    // 月日数
    DaysInMonthAdd = Table.AddColumn(
        EndOfMonthAdd,
        "DaysInMonth",
        each Date.DaysInMonth([Date]),
        Int32.Type
    )
in
    DaysInMonthAdd
```

# テンプレートファイルで保存
　テンプレートファイルで保存すると、次回使用するときに、パラメータ設定画面が最初に表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/464c306b-96ac-3acd-7039-b2da44ddf4e6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5681278f-3e92-2baa-2beb-a5ec533104c5.png)

　ここで入力した値に基づいて日付テーブルが作成されますが、後からパラメータの値を変えて変更することもできます。