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

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

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

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

解決済

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

atk233
mit233

総合スコア7

Power BI

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

1回答

0グッド

0クリップ

237閲覧

投稿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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

sk.exe

2022/10/19 07:20

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

2022/10/20 02:27

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

回答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

総合スコア155

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

atk233

2022/10/20 05:12

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Power BI

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