カテゴリー別アーカイブ: Power Query

複数リストを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」にかえてあります

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

【豆知識】ピボット/縦縦並び➡縦横に並び替え集計

 これまで何度か縦横並びを縦縦並びに変える「ピボット解除」については解説を行ってきました

 今回は、逆に縦縦並びのデータを「縦横」並びに変える「列のピボット」について解説します

 今回解説する「列のピボット」は、「集計」というステップも必要な場合には、相当便利な処理になります!

解説に使用する「元データ」は次の画像のデータです

こちらのデータを「地域」を軸にして、横展開します

実は、元データには「重複」データが含まれていますので、横展開する際には「合計」処理も必要になります

1.Power Queryエディタを開く

元データの上で右クリックし、Power Queryエディタ(以降、エディタ)を開きます

2.ピボットする列を選択

今回は、記事の冒頭で紹介したように「地域」を横展開します

3.「列のピボット」を実行

「列のピボット」はピボット解除のように右クリックではなく、「変換タブ」の「列のピボット」から指定します

上の画像の「列のピボット」をクリックすると次の画像が開きます

要は表の中味となるものを指定するわけですが、こちらは「売上金額」になります

値を指定して「OKボタン」を押すと次の画像のように、記事の冒頭で紹介した重複データも「合計」され、「列のピボット」が完成しています

4.合計以外の計算

前述の3.では「合計」処理を行いましたが、「平均」や「カウント」も計算できます

「列のピボット」ダイアログで「詳細設定オプション」の左横にある▼マークをクリックすると「合計」以外の方法も指定できます

平均を選択すると次の画像のように表示されます

もし、エクセルシートに読込んだ際に、エラーが発生した場合には、自動追加された「変更された型」ステップが不適切に行われている可能性があります

その場合には、上の画像の「変更された型」を削除するか、データ形式を変更するなどの処理が必要になります

今回の解説は以上です

最後まで記事を読んで下さり、誠にありがとうございました

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

にほんブログ村

【豆知識】ピポット解除時の空欄の扱い

 パワークエリのピボット解除は便利ですよね。一括で縦横並びを縦縦並びに変えられます。ところが、元データに空欄が混じると2つ問題が出てきます。1つ目は空欄を含むデータが非表示になることです。

 こちらは「値置換」で対応できます。ところが元データに列を追加した時、追加した「値置換」が追加列に対して行われなくなります。これが2つ目の問題です。

 原因は値置換を行う時に、対象列名が記録されてしまっていて、追加列に対しては「値置換」が行われないのです。こちらはコードを直接置き換えることで対応できます。

今回の課題は、実際の業務ではあまり遭遇する機会が少ないかもしれませんが、Power Queryの「ハードコード」という特性を掴むにはとてもいい課題です

ぜひ、手を動かしてPower Queryの特性を掴んでみてください!

では、上記の①/1つ目の問題から②/2つ目の問題の順番で解説を行って行きます!

①空欄の置換

下の図は、上の表がピボット解除前の元データです

下の表は、元のデータをピボット解除したデータです

ピボット解除時は元データに空欄が含まれていると、空欄のデータは出力されません

例えば、図の下の表では「かつ丼の2020/01/02」の空欄データは抜けてしまっています

空欄データを「0」で表示したい時には、値置換で対応します

ピボット解除を行うクエリをPower Queryエディタ(以降、エディタ)で開くと、上の画像の図のように空欄は「null」で表示されます

こちらの「null」を「0」で置き換えます

置換処理を行う前は、Ctrl+Aで全データを選択しておいてください

値置換を行えば、下の画像のように空欄が0で表示されます

②コード変更

①で置換を行いましたが、次の画像のように元データに列を追加すると置換に関する問題が発生します

下の画像のように、追加された2020/01/08のかつ丼の空欄が0で反映されません

この理由は、Power Queryの特性であるハードコードにあります

ハードコードとは、エディタ内のステップに処理の内容がとともに記録されることです

では、0への置換を行ったクエリの中味をエディタで見てみます

上の画像は、空欄から0への置換を行ったコードです

このコードを見ると、0への置換処理は「2020/01/07」までの列に対して行うことが記録されています

 ですので、ハードコードされていない列、上記のコードに記載されていない列が追加されると「置換」は行われません

この状況をどのように改善するかというと、コード自体の置換を行います

まずは、列名が記載されたコードは削除します

その後削除したコードを、下の図のようにテーブル内の全ての「列名」を表示するTable.ColumnNamesで置き換えます

そうすれば、いくら列を追加しても置換が行われるようになります

今回の解説は以上になります

②のコード変更については、概要だけを解説しました

Power Queryの言語である「M言語」については、別途、シリーズで記事を書きますので、そちらでは詳細な解説を行いたいと思います

記事を最後まで読んで下さり、誠にありがとうございました

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

にほんブログ村

【分析作業用】大量データを1目で把握する

 Power Queryには旧エクセルの「104万行」の壁がありません。ですから大量のデータも手軽に扱えるのが魅力です。ところが、Power Queryエディタ(以降、エディタ)では、旧エクセルのように、ショートカットキーを活用してデータ内を端から端まで散策するようなことができません。ですので、エディタ内ではデータ全体を把握しずらいのです。

しかも行数が1000行以上だと全ての行は表示されないようになっています

これは大量のデータがあっても、素早く動くようにするための工夫ですが、ユーザーにとっては不便です。

 但し「散策」できない点を補完する機能がエディタ内の「表示タブ」にあります。今回は「表示タブ」での「補完機能」について解説します

今回解説する補完機能の内容は次の3つになります

1.データの列数を1目で把握する

2.データの行数を1目で把握する

3.エラーの発生数を1目で把握する

 上の3つは、どれも「表示」タブ内の簡単な操作で把握できる内容になっています

では、今回解説する内容について紹介したところで、詳細な解説をはじめます

1.列数を把握する

「一体、このデータはどこまで右に続くのか?」

列数があまりに多いと、最終列を探す旅にでかけなくてはなりません

前述の表示タブでは、少なくとも「列数」はすぐに把握できます

表示タブの左下に列数が表示されています

こちは、行数についても「1,000行以下」であれば表示されています

続きを読む 【分析作業用】大量データを1目で把握する

【分析作業用】グループ毎の平均と個の平均の差を自動集計する方法

 Power Queryでは過去の記事で紹介したように、簡単にグループ化して数字を集計することができます。但し、グループ化した際には、元データの1部の列は非表示になります。

 実は、グループ化には「すべての行」というオプションがあり、こちらのオプションを選択すると「グループ化した数字」と「グループ化していない数字」を並列表示できます

 今回は更に、並列に表示した数字間で差(「グループ毎の平均」-「個の平均」)を集計します

この差とはつまり数字のバラツキです

バラツキを自動抽出することで、数字の分析に役立てるようにします

では今回、解説に使用する元データとアウトプットする内容について解説します

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

こちらのデータからクエリを作成し、エクセルシートに次のように出力します

①グループ平均

グループ化により、部門ごとの平均給料を集計します

②すべての行

①の部門ごとの数字と並行して、元のデータ(個)を表示します

③差

②の個の数字から①のグループ平均の数字の差を集計します

 

上記の①~③で今回のアウトプットの内容について解説しました

では、①~③の順に詳細な解説を行っていきます

①グループ平均

こちらは過去の記事で既に解説した内容になります

①では部門毎に、給料の平均額を計算します

つまり、グループ化する項目は「部門」、集計する項目は「給料」になります

上の画像のように、元のデータをテーブル化して、Power Querエディタ(以降、エディタ)を開いた後、ホームタブから「グループ化」をクリックします

「グループ化」をクリックした後に、上の画像の画面が開きますので、こちらで4つの項目を指定します

・グループ化する項目➡部門

・新しい列名➡給料・部門平均

・操作➡平均

・列(集計する列)⇒給料

上記の4つの項目を指定して、OKボタンを押すと次の画像の画面のようにグループ毎の平均値が集計されます

②すべての行

①で行ったステップに修正を加えて、元のデータの個々の数字を表示します

まずは、①で行ったステップの右横のマークをクリックします

上のGIF画像内で開いた「グループ化」画面で再度、グループ化条件を設定します

まずは、下の画像の画面上の「詳細設定」を指定します

上の画像のように「詳細設定」を指定すると、下の画像の下にある黄色の箇所のように「集計の追加」を行えるようになります

こちらの「集計の追加」をクリックすると新しい列名が指定できるようになります

次に、追加された新しい列の「操作」にて、下の画像のように「すべての行」を指定します

ちなみに、下の図の右にある、本来は集計する列を指定する箇所は「ブランク」のままでいいです

では、新しい列名を上の画像のように指定したところで、OKボタンをクリックします

すると、上のGIF画像のように新たな列が追加されます

次に、上の画像の右上にある「黄色の箇所」のマークをクリックします

すると、上の画像の画面が開きますので、こちらで黄色の箇所を設定します

・氏名➡チェック

・給料➡チェック

・元の列名をプレフィックスとして使用します➡チェックを外す

上の3つを指定したら、画面右下のOKボタンをクリックします

すると、上のグループGIF画像のように「氏名」と「給料」の列が右横に展開します

これで、①で「グループ化した項目」と「個々の元データ」が並列で表示されるようになりました

③差

上の②で 、①で「グループ化した項目」と「個々の元データ」が並列で表示されるようになりましたので、互いの差を計算します

計算式は下のようになります

ⅰ)個々の元データ <マイナス> ⅱ)グループ化した項目

実は上の式がとても重要です

差の計算は下の画像の画面で行うのですが、計算対象となる列指定の順番が重要です

計算式の左からⅰ)⇒ⅱ)の順番で列を指定します

列の指定はCtrlキーで行います

仮に、ⅱ)からⅰ)の順番で列指定をすると「ⅱ)⁻ⅰ)」の計算式で差が計算されます

が集計できたところで、エクセルシートに読込むのですが、その前に2つ処理を行います

まず、2つの列の「列名」を下の図のように修正します

次に、グループの平均を集計した列の数字を丸めておきます

では、2つの処理を行ったので、エクセルシートに次の画面から「読込先」を指定して読み込み処理を行います

次のGIF画像が実際に「読込処理」を行った時の画像です

<まとめ>

 今回は、過去に解説したグループ化を更に踏み込んで、個々の元データも並列で表示する方法を解説しました

 個々の元データを表示するには、グループ化を設定する画面で「すべての行」を指定します

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

 更に、個々の元データを表示した後は、グループの平均と個々の元データの差を自動集計しました

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

個々の平均との差分を集計するだけでも、数字全体の特徴は掴みやすくなります

 仮に、Power Queryを使用しないで集計しようとすれば、ピボットテーブルやエクセル関数を組み合わせて処理を行わねばなりません

 このブログでは今後、Power Queryを分析作業に直接役に立つような手法も発信していきますので、よろしくお願いします!

長文を最後まで読んでくださり、誠にありがとうございました

参考までに今回使用したデータを添付します

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

にほんブログ村