1
0

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列に積み重なったデータを表形式にするベストプラクティスは? (5) List.Alternate → Table.FromColumns

Last updated at Posted at 2023-07-30

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

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

Index

解法5: List.Alternateを使う

 解法4で使ったTable.AlternateRowsをList.Alternateに置き換えてみます。ただし、パラメータの使い方が異なっていますので注意します。

List.Alternate

構文
List.Alternate(
    list as list, 
    count as number, 
    optional repeatInterval as nullable number, 
    optional offset as nullable number
) as list

リスト内でオフセットが奇数であるすべての要素によって構成されたリストを返します。 パラメーターに応じて、リスト list の値の取得とスキップを交互に行います。

  • count:毎回スキップされる値の数を指定します。
  • repeatInterval:スキップされた値の間に追加される値の数を示す、省略可能な繰り返し間隔。
  • offset:初期オフセットで値のスキップを開始する、オプション オフセット パラメーター。

 Table.AlternateRowsとパラメータの使い方が異なっています。第1、第2引数は必須で、あとは省略できます。

例1
= List.Alternate( {1..10}, 2 ) 

 例1は、1~10のリストを作成し、2つの項目をスキップします。帰ってくる値は {3,4,5,6,7,8,9,10} です。

例2
= List.Alternate( {1..10}, 2, 3 )

 例2は、1~10のリストを作成し、2つの項目をスキップした後、3つの項目を残す処理を繰り返します。帰ってくる値は {3,4,5,8,9,10} になります。

例3
= List.Alternate( {1..10}, 2, 3, 1 )

 第4引数は、処理を開始する位置を指定します。例3では1が入力されているので、1項目飛ばした後、例2と同様の処理が行われます。帰ってくる値は {1,4,5,6,9,10} になります。

 リストに対して、項目名を右クリックして「代替アイテムの削除」を選択すると、GUIからList.Alternateを生成することができます。

RemovedAlternateItems = 
    List.Alternate(
        Column1,
        2,  // 削除するアイテムの数
        1,  // 保持するアイテムの数
        1   // 削除する最初のアイテム -1
)

List.Transform & Table.FromColumns

TableFromColumns = 
    Table.FromColumns(
        List.Transform(
            {0..2},
            each List.Alternate(
                List.Skip(Source[Column1],_),2,1,1)
        )
    )

 List.Transformで0から2までの値を _ に入れて List.Skipで項目をスキップさせます。

ソースコード

 全体の処理は以下のようになります。

let
    // ファイルの読み込み
    Source = Table.FromColumns(
        {
            Lines.FromBinary(
                File.Contents( "** File Name **" ),
                null,
                null,
                932  // シフトJIS
            )
        }
    ),
    // 変換処理
    TableFromColumns = 
        Table.FromColumns(
            List.Transform(
                {0..2},
                each List.Alternate(
                    List.Skip(Source[Column1],_),2,1,1)
            )
        )
        
in
    TableFromColumns
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?