カテゴリー別アーカイブ: M言語

【M言語に慣れる】_15回目_TEXT関数/文字列関数

【M言語は難しくない】今回は、TEXT関数の中から、2つの事例を紹介したいと思います。通常のエクセル関数と同じ様に、M言語でも文字列を操作する関数は多数あります。興味のある方はぜひ、こちらのMicrosoft社のページも参照してみてください

目次

文字列の有無を判定する関数

文字列を置き換える関数

<まとめ>

文字列の有無を判定する関数

 Text.Contains関数は、ある文字列の中に指定した文字列があるかとうかを判定し、「TRUE」か「FALSE」で返す関数です

以下の一文は、Microsoft社のページからの抜粋になります

Text.Contains(“Hello World”, “Hello”)

上の ように記述した場合には、「TRUE」を返します

次もMicrosoft社のページからの抜粋になりますが、この場合は「FALSE」を返します

Text.Contains(“Hello World”, “hello”)

ちなみに、

 M言語では、大文字と小文字の違いは考慮されますので、この点は注意が必要です

では、実際にPower Queryエディタ(以降、エディタ)で実際にこの関数を操作してみます

使用するデータは、「抽出」という1列だけがあるこちらのデータになります

 上の画像のデータから、Text.Contains関数で文字列「0」を含む行を判定し、「TRUE」もしくは「FALSE」を返してみます

まず、「列の追加」タブからカスタム列・作成画面を開きます

こちらの画面でカスタム列の式に「Text.Contains」と入力します

上のGIF画像のように「Text.Con・・・」と入力する途中で、該当の関数が出てきますので、Tabキーで確定します

次にText.Contains関数の丸括弧の中を、以下の画像のように確定します

すると、エディタ内に「0」が含まれる行を判定した列が追加されます

続きを読む 【M言語に慣れる】_15回目_TEXT関数/文字列関数

M言語に慣れる_16回目_List関数

【M言語は難しくない】今回は、List関数について1つ事例を解説します。内容自体としては「M言語に慣れる_3回目~ダイナミックフィルタリング~」と同じ様な事を行います。

この3回目の時には、まずは変換タブにて最高値を算出しました

 そして、こちらの「”Cal-Max”ステップ」を参照してダイナミックフィルタリングを行いました

今回は、最高値を「変換タブ」からではなく、カスタム列・作成画面からList関数で計算します

目次

今回使用するデータと行いたい事

カスタム列の作成

まとめ

今回使用するデータと行いたい事

今回は、前述の3回目と同じデータを使用します

こちらのデータで各行に、「最高値-各受注金額」の列を作成します

続きを読む M言語に慣れる_16回目_List関数

ピボット解除を複数シートで一気に行う

ピボット解除は、Power Queryの中でも人気の機能だと思います

そのピボット解除を、複数シートに対して一気に行いたくなるようなシーンは多いと思います

今回はカスタム関数を使用し、複数シートの内容を「一番てっとり早く」ピボット解除を行う方法を紹介します

ポイント

詳細エディタ

下の画像は、あるシートの内容をピボット解除した時の詳細エディタの内容です

各行が繋がっているのが分かりますでしょうか?(ソース➡#”2018_Sheet”➡変更された型・・・)

後で、この仕組みをカスタム関数の作成の際に利用します

列➡一括データ取得

下の画像は複数のシートがあるファイルから一気に全てのシートを取得した場合のソースステップです

上の画像の「Data」列を指定すれば、ファイル内の全てのデータを取得できます

こちらも、後でこちらの仕組みを利用します

カスタム関数を作成

データの取得

元データはこちらのデータになります

各シートが年別になっており、それぞれのシートに4月~翌3月のデータがあります

この元データとは別のファイルからまずはデータを取得します

データ取得の際には、1年分のみを指定します

行の調整

下の画像のように1行目と最終行は調整が必要です

1行目は、ヘッダーとして繰り上げます

最終行については、行の削除を行います

一番下位の行を指定すれば最終行が削除されます

行の調整を行ったら、最終列のTOTAL列を削除して「ピボット解除」を行います

詳細エディタで関数作成

それでは、詳細エディターを開いてみましょう!

下の画像のように、各ステップが記載されています

画像に alt 属性が指定されていません。ファイル名: image.png

上の3行はシートによって可変になっていますので、こちらをカスタム関数にまとめます

作成したカスタム関数は「myTable」と名前を変えておきましょう!

画面下にある「完了」ボタンを押すと、下の画面のようにカスタム関数が表示されているはずです

他シートのデータを呼出し

表示されているカスタム関数の下あたりで、右クリックをしましょう!

そして、再び元データがあるファイルのデータを取得します

取得するのは全てのシートにします

記事の冒頭のポイントでも解説したように、「Data」の列には全てのシートのデータが詰まっています

こちらの列を活用してカスタム列を作成しますので、カスタム列・作成画面を開きます

そして、上の画像のように前章で作成したカスタム関数/myTableの中に「Data」列を指定します

すると上の画像のように「年毎にピボット解除されたデータ」が新たに作成されていますので、こちらを展開処理します

これで、全てのシートのデータがピボット解除されました

<まとめ>

今回は、複数シートの内容を一気にピボット解除する方法を解説しました

こちらは、カスタム関数を使用するのがポイントです

詳細エディタは使い慣れない方も多いと思いますが、今回の題材は慣れるのにいい題材だと思います

各ステップが繋がっていることを理解するのがとても大事です

ぜひ、実際に手を動かして慣れを作成しましょう!


にほんブログ村

列名をダイナミックにしたピボット解除を行う

ピボット解除はパワークエリの協力な武器です。縦横/↓→並びを縦縦/↓↓並びに変えてくれます

但し、新たに列を加えた場合には、並び替えの対象列が狂ってしまいます

 上のGIF画像では「評価」という列を加えると、当然、「評価」列は軸として固定されずに並べ替えの対象となってしまいます

本来であれば、下の画像のようにしたいところでした

他の言い方に変えると、列の追加を行ったとしても「日付」の列のみ、並び替えを行って欲しいのです

これにはいい方法があります

ポイント

ピボット解除のM関数

下の画像は「その他の列のピボット解除」を行ったステップの数式バーです

Table.UnpivotOtherColumnsというM関数が使用されており、カテゴリー列*以外の列が並び替えられているのがよく分かります 

逆に言えば「並び替えない列」を上のM関数内でリストにて指定してしまえば、それ以外の列が並び替えの対象となります

エラーを敢えて発生させる

今回は、日付のみを並び替えの対象とします

エラーと絡めて言うと、日付形式にした場合にエラーになるものは並び替えの対象としないようにすればよいのです

更に前述のM関数との絡みで言うと、M関数内の「ピボット解除を行わない列名」を「日付形式にした場合にエラーになる列名」のみにしてしまえばいいのです

並び替えない列名リストの作成

まずは、ピボット解除を行ったクエリを複製します

そして、ソース以外のステップを削除した後にM関数/Table.ColumnNamesを使用して「列名」をリスト化します

そして、テーブル化した後に、以下の画像のようにカスタム列の作成画面で列を複製します

ここから、ポイントで前述した敢えてエラーを発生させる話になります

カスタム列を日付形式に変えます

すると、日付以外はエラーになります

次に、ホームタブで「エラーの保持」を行います

すると、日付以外の列名だけが残ります

ここから2つ作業を行います①カスタム列の削除、②リスト化

リスト化は変換タブの「リストに変換」で行います

リストに変換したら、リスト名を覚えやすいようにつけておきます

今回は列名リストとしました

M関数にリストを組み込み

並び替えない列名のリストができたので、M関数/Table.UnpivotOtherColumnsの中に組み入れます

こうしておけば、列を追加しても日付のみが並び替えされます

<まとめ>

今回は、ピボット解除において列を追加した場合でも日付のみが並び替えられるようにしました

ポイントは、並び替えを行わない列名のリストを作成して、ピボット解除を行うM関数の中に組み入れることです

リストを作成する際には、敢えてエラーを発生させるのもポイントです

でも、日付以外の月などの場合にはどうするのか?

その場合には、条件列を使います

上の画像の場合には、月で終わらないものはnullになります

そして、nullだけフィルタで残す、という風にすれば対応できます


にほんブログ村

複数リストを1対1の関係でうまく組み合わせる

 パワークエリの便利機能、というかもはや「不思議」ですらあるのが「1行に対して複数の値を持つリスト」を組み合わせることができる点です

上の画像で言えば、メンバーが田中さんという値ではじまる1行に対して「商品コード」が3つ割り当たっています

但し

この1行へのリストの割当を複数行うと次のように不都合が起こる場合があります

上の画像には田中さんの商品コード/A1501の行が3つあり、A1501に商品名が3つあることになってしまっています

つまり、割り当てた2つのリスト間が本来あるべき1対1の関係でなく、1対多の関係になってしまっています

今回は、複数のリストを割り当てる場合にきちんと1対1の関係になるように、M言語を使用して調整します!

複数リストの作成

今回使用する元データはこちらの3つの表です

こちらの3つの表をつなげて、次のような表にしたいのです

では、1行に割り当てられるようなリストはそもそもどのように作成されるのかを復習したいと思います

こちらのリストはカスタム列で作成します

今回の場合であれば、上の画像のように「他のクエリ名+列名]で作成します

別な方法では、前ステップ名+列名という方法もあります

リストからテーブル作成

記事の冒頭に述べさせて頂いたように、作成したリストをそのまま展開処理を行うと、列間の1対多の関係性がぐちゃぐちゃになります

*次の画像のように1つの商品コードに商品名が3つある

画像に alt 属性が指定されていません。ファイル名: image-48.png

この関係を1対1にするには、カスタム列作成画面でM関数のTable.FromColunsを使用して2つのリストからテーブルを作成します

上のGIF画像だと式が分かりにくいので、詳細は以下をご確認ください

Table.FromColumns({[商品コード],[商品名]})

波括弧:/{}を使用して複数のリストを括るのは忘れないようにしてください!

上のカスタム列を展開すると次のような形になります

きちんと商品コードと商品名が1対1になっています

<まとめ>

今回は、複数のリストを1対多ではなく、1対1で展開できるようにしました

ポイントは1つでけあり、M関数:Table.FromColunsを使用して、複数のリストからテーブルを作成する点でした

内容は短いのですが、複数のクエリ間の関係とリスト間の関係性が少しわかりにくいかも知れません

ぜひ、以下のサンプルファイルをダウンロードして関係性を確かめてみてください


にほんブログ村

不規則に散らばっているデータを一括取得~M関数~

 今回は上の画像のようにデータが複数シートに散らばっており、しかも行見出し位置/ヘッダー行不規則なデータを一括で取得します

今回の最大のポイントは、List関数で行見出しの位置を取得する点です

そこさえクリアすれば、意外と簡単にできます

では、今回使用するデータと行いたい事の確認から解説を始めます

今回使用するデータと行いたい事

今回使用するのは次のファイルです

このファイルの中には3つのシートがあります

但し、前述のように3つのシートそれぞれの行見出し位置が違います

 2020年1月のデータは1行目から始まっていますが、2月のデータは2行目から始まります

そして、3月のデータは3行目からです

 この3つのシートからM関数を組み合わせてデータを一括で取得するのが、今回行いたい事です

今回のポイント

 今回の最大のポイントは、前述のようにList関数で行見出し位置を取得することです

 行見出し位置を取得するには、行見出しにある「客先コード」をキーにして、M関数「List.PositionOf」を使います

List.PositionOf関数の他にも2つM関数を組み合わせます

List.PositionOf

List.PositionOf関数はリストの中から、指定の値の位置を取得します

書き方は、次の通りとなります

List.PositionOf(リスト名,取得したい値)

ここで、注意点が1点あります

M言語は0ベースである点です

例えば、List.PositionOf関数を使用すると、次の画像の「客先コード」の位置はではなく「0」とでます

これは、M言語が0で始まる仕組みになっているからです

Table.RemoveFirstN

Table.RemoveFirstNは、テーブルから指定した行数を削除するM関数です

書き方は次のように書きます

Table.RemoveFirstN(テーブル名, 削除する行数)

Table.PromoteHeaders

Table.PromoteHeadersは、1行目を見出しに昇格させるM関数です

Power Queryエディタ内にも同じメニューがあります

今回の内容は、後述しますがM関数で行った方がベターです

このM関数の書き方は、次の通りとなります

Table.PromoteHeaders(テーブル名)

今回のポイントである、3つのM関数の内容を確認したところで、本格的な解説をはじめます

ファイルの読込

まず最初に、前述のサンプルファイルの読込処理を行います

サンプルファイルとは別のファイルで、下の画像の処理を行います

 上の画面の「ブックから」で前述のサンプルファイルを指定した後、Power Queryエディタ(以降、エディタ)が開くと次の画像のような状態になっています

上の画像の左から2つ目の列にある「Data」が今回のポイントの一つです

 各行にある「Table」の文字の横をクリックすると、次のGIF画像のように中味が見れます

次からはこの「Data」列を活用して、カスタム列をM関数により作成します

カスタム列の作成

List.PositionOf関数で行位置を抽出

では、カスタム列・作成画面を開きましょう

 ここで確認ですが、行位置を取得する対象は下の画像の「客先コード」の文字です

 上の画像を見ると、「客先コード」にはⅰ)Data/Table➡ⅱ)Column1➡ⅲ)客先コードの順で指定するとたどり着けるようになっています

 カスタム列・作成画面でも、M関数/List.PositionOfでの引数設定時に上の流れを使用して指定します

上の画像のようにList.PositionOf関数の引数を次の様に指定します

一引数:[Data][Column1]

第二引数:”客先コード”

そして、カスタム列・作成画面の下にあるOKボタンを押すと次の画像のように客先コードの位置が出力されます

あくまでM言語は0から始まるので、その点についてはご注意ください

 1行目の内容では、客先コードは1行目にありますがM言語のベースに従って0と出力されています

Table.RemoveFirstNで不要な行の削除

 List.PositionOf関数により行見出しの位置は抽出できましたので、「行見出しの位置-1」分の行数をM関数/Table.RemoveFirstNを使用して削除します

Table.RemoveFirstN関数の書き方は、前述の通り次の通りです

Table.RemoveFirstN(テーブル名, 削除する行数)

今回は上の第一引数のテーブル名には、[Data]を入力します

そして、第二引数には上のList.PositionOf関数をー1をせずにそのまま設定します

 上の画像の通りに数式を指定してOKボタンを押すと、「本来、行見出しにするべき行/客先コードのある行」が次の画像のように1行目に来ています

但し、このまま作成されたテーブルを展開すると不都合な点が1点あります

 本来、行見出しにするべき行が行見出し/ヘッダーになっていませんので、このまま展開作業をすると不要な行見出しがデータとして入り込んでしまいます

ですので、もう一つのM関数で不要な行を削除できるようにします

Table.PromoteHeadersで見出し行を作成

では、最後の仕上げとして各テーブルの1行目を見出し行/ヘッダーにします

 こちらは、M関数/Table.PromoteHeadersの()の中にこれまでの内容を入れるだけです

Table.PromoteHeaders関数の内容を反映した結果が次の画像です

 上の画像の内容で、各テーブルを展開処理すればいいのですが、その前に既存の列は削除しておきましょう

「他の列の削除」が終了したら、後は各テーブルを展開するだけ終了です

<まとめ>

 今回は、List.PositionOf関数をはじめとする3つのM関数を組み合わせて、不規則なデータを一括で処理できるようにしました

最大のポイントは、不規則な行見出しの位置をM関数で取得する点です

 それさえできれば、後は機械的にM関数を組み合わせるだけで一括処理ができるようになりました

今回の題材は、M関数の魅力、そしてM言語の魅力を知るのにいい題材だったと思います

ぜひ手を動かして体験してみてください

長文に最後までお付き合いいただきありがとうございました

参考までに、今回の内容の完成版のファイルを添付します

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

参照先バッファー化によるパフォーマンス向上~M関数でサクッと動かす~

 パワークエリで大量のデータを処理していると、悩みとして出てくるのがクエリの動きが「重たい」という問題です

対処方法として様々な方法があります

1つ有効なのはバックグラウンドの更新処理を外す方法です

まず、下の画像のようにクエリ上で右クリックして「プレビューの表示」をクリックします

その後表示された画面で「バックグラウンドで更新」のチェックを外します

後、フィルタ作業を前倒しで処理して処理行を減らす処理も有効です

今回の記事で紹介するのはM関数を使用する方法です

M関数を使用した「バッファー化処理」も処理を軽くするのに有効なので、ぜひ試してみてください

記事の最後にバッファー化した際の注意点も解説させて頂きましたので、あわせてそちらもご確認ください

目次

バッファー化の概念

解説に使用するクエリ

バッファー化処理

<まとめ>

バッファー化の概念

 よく代表例として紹介されるのはプリンターの処理ですが(出典先)、ここではバイキングで料理を食べるシーンを例にとって考えてみましょう

 バイキングに行くと上の画像のように、料理がまとめて「」の上にのっています

 もし、皿を使っていなかったら、厨房に都度行って料理人の方に欲しい料理を作ってもらうしかありません

このバイキングのがバッファー化です

 もし、クエリのステップ内にマージや追加により参照しているクエリ/テーブルがあったら、上の皿のようにバッファー化を行っておきましょう!

そうすることで、クエリに関する処理のパフォーマンスは向上します!

解説に使用するクエリ

上の画像は今回解説に使用するクエリの依存関係を示した図です

 図の下の方に「売上結果_NO」と「売上結果_Buffering」という2つのクエリがあります

 この2つのクエリの違いは、マージして参照しているクエリが違っているだけです

売上結果_NO ➡ 商品台帳/バッファー化なし

売上結果_Buffering ➡ 商品台帳_Buffering/バッファー化あり

参照しているクエリの違いは、バッファー化がある・なしの違いだけです

 商品台帳クエリ内にある12行のレコードを、皿に盛りつけておき、取り易いようにしておくイメージです

 次のGIF画像では、バッファー化の有無の違いが「実際の時間」で分かるようになっています

 同じ1万行のデータを読込んでいますが、待ち時間の違いが明らかだと思います

 では、バッファー化の効果を解説したので、具体的なバッファー化処理・手順の解説に移ります

続きを読む 参照先バッファー化によるパフォーマンス向上~M関数でサクッと動かす~

クエリの列名をダイナミックに変更する~M関数使用~

 今回は、クエリのデータの中味ではなく、列名を別クエリ(別表)からダイナミックに変更する方法を解説したいと思います

 上のGIF画像では、画面左にある表の内容を変えたら、右にある列名が変更されています

 この仕組みは、クエリ上で列名を変更した後、エディタ内に記録された内容にM関数を間接的に組み込む形で作成します

 一から、仕組みを構築するわけではないので、最初の印象よりも簡単に作成できます

今回のポイント

入れ子のリスト

仮に、空のクエリに下の数式を入力してみたとしましょう

= {{1,2},{3,4},{5,6}}

すると、次の画像のようにリストが複数できます

今の段階では、この内容が後で出てくるということだけ覚えておいてください

使用するM関数

今回は2つのM関数を使用します

Table.RenameColumns ➡列名変更

書き方:Table.RenameColumns(テーブル名, リスト名)

Table.ToColumns ➡テーブルからリスト(入れ子)作成

書き方:Table.ToColumns(テーブル名)

今回のポイントを確認したところで、本格的な解説を始めたいと思います

クエリの列名変更(仮の処理)

まずは、元のデータ/テーブル名:AllDataをテーブル化してエディタで開きます

そして、エディタ内で全ての列名を変更します

すると、数式バーは次のような表示になっています

= Table.RenameColumns(ソース,

{{“年度”, “Year”}, {“製品別”, “Product”}, {“地域”, “Region”}, {“売上金額”, “Sales”}}

)

 今回のポイントで紹介したM関数「Table.RenameColumns」が入力されています

そして、第二引数は入れ子になったリストになっています

こちらの第二引数については、後で修正します

列名変換のための入れ子リスト作成

今度は、新旧の列名を変換するためのデータをテーブル化してエディタで開きます

エディタで開いたら、変換タブで行列を入れ替えます

*行列の入れ替え前にヘッダー行を下げておいてください

ここから入れ子のリストを、今回のポイントで紹介したM関数「Table.ToColumns」を使用して作成します

こちらは、下の画像の「詳細エディター」で作業を行います

下の図の2行目/転置されたテーブルの下にM関数を追加します

注意点は2点あります

1点は、2行目が最終行でなくなるので、「,」を上の画像の黄色い印のように加えること

2点目は、inの後はletの最終行のリストに置き換えること

この2点です

詳細エディターでの作業を終えたら、エディタは次の画像のようになっています

リストが入れ子になっているのがよく分かります

リスト名は上の画像のように「列名」としておきます

入れ子リストの組み入れ

前述の仮で列名を変えてあるクエリに、新たに作成したリスト「列名」を組み入れます

AllData

上の画像の数式バーの部分を抜き出すと、次のようになっています

= Table.RenameColumns(ソース,

{{“年度”, “Year”}, {“製品別”, “Product”}, {“地域”, “Region”}, {“売上金額”, “Sales”}}

)

こちらの第二引数の入れ子リストを、前述のリスト「列名」に入れ替えます

これで、列名のリストの基となるデータを変えれば、ダイナミックに「AllData」クエリの列名が変更されていきます

<まとめ>

 今回は、入れ子のリストの仕組み、並びにM関数を2つ使用して、クエリの列名をダイナミックに変更する仕組みを解説しました

今回の解説の入り口は、空のクエリで入れ子のリストを作成する点です

こちらはよく復習されておくと、色んな場面で応用が効くと思います

後、記事の途中で詳細エディターを使用した場面がありましたが、少し補足をしておきます

通常、詳細エディターを開くと次のようになっています

 上の図のように、ソース➡ソース、追加されたカスタム➡追加されたカスタムという風にテーブル名が次の行に引き継がれていきます

今回もテーブル名をM関数/Table.ToColumnsの()の中に引継ぎました

画像に alt 属性が指定されていません。ファイル名: image-57.png

なお、「,」はletの最終行には付けないので、この点はご注意ください

最後まで記事の最後までお読みくださり、誠にありがとうございました

参考までに今回使用したファイルも添付します

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ

にほんブログ村

Power Queryエディタ上で複数条件付き合計処理~M関数使用

 今回は、M関数を使用して「SUMIFS関数」と同じ「複数条件付き合計処理」をPower Queryエディタ(以降エディタ)上で行う方法を解説したいと思います

 M言語を学ぶ目的の一つは、Power Queryのメリットである「行列一括で処理を行う」とワークシートでの「細かい操作・計算」を両立させることです

SUMIFS関数は細かい計算を行う関数なので、M言語の良さを学ぶという点で凄くいいテーマです!

 特に記事の中で出てくる「別クエリのテーブル化/入れ子のテーブル作成」と「Table.Select関数による特定の行抽出」はM言語の醍醐味の一つといっていいと思います!

記事の最期にはサンプルファイルも付いていますので、ぜひ、後で実際に手を動かしてみて下さい!

目次

今回使うデータと行いたい事

今回のポイント

カスタム列・作成画面から入れ子テーブル作成

テーブルから条件に合う行を抽出

各行のテーブルを合計処理

<まとめ>

今回は下の図のように、2つのテーブル/A列からとF列からを使用します

画面左は元データとなっており、年度は2016年と2017年の2年分が含まれています

テーブル名は「AllData」で設定してあります

 画面右はH列に「SUMIFS関数」が入力されており、F列とG列にSUMIFS関数の条件が設定されています

例えば、H2セルには297,628と表示されています

 H2セルは画面左の「AllData」テーブルから「2017年度」「軽自動車」の2つの条件を満たす行を抽出し、売上金額の合計値を集計しています

こちらのテーブル名は「Condition」で設定されています

 今回は、上のSUMIFS関数と同じ計算をエディタ上で行い、エクセルシート上に読込めるようにします

 上のGIF画像では、「Condition」テーブルの下に今回作成するクエリの内容を読み込んであります

 「Condition」テーブルの2行目の年度を変え、更新を押したら「Condition」テーブルの下に読込んであるクエリの内容も変わっています

今回のポイント

別クエリのテーブル化/入れ子のテーブル作成

下の画像はテーブル「Condition」のクエリです

 一番右の列にある列/詳細はエディタ上でカスタム列・作成画面を使用して追加しました

Conditionのテーブルの中に、別なテーブルの内容が入れ子で作成されています

 画面下にあるように、詳細列の各行には「AllData」テーブルの内容がそれぞれ紐づけられています

 この各行に紐づけたテーブルから①条件に合う行のみを抽出し、②合計値を出します

2つのM関数の使用

今回の記事では2つM関数を使用します

①条件に合う行のみを抽出

Table.SelectRows

書き方:Table.SelectRows(テーブル名, 条件)

②合計値を抽出

List.Sum

書き方:List.Sum(リスト名)

カスタム関数の使用

 上記のM関数/Table.SelectRowsの第二引数/条件においては、カスタム関数を使用します

カスタム関数を作成する要領としては、下の図のような要領です

(a,X,b) =>ax + b

まず、()内において式に使用するもの/a,X,bを宣言します

その後、実際に宣言した内容を使用した数式を示します

では、今回行いたい事とポイントを確認したところで本格的な解説を始めたいと思います

続きを読む Power Queryエディタ上で複数条件付き合計処理~M関数使用

指定した範囲の値を使用してフィルタリング

 今回はM関数を使用して、事前にエクセルシートに記入した複数の値を基にしてデータのフィルタリングを行う方法を解説します

画像に alt 属性が指定されていません。ファイル名: マイビデオ-3.gif

M関数を活用する事例となっておりますので、M関数に慣れる機会になれば幸いです

今回使用するM関数は「List.Contains」という関数です

このList.Containsを「each」と組み合わせて活用します

ちなみにM言語では、大文字小文字を認識するのでContainsのCの入力には注意が必要となります

目次

今回の使用するデータとやりたいこと

ダミーの値でフィルタリング

フィルタリングを行うためのリスト作成

数式バーにリストの組み込み

<まとめ>

今回の使用するデータとやりたいこと

今回使用するデータは、次の画像のデータです

*下の画像では業種IDが4番までしか写っていませんが、実際は12番まであります

上のデータの「業種ID」をいくつかエクセルシート上にフィルタ項目として指定し、指定した業種IDのレコードのみをシートに読み出したいと思います

 上のGIF画像では、事前に「2」「4」をシートに読込んである状態から、フィルタ項目に足すことで「2」「4」「」を読み込みました

今回の処理のポイントは、一度ダミーの値にてフィルタリングしてから、作成されたコードにM関数を組み込むことになります

では、解説を本格的にはじめたいと思います

ダミーの値でフィルタリング

まずは、前述の元データをPower Queryエディタ(以降エディタ)に読込ます

次に、新たにできたクエリを「参照」して更に新たなクエリを作成しておきます

 参照して作成したクエリの「業種ID・列」にて、次の画像のように適当な値をフィルタリングしておきます

すると、数式バーが次の画像のようになっているはずです

フィルタリングを行うためのリスト作成

 エディタ上でフィルタリングを行うためのリストは、エクセルシート上にある前述のフィルタ項目を「ドリルダウン」して作成します

まず、エクセルシート上の業種IDを指定したフィルタ項目をエディタ上に読込みます

次に上の画像の見出しの箇所/フィルタ項目で、右クリックをします

ドリhttps://analytic-vba.com/power-query/advanced/parameter-drill-down/ルダウン」という項目が出てくるので、こちらをクリックします

すると、次の画像のようにエディタ上にリストが作成されています

*下の画像では作成したリストの名前を「Filter」にかえてあります

続きを読む 指定した範囲の値を使用してフィルタリング