3
8

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 5 years have passed since last update.

Microsoft Power Query M 学習記録

Last updated at Posted at 2020-06-11

Microsoft Power Query Mの学習記録です。主にM言語です。

この投稿の方針

  • 糖衣構文であるeach ...は可能な限り使いません。元の表現(_) => ...を使います。

Windows 10でPower Query Mを試す

Windows 10ではMicrosoft StoreからPower BI Desktopが無償でダウンロードできます。Power Query Mはこのソフトウェアで試せます。

  1. Power BI Desktopの起動後、アプリケーション上側のリボン→「データを取得」の下矢頭→「空のクエリ」でPower Query Mがクエリエディタが起動します。
  2. 単一行の場合は数式に記入します。複数行の場合は上側のリボンから「詳細エディタ」をクリックします。

公式ドキュメント

List.Generate関数の概要

List.Generateは他の言語のfor文に該当する関数です。

List.Generate(
    initial as function,
    condition as function,
    next as function,
    optional selector as nullable function) as list

as functionが繰り返されるので複雑に感じますが、要は次のfor文です。

c++
std::vector<std::any> v;
for (const auto& _ = initial(); condition(_); next(_))
{
    v.push_back(selector != nullptr ? selector(_) : _);
}

整数のリストを作成する

リストの特別な整数シークエンス表現List.Generate関数が利用できます。

1ずつ増加する整数の範囲
{0..100}

each ...(_) => ...の糖衣構文です。https://docs.microsoft.com/en-us/powerquery-m/understanding-power-query-m-functionsのEach Keywordをご覧ください。

1ずつ増加する整数の範囲
List.Generate(() => 0, (_) => _ <= 100, (_) => _ + 1)
5ずつ増加する整数の範囲
List.Generate(() => 0, (_) => _ <= 100, (_) => _ + 5)
1ずつ減少する整数の範囲
List.Generate(() => 100, (_) => _ >= 0, (_) => _ - 1)
5ずつ減少する整数の範囲
List.Generate(() => 100, (_) => _ >= 0, (_) => _ - 5)

リストを変形する

List.Transform関数を使います。

全要素に2を乗じる
List.Transform({0..100}, (_) => _ * 2)
型のリストを得る
List.Transform({0, 1, 2, "a", "b", "c"}, (_) => Value.Type(_){0})
整数から"偶数"と"奇数"のリストを得る
List.Transform({0..10}, (_) => {"偶数","奇数"}{Number.Mod(_, 2)})

リストを選択する

偶数のみ選択
List.Select({0..100}, (_) => Number.Mod(_, 2) = 0)
奇数のみ選択
List.Select({0..100}, (_) => Number.Mod(_, 2) = 1)
テキスト型のみ選択
List.Select({0, 1, 2, "a", "b", "c"}, (_) => Value.Type(_) = type text)
数値型のみ選択
List.Select({0, 1, 2, "a", "b", "c"}, (_) => Value.Type(_) = type number)

リスト、レコード、テーブルの変形と選択

変形 選択
List Transform Select
Record TransformFields SelectFields
Table TransformColumns
TransformRows
SelectColumns
SelectRows
SelectRowsWithErrors

リストを列としたテーブルを作成する

let
    List1 = {0..10}
in
    Table.FromColumns(
        {
            List1,
            List.Transform(List1, (_) => {"偶数", "奇数"}{Number.Mod(_, 2)})
        },
        {"リスト", "偶奇"}
    )
3
8
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
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?