質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Power BI

Power BIは、マイクロソフト社が提供しているBIツールです。レポートの作成・共有、エクセルや会計システムなどさまざまなソフトウエアのデータをグラフやチャートに変換。データの分析・解析などにも利用できます。

Q&A

解決済

1回答

964閲覧

PowerQueryでの日付のルール決めについて

atk233

総合スコア13

Power BI

Power BIは、マイクロソフト社が提供しているBIツールです。レポートの作成・共有、エクセルや会計システムなどさまざまなソフトウエアのデータをグラフやチャートに変換。データの分析・解析などにも利用できます。

0グッド

0クリップ

投稿2022/10/14 04:38

前提

PowerQueryでシステムから吐き出された日付データを
以下のようなルールで前半/後半とわかるデータに作り替えたいのですが
月によってルール決めをしないといけないため、どういった施しをすればいいのかがわかりません。

実現したいこと

以下のように変換を行いたいです。カレンダーテーブルのようなものを設けられないか試しているものの、月ごとのゆれ?に対応ができず。
加工前が右手になるのですが、たとえば2022101は「2022年10月の1週目」というデータになっています。

加工後  加工前
10月1H  2022101  月6週の場合、1~3週は1H、4~6週は2H
10月1H  2022102
10月1H  2022103
10月2H  2022104
10月2H  2022105
10月2H  2022106
11月1H  2022111  月5週以下の場合、1~2週は1H、3~週は2H
11月1H  2022112
11月2H  2022113
11月2H  2022114
11月2H  2022115

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk.exe

2022/10/19 07:20

> システムから吐き出された日付データ > たとえば2022101は「2022年10月の1週目」というデータになっています。 元のファイル形式が csv か xlsx 辺りだとして、システムからファイル出力された時点で既にそういう形式のデータ(厳密に言えば「日」を含んでいないので日付データではない)が格納されている、ということでしょうか。
atk233

2022/10/20 02:27

ご質問ありがとうございます。おっしゃる通りで、 日付のデータは含まれてなく、加工前と記載したキーワードのみが、CSVでファイル出力されています。
guest

回答1

0

ベストアンサー

日付のデータは含まれてなく、加工前と記載したキーワードのみが、CSVでファイル出力されています。

csv

1列名 22022101 32022102 42022103 52022104 62022105 72022106 82022111 92022112 102022113 112022114 122022115

とりあえずこういうファイルがShift-JISで保存されているとして、
おおまかな仕組みとしては下記のような形でよろしいのではないかと。

(1) 加工前の値を text 型として扱い、[年月]と[週]に分割する。

(2) [年月]を date 型のデータに変換し、その日付が含まれる年月の最終週(週の数)を取得する。

(3) [週]を number 型のデータとして扱い、その値が「年月の最終週(上記 2 の結果)を 2 で割った結果」以下なら "1H"、そうではなければ "2H" という文字列を取得する。

(4) [月初日]の値をフォーマットした文字列と上記 3 の結果を文字列結合する。

PowerQuery

1let 2 Source = Csv.Document(File.Contents("C:\FolderName\FileName.csv"),[Delimiter=",", Encoding=932, QuoteStyle=QuoteStyle.None]), 3 PromoteHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]), 4 ChangedType = Table.TransformColumnTypes(PromoteHeaders,{{"列名", type text}}), 5 GetYearAndMonth = Table.AddColumn(ChangedType, "年月", each Text.Middle([列名],0,6)), 6 GetWeek = Table.AddColumn(GetYearAndMonth, "週", each Number.FromText(Text.Middle([列名],6,1))), 7 GetStartOfMonth = Table.AddColumn(GetWeek, "月初日", each Date.FromText([年月], [Format="yyyyMM", Culture="ja-JP"])), 8 GetEndOfMonth = Table.AddColumn(GetStartOfMonth, "月末日", each Date.EndOfMonth([月初日])), 9 GetWeekOfMonth = Table.AddColumn(GetEndOfMonth, "月の最終週", each Date.WeekOfMonth([月末日])), 10 GetPeriodOfHelfMonth = Table.AddColumn(GetWeekOfMonth, "月半期区分", each if [] <= ([月の最終週] / 2) then "1H" else "2H"), 11 GetResult = Table.AddColumn(GetPeriodOfHelfMonth, "月と月半期区分を結合", each Date.ToText([月初日],[Format="MM月", Culture="ja-JP"]) & [月半期区分]) 12in 13 GetResult

ファイルパスや列名などについては適宜修正して下さい。

投稿2022/10/20 04:25

編集2022/10/20 04:43
sk.exe

総合スコア744

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atk233

2022/10/20 05:12

ご回答ありがとうございます。 頂いたやり方で解決ができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問