ラベル 取得と変換 の投稿を表示しています。 すべての投稿を表示
ラベル 取得と変換 の投稿を表示しています。 すべての投稿を表示

2021/06/25

[Excel BI] ピボットテーブルで全体に対する%を計算する

ピボットテーブルを使いこなせたら、ものすごい時間短縮になり、仕事の結果も出る!と考えている人は多いと思います。ピボットテーブルが使えない原因のほとんどは「元データ」にあって、それで行き詰まる人が多い、というのはよく聞く話なんですが、逆に、もし元データに問題がなかったらすべてうまくいくのか?というと、実はそうでもありません。

やり方さえ知っていれば超時間短縮になるのに、といつも思うのがピボットテーブルの「全体に対する(占める)割合(%)の計算方法」です。ピボットテーブル作成までできているので、本当に「あとちょっと」なんです。

以下のようにピボットテーブルの外で計算しているワークシートを見ました。数式の =E2/$E$6 が総計に対する割合を計算しています。$は相対・絶対参照云々、、、ということを言いたいわけではないんです。


Excelの素晴らしいところは創意工夫と時間をかければ何とかなるところです。しかし、そのため知っていれば楽になる本来の使い方を知らないまま、無駄に時間をかけてしまうこともしばしばあります。(余談ですが、同じ結果が出る違うやり方があったり、追加された新機能で今まで苦労してたことが楽になった、など、経験者でもそれ知らなかった、なんてことはザラなので、知らないことを卑下することはありません!)

上記のやり方でレポート終了、今後そのワークシートを再利用しないのであれば、これでも全然問題ないのですが、例えば、製品Eが追加された、Bが無くなった、などのデータの追加・更新がはいった時は行数が変わるので計算式を調整する必要があります。1つや2つなら目で確認できますが、1000個ある内の20個くらいが入れ替わる、という状況では目で追うこともできません。それを関数やマクロでチェックする、、、なんていう斜め上の方向に行く前にピボットテーブルの機能を見直してください。めんどくさいなぁ、と思うことはだいたい実現されています。

ピボットテーブルで列に対する割合を計算する

上の図のように総計 30 を 100% として、各項目 A, B, C, D の占める割合 % を出したいパターンは使うケースがかなり多いと思います。とても簡単なので是非覚えてください。

ポイントはセルの書式設定と一緒で「データの見せ方を変えてあげる」なんです。

通常のデータと、割合のデータの2つが必要なので、以下のように個数の列を2つ作ります。


個数のフィールドを同じように値のボックスに何個でもドロップすることで同じ列を作成できます。次にこのように作った「合計/個数2」の列を%の見せ方に変えます。その列にあるセルの上で右クリックをして、右クリックメニュー(コンテキストメニュー)を表示します。


上のメニューの下から4番目にある「計算の種類」を選択します。


ここで「うぁ、、何選べかいいかわからない」となりそうですが、列に対する比率を計算するので、「列集計に対する比率」か「親列集計に対する比率」のいずれかです。とりあえず、「行集計に対する比率」を選んでください。


あとは、セルの書式設定で小数点以下の桁数を調整してもよし、値フィールドの設定から表示形式を調整し小数点以下の桁数を1などにすれば以下のようになります。


いろいろな計算オプションがあるのは、いろいろなケースに対応するためです。たとえば、以下のようなピボットテーブルの場合はどうでしょう。


単純に総計の 30 に対して占める割合であれば、先ほどの「列集計に対する比率」でOKです。でも、だいたいビジネスの世界では以下のように「キッチン用品」とか「庭用品」で小計をしたりします。同じように事業部毎だったり、リージョン・地域ごとだったりします。
(せっかくなので、その小計の出し方を含めてアニメーションGIFにします)



別の計算の種類を選ぶことで、カテゴリ(キッチン用品、庭用品)を100%にして各項目の割合を出すこともできます。いろいろ試してみてください。

忙しいビジネスパーソンこそピボットテーブルを習得すべき

ビジネスパーソンのための、、、というお題で極論すれば、Excelは関数、ましてやマクロやVBAを覚える前に、ピボットテーブルだけを覚えれば、大体の計算はできます。なぜならビジネスの基本のデータは「表」形式であり、表をベースにした計算が求められるからです。

Excelの機能としての「テーブル」、それらを成形・集計するピボットテーブル、さらにクラウドやサーバーからデータを取りこむExcelの「取得と変換」、グラフはExcelの機能としてはかなり複雑で難しいのですが、それでも最新機能で必要なところだけ押さえることでかなりのことができると思います。

あまた機能を内蔵しているExcelはその学習コストがあまりに高い、大きいです。よりに自分に必要な機能を厳選して、それらの機能習得に時間やお金をかけることが望まれます。

何らかの参考になれば幸いです。

過去の投稿ですが、知識としてはまだ使えますのでお時間があればどうぞ参照ください。

[Excel BI]ピボットテーブルで予算と実績を管理する
https://road2cloudoffice.blogspot.com/2019/09/excel-bi.html

[Excel] テーブルのすすめ ピボットテーブルとリレーションシップ

[Excel] テーブルのすすめ 集計行
https://road2cloudoffice.blogspot.com/2014/10/blog-post_31.html

2018/03/04

[Excel 取得と変換] クロス集計表やピボットレポートをシンプルな表(テーブル)に変換する

何度かこのブログで紹介していますが、Excelの新機能(と、もう言えない?)の「取得と変換」は、これまでの「外部データの取り込み」を置き換えるだけではありません。

先日、ある方から相談を受けたのが、クロス集計表と呼ばれる表をデータ分析のためにクロス集計ではないシンプルな表形式データ(テーブル)に変換するものでした。その方は手作業でその変換をしていたのですが、テーブルのサイズが大きくなったり、繰り返しの作業になると手では無理、なんとか自動化できないか?というものでした。

これ、今は取得と変換のクエリエディターの「列ピボットの解除」を使えば、VBAを使わなくても変換ができます。

取得と変換のこの「クロス集計を解除する」言い換えれば「列ピボットを解除する」機能は、まだまだ認知が低いようです。Excelのテーブル機能と合わせて、取得と変換のクエリエディターは、業務でデータ分析をする人(もっと言えば、Excelを使ってレポートを作る人)にとって知っていて損はしない機能だと思います。また、PowerBIを使いこなすためのベースとなる知識のひとつです。

クロス集計表とは質問やデータのカテゴリを縦・横に「クロスさせて」数値を集計した表です。多くの人が意識しないでレポートの表を作ると、このクロス集計表になっていることが多く、Excel初級講座などでも、まずこのクロス集計表を作らせる演習が多いのも事実です。以下の表は、支店と製品のカテゴリを、月別の数値とクロスさせた表です。
クロス集計表の代表例 支店カテゴリ(縦)と月別の数値(横)をクロスさせた表
データ分析という観点からはツッコミどころが満載の表で、これを分析元のデータの表として作ってはいけないのですが、反面、数値を理解しやすい表なのです。この表はレポートとしての「最終形」と言えます。繰り返しになりますが、この表から別の分析をするといった作業には向かないのです。

分析のためのシンプルな表とは、縦・横のカテゴリでクロスしていない表で、以下のような表です。
シンプルな集計前の表形式のデータ
前置きはここまでにして、クロス集計表を「取得と変換」の「クエリエディター」の「列ピボットの解除」などの機能を使って、シンプルな表形式データに変換する手順をご紹介します。

以下は一連の作業を記録したアニメーションGIFです。
クロス集計表を取得と変換クエリエディターを使ってピボット解除する
以下、アニメーションGIF内の手順です。

1. クロス集計表をテーブルに変換する
リボン[挿入]のテーブルから変換できます。ショートカット Ctrl+T も使えます。
変換したいクロス集計表のセルを選択するだけで自動的に範囲が選択されます。
なお、集計行・集計列はいりません。アニメーションGIFでは、自動選択で集計行ははずれましたが、集計列を含んでテーブル変換したので、クエリエディターで集計列の削除をしています。

2. テーブルを指定してクエリエディターを立ち上げる
上記で作成したテーブルのいずれかのセルが選択されている状態(=アクティブセルをテーブル内のセルにする)にして、[データ]タブの「取得と変換」の [テーブルから] をクリックして、クエリエディターを立ち上げます。

クエリエディターはExcelとは別のウィンドウです。クエリエディターで指定した編集・操作の結果をExcelのワークシートに反映させることができます。元のデータを書き換えたりしないので安心してください。

3. 不要な列を削除する
集計列はいらないので「小計」の列を選択して、右クリックメニューの[削除]を使って列の削除をします。
このあたりの操作感はほぼExcelと一緒です。また、慣れてきたら要らない列を削除する方法から、必要な列を指定して残す方法も試してみて下さい。実際の業務では「必要な列だけを指定して残す」ほうが使い勝手が良いです。

4. 列ピボットを解除する
クロス集計表で慣れていると「何がダメなのかわからない」「どの列が列ピボットなのかわからない」と感じる人がいるようです。
仕方ありません。最初にExcelを習うときのサンプルの表はクロス集計表になりがちで、それは「罫線」のひき方、小計セルで使うSUM関数、さらには同じ値が連続したセルの結合方法(最悪・・・)を教えるには最適な表だからです。

Accessなどのデータベース製品を勉強した人にとっては、テーブルや表のことを言っているので理解しやすいと思いますが、Excelは上記のような教え方をされるため、ここの理解が第一関門かもしれません。このあたりは別途「テーブル」や「フィールド」、「レコード」といったキーワードで勉強してみてください。テーブルにおいては、1月、2月、3月、、、は月が「横に並ぶ」、東京、大阪、名古屋など地域や都市が「横に並ぶ」、製品A、製品B、製品Cなど同じ性質で種類の違うものが「横に並ぶ」ことはありません。それらは「月」や「地域」や「製品」の列にして扱います。

そうすると同じような行が増えるから「見づらい」という人もいますが、その感覚正しいです。そこから見やすく集計するから大丈夫です。また、何度も繰り返し同じ値のセルが続くからといって「結合セル」は使わないでください。(ワークシートでテーブルに変換済みだと結合セルは使えなくなりますが。)

サンプルのアニメーションGIFでは、「支店」と「製品」の列は列ピボットではなく、「1月」「2月」「3月」の列だけが列ピボットです。これらをまとめて「月」の列にしたいので、「1月」から「3月」の列を選択して、「列ピボットの解除」を行っています。解除した列は「属性」になっていますが、後で「月」などの名前(フィールド名)に変更可能です。

5. 空欄に値を埋める
列ピボット解除によって、元の行の直後に新しい行が追加されます。その時の空欄のセルに何を入れるかを指定します。アニメーションGIFの例では「支店」の列(フィールド)に空欄ができてしまいました。このような場合、「下方向にフィルする」を使って空欄に必要なデータを入れることができます。

6. ワークシートに結果を戻す
ここまでの操作は「クエリエディター」ウィンドウでの操作です。この結果をワークシートに戻すために、クエリエディターウィンドウの[ファイル]タブの[閉じて読み込む]や[閉じて次に読み込む]を使って、ワークシートに結果を戻します。

これでクロス集計表を表形式のテーブルに変換することができます。

このクエリエディターで行った操作は、ブックに保存されます。ブックに保存されているクエリは後から編集することも可能で、なおかつデータの「更新」によって最新の状態にすることができます。取得と変換の最大の強みは、元のデータを柔軟に指定できること(Excelは元より、他のcsvファイル、SharePointやFacebook、他のデータベースなどなど)、元データを変更せずにクエリエディター内で編集・加工すること、その手順をクエリとしてブック内に保存できること、そしてデータの更新を使ってクエリの結果を最新にできること、です。

この機能は覚えていて損はしません。この取得と変換のピボット解除の機能を知らないと、強引に手作業と機能で処理するか、この機能を知らないExcel上級者からVBAでやるしかないね、といったアドバイスを受けることになります。モダンエクセルで本当に知ってほしい機能のひとつです。(しつこいですが、あとはExcelのテーブル機能です。)
https://road2cloudoffice.blogspot.jp/2014/10/vlookup.html

2017/06/15

[Excel] Excel で JSON データを読み込む

この前の投稿でご紹介したように、Power Query が「データの取得と変換」となって Excel の標準機能となり、様々なデータの取り扱いが可能になりました。(2017年6月現在、Office 365 サブスクリプションの 最新の Excel が機能拡張の対象となります)

データの取得と変換である Power Query は、アドイン単体としての機能追加、さらに Power BI Desktop の登場によって、Power BI Desktop の ETL 機能 (Extract, Transform, Load)として拡張が行われてきました。Power Query は、Excel そして Power BI Desktop のデータの取り込み、変換・加工、ロードを受けもつ ETL 機能として今も進化し続けています。

JSON 形式のデータをプログラミングなしで取り込む

この進化し続ける「データの取得と変換」機能で、すぐにでも使ってほしいのが CSV データの取り込み機能ですが、人によっては JSON 形式データの取り込みのほうを重宝するかもしれません。

というのも、JSON 形式のデータ取り込みは、以前からも Power Query を使ってできていたのですが、現在は空のクエリから詳細エディターを開いて Power Query 関数を手で記述することなく、クエリ エディターのクリック操作のみで取り込みが可能になったからです。

また、JSON形式のデータを表形式に変換してワークシート上に読み込むためには、VBAを使う方法がこれまで多く紹介されていましたが、VBAでプログラムすることなく、JSON形式のデータをワークシートに展開することができるようになりました。

Web から JSON でデータを取り込む

実際のところ、JSON形式のデータによるテキスト ファイルをフォルダーから読み込むよりも、Web 上での検索条件設定の結果で、JSON形式のデータが表示されることが多いと思います。

サンプルとして、IT勉強会の告知・募集でお世話になることが多い connpass さんの API を使ってみたいと思います。

https://connpass.com/


connpass さんは、イベントサーチ API を提供していて、検索クエリの条件に応じた一覧を JSON 形式のデータとして取得することができます。

connpass API リファレンス

Web API や REST API でデータ提供サービスをしています、という場合、上記のような API リファレンスのページが必ずありますので、探してみてください。

たとえば "BI" というキーワードでイベントを検索するための URL は以下のようになります。

https://connpass.com/api/v1/event/?keyword=bi

この URL で、以下のような JSON 形式のデータによるレスポンスがブラウザに表示されます。


このデータを、Excel のワークシートに展開できるように2次元の表形式に「変換」して、私たちが読めるようにデータを加工することが、データの取得と変換のクエリ エディターだけでできます。上述のように VBA などでプログラミングをすること無しに可能です。

シンプルなデータの取り込み手順

JSON データの取り込みには2つの方法があります。ファイルから取り込む方法と、Web から取り込む方法です。ファイルから取り込む方法を使っても URL を指定することで Web からの取り込みが可能ですが、今回は「Web から」を使ってみます。


「Web から」のデータ取得は、これまでの Web クエリよりも高機能になっています。HTML ページの table だけではなく、今回のように JSON にも対応しているのです。

connpass の Web API 利用はサインインする必要がありません。以下のダイアログで "PowerBI" キーワードを含むイベントを検索する URL を入力し、OKをクリックします。(上記 JSON サンプルのキーワード "bi" の検索結果の数が多かったので、キーワードを PowerBI に変更しています。注意してください。)


接続が完了するとクエリ エディター ウィンドウが立ち上がり、以下の画面が表示されます。


注意点は、ここでファイルのアイコンの [connpass.com] をダブルクリックしてはいけません。アイコン上でマウスオーバーすると「開くにはダブルクリックします」というツールチップが表示されますが、ダブルクリックすると、現時点ではテキストファイルとして処理されてしまいます。リボンの [変換] タブの [形式を指定して開く] から [JSON] を選んでください



Json 形式で開くと以下のデータが表示されます。


results_returned、events、results_start、results_available の意味は、上述の API リファレンスに解説がありますので、詳細については後で参照してほしいのですが、情報から「指定した(PowerBI)キーワードの検索結果の総数は 19 件で、このファイル(データ)に含まれるのは 10 件、検索開始位置は 1 件目からですよ」という意味です。

あらかじめだいたいの件数がわかっている、もしくは取得する件数に上限を付けることができるのであれば、取得件数を 20 件に指定して全件を一気に取得することができます。PowerBI のサンプルは件数が少ないので、以下の検索条件にしてみます。

条件を変更(URLの変更)のため、クエリの設定の [適用したステップ] の [ソース] の横にある歯車マークをクリックします。


ダイアログの URL を変更します。取り込む件数の上限を 20 とするパラメーターの &count=20 を追記した URL です。


[OK] を押すと、results_returned が 19 に更新されます。


今回は例をシンプルにするために、検索結果で全件を取り込むパラメータを追加しました。また、匿名アクセスで利用が可能なので、認証に関する設定はありません。これらへの設定・対応はもちろん可能です。あらためて別の機会にご紹介したいと思います。

今、この状態は、検索したいキーワードを設定した URL をサーバーに送り、その結果を JSON 形式のデータとして Web 経由で 19 件取得しています。
この表示されているリストの events の List のリンクに、JSON 形式で 19件の検索結果の格納されています。
List のリンクをクリックすると、以下のように List リンク内のリストが 19件のデータとして展開されます。


Record のリンクをクリックすると、クリックした1件分だけの内容を確認することができますが、今回はすべての Record(勉強会)の詳細を一気に展開したいので、ここでリボンにある [テーブルへの変換] をクリックして、19件のレコードを含むリストを、テーブル(表)形式に変換します。すでに1件1レコードとして認識されているので、テーブルへの変換のダイアログのオプションはそのままで、[OK] ボタンをクリックします。


リストだったデータがテーブル形式になりました。


ここで Record リンクをクリックすると1件分のみの展開をしますが、テーブル形式に変換したことによる「列名」の Column1 の横にある [展開] ボタンを押すと、Record に含まれるデータをテーブル形式1件分のデータのみなした場合の列名の一覧が表示されます。ここで取り出す列を絞り込むこともできます。今回はすべての列を選択し、かつ、列名が長くなるので、[元の列名をプレフィックスとして使用します] のチェックをはずして、[OK] ボタンをクリックします。


JSON形式の元データを、21列19行のテーブル形式のデータに変換することができました。クエリ エディターの操作のみで1行もコードを書かずにここまでできました。


テーブル形式になったデータを Excel 向けに加工する

今回は Excel の「データの取得と変換」を使って connpass から検索結果を JSON 形式のデータで取得しました。その後、ここまでの処理・操作で、データはテーブル形式になりました。それぞれの列名がどのような意味なのか、connpass の API リファレンスのレスポンス フィールドで確認することが可能です。

ここで、必要な列や行のみを残す、といった加工が可能です。ここからの処理は、JSON だから特別、というものはなく、普通のテーブル形式のデータのフィルター オプションを操作する感覚でできるのは、クエリ エディターを使ったことがあれば理解できるでしょう。まだ慣れていない方は Power Query によるデータの加工や絞り込みについて、もう少しだけ情報収集するといいでしょう。

この connpass のデータや、特にサーバーからデータを取得した際に、Excel ユーザーが一瞬「おや?」と思うのは、日付データの扱いです。この日付データのトピックだけで結構長いお話になってしまうので、ここで詳細は割愛しますが、1つだけ意識してほしいのは、サーバーの日付形式のデータは、そのまま Excel で扱うことができない場合がある、ということです。


上記はデータ変換をせずにテーブル形式に変換したJSONデータをワークシートに読み込み、列名 started_at の1行目のセルの書式を表示したものです。2017-05-20T13:00:00+09:00 は勉強会・イベントの開始日のデータですが、Excel は単なる文字列として認識し、日付として扱っていません。
多くの場合、Excel は日付「らしい」文字列のセルへの入力があると、日付データの「シリアル値」に変換し、表示形式によって人間が日付と認識できるデータに見た目上変換します。残念ながら、2017-05-20T13:00:00+09:00 という ISO-8061 形式の文字列は Excel によって日付データと認識されなかった、となります。このままではシリアル値として扱っていないため、日付関連の関数の利用や演算ができません。

そのため、クエリ エディターで Excel が日付として認識できるように加工します。
データをワークシートに読み込む前の、クエリ エディター上で、対象となる日付のデータの started_at の列データを変換します。
started_at の列名をクリックし列を選択した状態で [変換] タブの [データ型の検出] を使ってもいいですし、この日付データ型は [日付/時刻/タイムゾーン] と呼ばれるものなので、列名横のデータ型のボタンを押して、明示的に選択することで変換可能です。[ABC 123] のアイコンが地球儀と時計のアイコンに変わります。


この変換ステップを行うことで、[日付/時刻] に変換できるようになります。[日付/時刻/タイムゾーン] に一度変換しないで、いきなり [日付/時刻] を選択すると Error になるので注意してください。データ型ボタンで [日付/時刻] を選ぶと、列タイプの変更 ダイアログが表示されるので、[新規手順の追加] を選んでください。[現在のものを置換] はタイムゾーン付きのデータに変換したステップを置き換えてしまうのでエラーになります。


このように日付データを変換して Excel のワークシートに読み込むことで、シリアル値として扱うことができます。

日本語データも特に問題なく扱うことができています。イベント(勉強会)の概要データの description は HTMLタグを含むテキストデータとして取り込まれています。ここからまた何らかの判断をしたい場合は、クエリ エディターの詳細エディター上で M 言語を使ってやってもいいですし、ワークシートに取り込んだ後で、関数や VBA を使ってもいいでしょう。


実際は考慮すべき点がいっぱい

今回は JSON 形式のデータでも、取得と変換のクエリ エディターを使うことで、プログラミングすること無しに Excel ワークシートに取り込むことができることを紹介するのが目的でした。しかし、それ以外のところで考慮すべきことが出てくるのが実際でしょう。

たとえば、取得する件数。サービスによっては上限が決まっていて、それ以上のデータの取得は、今回のような件数の指定のほかに、ページ数指定や、オフセット指定を使うことが推奨されます。
Power Query / 取得と変換のクエリ エディターで、詳細エディターを使ってこれらへの対応が可能です。ページ数やオフセットの「繰り返し」の処理は、URLを組み立てる一連のステップを「関数化」して、ページ数やオフセットを引数として渡す、という方法を使います。

この件数の上限への対応は結構「頭の体操」的なアイディアが必要になります。場合によっては CData さんの ODBC ドライバーを使うと幸せになれることがあります。
サイボウズの kintone の API も1回のリクエストあたりのデータ取得件数の上限がありますが、CData さんのドライバーを使うことで、その上限を気にせずにデータの取得が可能になります。

CData ODBC ドライバー一覧
https://www.cdata.com/jp/download/?f=odbc

Power Query/Excel 取得と変換/Power BI Desktop も標準機能としてさまざまなデータソースに対応していますが、CDataさんのような専業メーカーさんの ODBC ドライバーを試してみると、意外な発見や、解決策を見つけることができるかもしれません。

また、匿名アクセスではなく、ユーザー名+パスワード、アプリケーション登録による Web キーの利用など、サービスによって認証の方法はさまざまです。
connpass と同じくらい IT 勉強会の告知・募集・管理ツールで人気がある Doorkeeper の場合は、検索の URL の送信と一緒に Header データに認証情報を入れる必要があります。connpass は「Web から」の「基本」を使いましたが、Doorkeeper は「詳細設定」を使って、Header に認証情報をセットして、検索リクエストを送信する必要があります。Doorkeeper の API の解説には、Power BI Desktop や Excel クエリ エディターの具体的な設定方法や手順はないので、苦労するポイントでしょう。

登録して、Public API Access Token を取得
HTTP要求ヘッダーに Bearer を使ってトークンを追加
正直いうと、Doorkeeper API で Authorization Bearer に行きつくまで結構な時間がかかりました。

長くなりましたが、Excel のデータの取得と変換という新しい外部データ取り込みの仕組みを使うことで様々なデータソースへ接続し、様々なデータ形式のデータを扱うことができます。まだまだ進化中ですが、その方向はなるべくコーディングさせない方向で、JSON形式のデータであっても、コーディングなしでテーブル形式に展開して、ワークシートに取り込むことが可能です。

食わず嫌いせずに、この新しい機能をぜひ使ってみてください。

[追記] 最後まで読んでいただいてありがとうございます。取得と変換の機能の一つの「ピボットの解除」もJSON処理同様これまでVBAでなければできないと言われていた処理です。こちらもおすすめ機能なので是非使ってみてください。
https://road2cloudoffice.blogspot.jp/2018/03/blog-post.html

[追記] REST APIで取れないデータをWebページスクレイピングでとる方法を追加しました。
https://road2cloudoffice.blogspot.com/2020/05/excel-web.html

2017/06/12

[Excel] データの取得と変換が標準になりました

Excel の [データ] タブの [外部データの取り込み] がリボンから消え、[データの取得と変換] が標準機能になることが発表されていました。Insider などの最新版を早く使う更新チャンネルでは3月で変更されていましたが、一般の人向けのチャネルでも更新が反映されたようです。

バージョン 1704 ビルド 8067.2157

データの取得と変換がリボンで標準機能になりました
この [データの取得と変換] は、Power Query と呼ばれていたアドイン機能が Excel の標準機能として取り込まれたものです。さまざまなデータを扱うことができ、これまで VBA を使わなければできなかったデータの操作・取り込みも可能になっています。

マイクロソフトによる記事
統合された取得と変換(support.office.com)

上記のマイクロソフトによる記事に書かれているように、この機能は「Office 365 サブスクリプションご利用の場合に限ります。」です。

過去にこのブログでも「Power Query」の機能として、いくつか紹介しています。

Excel ユーザーのための Power Query

[Power Query/取得と変換] ブックにある複数のワークシートをまとめる

[Power Query/取得と変換] ブックにある複数のワークシートをまとめる 2

CSVファイルの取り込みも、この新しい「データの取得と変換」をぜひ使ってみてください。代表的な新機能として、CSVデータ取り込み時に条件を指定して取り込み件数を絞り込むことができます。大量件数のCSVファイルの扱いで悩んでいる人にとっては、VBA を使わなくても、Excel に取り込むデータ件数を少なくできます。

いやいやいや、それでも前の機能を使わなければならない、いずれは移行するとしても、今は前の機能を使いたい、という方は、オプションで復活させることができます。

[ファイル] - [オプション] - [データ] の「レガシ データ インポート ウィザードの表示」が、これまでの[外部データの取り込み] です。このチェックボックスをオンにすることで、[データの取得] から展開する [従来のウィザード] が追加・表示、その中に復活させることができます。この変更はすぐに反映されるので、Excel を立ち上げなおす必要はありません。



オプションの [データ] でチェックをしたのにリボンに表示されない、と慌てないでください。[データの取得] の下に [従来のウィザード] が追加され、そこにチェックした復活させたい機能があります。

2017/04/11

[Excel] 取得と変換が標準になります(更新チャンネル注意)

(注) 2017年3月の「取得と変換」データ タブの変更は更新チャンネル「Insider」限定です。
通常利用されている Office 365 の更新チャンネルではまだ適用されてません。
さらにパッケージ版(永続ライセンス)への変更についての発表はまだないようです。(2017年4月現在)

PowerBI エクセル アドインの Power Query は Excel 2016 より標準機能の「取得と変換」となりました、という話はこのブログで紹介してきたメインの内容でもあります。

Excel 2016 と Power Query (取得と変換)
https://road2cloudoffice.blogspot.jp/2015/11/excel-2016-power-query.html

その「取得と変換」について、さらに大きな変更が今年行われます。その日本語の記事がマイクロソフトより公開されていました。

統合された取得と変換

これまで外部データの取り込み機能として提供していた「外部データの取り込み」をリボンからはずして、「取得と変換」のみに変更する、というものです。2016年に標準機能になり、2017年には元の機能を置き換える、という流れですね。

ポイント1
2017年3月の更新は Insider 限定です。
Windows用 Excel2016 に対する更新(2017年3月)

通常は「Current(最新機能提供チャンネル)」や「Deferred の最初のリリース」などです。
更新チャンネル更新機能は以下のページが参考になります。
https://technet.microsoft.com/ja-jp/office/mt465751.aspx

チャンネルとリリース日については以下が参考になります。
https://technet.microsoft.com/ja-jp/library/mt592918.aspx

Office Insider はいち早く最新機能を利用し、検証するためのプログラムです。
https://products.office.com/ja-JP/office-insider

ポイント2
この更新は Office 365 サブスクリプションのみです。
上述の「統合された取得と変換」ページに以下の注意書きがあります。

そのため、Office Insider に登録していないユーザーの Excel では、まだこの変更は適用されませんのでご注意ください。

ご自分の Office が何かを調べる方法は以下のページの方法が参考になります。
使用している Office のバージョンを確認する方法

この方法で「製品情報 Office」の下に「サブスクリプション製品」とあれば、それは Office 365 の Office (笑) です。サブスクリプション製品という単語がなく、「ライセンス認証された製品」であれば、それは Office 365 ではない、永続ライセンスの Office (昔からの Office) です。

繰り返しになりますが、Office 365 サブスクリプション製品であっても、更新チャンネルの確認をしてください。最近は Insider プログラムの内容が一般公開されることが多く、更新チャンネルが「最新機能提供チャンネル」であっても、記事にある最新機能の更新確認ができないことも多々あります。

更新チャンネルの種類と特徴については、以前にブランチ(分岐)という呼び名も使われ、過去のネットの記事を参照すると混乱しがちですが、以下のマイクロソフトの記事を参考にしてください。

Office 365 ProPlus 更新プログラム チャンネルの概要

2017/03/03

[Power Query] 大量のデータベースから、セルに指定した条件でデータを取り出したい

Power Query/Excel の勉強会でお付き合いのある方から以下のような質問をいただきました。

PowerQueryの機能には、MSクエリで可能だったセルの値を使ったパラメータークエリのような機能はないのでしょうか?大量のデータベースから、セルに指定した条件でデータが取り出せて便利だったのですが。
昨年の春頃に、Power BI Desktop および Excel Power Query - 取得と変換 で、「パラメーター」の機能が実装されました。このパラメーターを使えば、設定した値(文字や数値、日付など)の中から選択して、データ抽出の条件として使えることはわかっていました。

Deep Dive into Query Parameters and Power BI Templates
https://powerbi.microsoft.com/ja-jp/blog/deep-dive-into-query-parameters-and-power-bi-templates/

期待している Excel 利用のシナリオは、取り込みたい条件を Excel のセルで指定、たとえば、入力規則で設定したドロップダウン リストから選択などで行い、その指定した条件で元のテーブルからレコードを絞り込んでワークシートに展開する、というような使い方だと思います。

パラメーターを使って絞り込み条件を変更する

Power BI Desktop であれば、新機能の「パラメーター」を使い、 A, B, C, D などのリストで作ったパラメーターで、リストから選んだ条件で絞り込みを行い、データ モデルに結果を Load します。

等しい条件にパラメーターを指定する
この条件を変えたければ、Power BI Desktop の [ホーム] タブ - [外部データ] の [クエリを編集] から [パラメーターを編集] を選び、表示されるパラメーターの入力 ダイアログボックスで、条件(パラメーター)を変更できます。[変更の適用] を行えば、変更した条件で元のデータセットからデータを読み込み、データ モデルを更新します。
[クエリを編集] - [パラメーターの編集] を選択
[パラメーターの編集] で表示される パラメーターの入力 ダイアログ
パラメーター変更後に表示される警告
Power BI Desktop の場合、このようにクエリ エディター ウィンドウを再度開くことなくパラメーターの変更が可能です。この使い勝手は想定通りだと思います。

ところが、Excel Power Query - 取得と変換 では、同様の行の絞り込み条件とパラメーター設定をしても、Excel のリボンから [パラメーターの編集] に相当するコマンドを見つけることができず、同じ操作手順を得ることができませんでした。(使用更新チャンネルは 最新機能更新チャンネル バージョン 1611 ビルド 7571.2109)

もちろん、クエリ エディターを開けば、パラメーターを変更でき、その変更したクエリを適用・保存することで、結果のテーブルの更新ができますが、想定しているシナリオの手順ではないと思います。

条件を「引数」として渡す、それは関数化

では、リボンに [パラメーターの編集] コマンドがない間はどうすればいいか。

クエリに引数で「条件として使う値」を渡せば解決できます。事実、パラメーター管理 (Query Parameters) 実装の前は、引数と関数の組み合わせで対応していたんですよね。

サンプルとして、条件の設定は「入力規則」を設定したセルにしました。といっても、見出しとデータ部分が1行で構成したテーブルとします。

大量データのテーブルから、絞り込み条件を付けたクエリを作成します。この場合の条件は、テーブルの列のフィルター オプションで、まずは明示的に A や B を指定してます。
次に詳細エディターを使って、let の直前に、引数 param1 を使う宣言をします。

(param1 as text) =>
let
 ・・・・・
in

そして、この引数名 param1 を使って、先ほど明示的に指定したステップの条件の値(入力規則で指定し、条件として選択している A や B や C)を入れ替えます。
以下の例だと、ステップは「フィルターされた行 =」であり、絞り込み条件の列として使用している [区分A] に定数として指定されている "A" や "B" などを param1 に置換えます。



この追加・修正を行い、詳細エディターを閉じると以下のダイアログが表示されます。


クエリ ウィンドウ(昔はナビゲーター ウィンドウと呼んでいました)の [>] をクリックしてウィンドウを展開すると、データを絞り込むために作成したクエリーの種類は「関数」になっていることがわかります。(Table01 クエリの前のアイコンが [fx] になっています)


すでにこのクエリは「関数」になっています。この関数クエリに引数として条件の値を渡せばいいのです。

このクエリ ウィンドウは [閉じて読み込む] ことによって、ワークシートには何もロードされない [接続専用] のクエリがブックに保存されます。(パラメーターの入力ボックスに絞り込み条件を指定すれば、その条件で絞り込んだテーブルがワークシートにロードされます)

この関数クエリを使うクエリの書き方は色々な方法がありますが、条件指定の1行データ入力規則のテーブル(列名は[条件]、データは1行)から作るクエリ作成手順を紹介したいと思います。

(1) 条件指定の1行データテーブル内にアクティブカーソルを移動して、[取得と変換] の [テーブルから] を選んで、アクティブカーソルがあるテーブルからクエリの作成を行うクエリ エディターを起動します。
クエリ ウィンドウを展開すると、直前に作成した関数クエリと、いま編集しているクエリの2つが表示されます。(以下のサンプルでは Table01 と pTable1)


(2) [列の追加]タブの [全般] - [カスタム関数の呼び出し] をクリックします。これでカスタム関数を使った列の追加をするためのダイアログ ウィンドウが表示されます。


関数クエリのドロップダウン リストで直前に作成した関数クエリを選択し、引数の param1 には、[条件](これは、1行データテーブルの「列名」として指定した文字です)を指定して、[OK] をクリックします。


関数クエリを使った新しい列 [Table01] が追加されました。


(3) 新しく追加された Table01 の結果が欲しいので、[条件] 列を削除し、[Table01] の「Table」を展開ボタンを使って展開します。元の列名は使用しないのでプレフィックスのチェックを外し、[OK] をクリックします。


この例では列の順序が元のテーブルとは変わってしまいましたが、[区分A] の値で絞り込まれたテーブルのプレビューが表示されます。


 [閉じて読み込む] でクエリの結果をワークシートにロードします。


(4) 条件を変えて、クエリを実行して、テーブルの更新をします。
まず、条件設定のテーブルで他の値を選びます。サンプルでは "D" を選びました。


(5) 次に関数クエリの結果でワークシートにロードされたテーブル上で、右クリックメニューから [更新] をクリックすると、テーブルが指定した条件で絞り込まれたものに更新されます。


いかがでしょう。たぶん、このようなシナリオを想定しているのではないでしょうか。

まとめ

パラメーター(Query Parameters)を使って、ダイナミックに変数、条件を変え、クエリ―結果も変えることができます。
クエリを関数にして、関数の引数を動的に変更することで、パラメーターの利用と同じことが可能です。

ただ、もしメモリー上に余裕があれば、データセットに対してフィルターをかける「取得と変換」や「Power Query」の処理は、データ分析用のデータ準備として最低限にしておいていいと思います。
ある条件で絞り込んだ、生の「テーブル(表)」がワークシート上で必要、というケースは、データ件数が多くなればなるほど非現実的ですよね。(印刷のため・・・は知っています。その昔、連続帳票で何千件のレコードを印刷、、、を経験したことがありますが(笑)。)

どうしても Excel の発想から、テーブルや表に対してオートフィルターで条件を指定して絞り込みを行い、そこから何かしらの処理を行う、という手順を考えてしまいます。
もちろんその手順に問題はないのですが、フィルターをかけて計算をする、という「一括りの処理」は、分析フェーズの DAX の FILTER関数などを使い、数式内で行うのが柔軟な利用方法だと感じています。

最大100万行のワークシートをデータセットの前提としていた旧来の Excel 利用の考え方とは別に、これからは、SSAS(SQL Server Analysis Services) のインメモリ表形式モデルの「データ モデル」を Excel に実装した Power BI 系のモダン Excel では、データ モデルにできるだけ「必要なデータ」を「必要な形に変換」して「ロード」する(Power Query - 取得と変換 - ETL機能としての処理)のが基本だと感じています。そのため SQL Server 2012 以降の xVelocity の最適化の圧縮技術を惜しみなく適用しているような気がしています。

(独り言・・・でも、そのモダンな使い方をすると Power BI Desktop をすぐに使えるよう(それで十分)になるんですよね・・・)
Powered by Blogger.

自己紹介

自分の写真
1989年新卒で日本IBMに入社しダウンサイジング担当としてホストコンピュータと繋げるオフコン、UNIX、PCサーバーのプロジェクトを担当。1997年 MSKK(現日本マイクロソフト)入社、NT4出荷に伴い企業向けサポート部門のビジネスマネージャーとして Excel 使いとなり、2002年 にMSMVPなどをサポートするユーザーコミュ二ティ部門を設立、部門をリード。2006年にMSKK退職後、企業向けのITトレーニング会社・団体に携わり、2014年頃よりPowerBI勉強会主催メンバーの一人として参画、そのコミュニティ活動で MSMVP for Data Platform PowerBI 2017受賞。https://mvp.microsoft.com/ja-jp/PublicProfile/5002635 同年にMVP Awardを返上し、アマゾン ウェブ サービス ジャパンに入社、コミュニティプログラム担当として現在に至る。