2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Power Query] 1列に積み重なったデータを表形式にするベストプラクティスは? (2) Table.Split → Table.Transpose → Table.Combine

Last updated at Posted at 2023-07-30

※この記事は 2023/7/22 に作成しました。
※オプションで、「地域の設定」の「クエリステップ」は、「常に英語」に設定されています。日本語で使用している場合は、各自環境で作成されるコードに読み替えてください。

以下のように、複数の項目が1列になっているデータをテーブルにする方法の2番目です。

Index

解法2: 3行ごとにテーブルを作成して縦横変換

 データを3行ごとにテーブルに変換し、Table.Transposeで縦横入替してつなげます。
 GUIが使用できないので少々面倒に思えますが、内容は比較的簡単です。

Table.Split

 この関数はGUIから操作できないため、以下のように数式バーの左の「fx」を押してステップを追加し、Table.Split関数を入力します。(詳細エディタを使用してもよい)
 Table.Splitの第二引数は、項目数の3を入れます。

 3項目ずつがテーブルになったリストが出来上がります。

Table.Transpose

 テーブルの縦横入替するには、「変換」タブの「テーブル」グループから「入れ替え」を使用します。その時使われる関数が Table.Transpose です。しかし、今回はリストの項目それぞれに処理を適用しなければならないので、 List.Transoform 関数を利用し、その中で Table.Transpose を使用することになります。
 先と同様に「fx」でステップを追加し、関数を入力します。List.Transformの第2引数は、関数になります。1つ1つに関数を適用する「each」を最初に書き、「_」はそれぞれのリストにあるテーブルを示します。(see. Mから始めよう #6)

Table.Combine

 最後に、全てのテーブルを結合するのですが、これもGUIからできないので、「fx」でステップを追加し、以下の関数を入力します。

 Table.TransformとTable.Combineは、以下のような処理イメージです。

 最後に、列の型と列名を設定して完成です。

Table.Split関数

構文
Table.Split(
    table as table, 
    pageSize as number
) as list

 Table.Splitは、テーブルの行を、指定された行数で区切って複数のテーブルを作成し、リスト形式で返す関数です。戻り値がリスト型であることに注意してください。

ソースコード

let
    // ファイルの読み込み
    Source = Table.FromColumns(
        {
            Lines.FromBinary(
                File.Contents( "** File Name **" ),
                null,
                null,
                932  // シフトJIS
            )
        }
    ),
    // ** Table.Split **
    Custom1 = Table.Split(Source, 3),
    ListTransform = List.Transform(
        Custom1,
        each Table.Transpose(_)
    ),
    // テーブルの結合
    Custom2 = Table.Combine(ListTransform),
    // 列の型を設定
    ChangedType = 
        Table.TransformColumnTypes(
            Custom2,
            {
                {"Column1", type text}, 
                {"Column2", type text}, 
                {"Column3", type date}
            }
        ),
    // 列名の変更
    RenamedColumns = 
        Table.RenameColumns(
            ChangedType,
            {
                {"Column1", "書名"}, 
                {"Column2", "著者名"}, 
                {"Column3", "出版日"}
            }
        )
in
    RenamedColumns
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?