Quantcast
Channel: モダン Excel を業務で使うブログ (旧Road to Cloud Office)
Viewing all 82 articles
Browse latest View live

[ピボットテーブル / リレーションシップ] 元データにない項目をピボットテーブルで表示させたい

$
0
0
以下のようなケースではどうすればいいでしょうか?という質問を Office TANAKA セミナーでいただきました。
ものすごく簡略化したケースで検討しますが、たとえば、アンケート結果の集計のようなもので、評価項目はA, B, C, D, Eまであるんだけど、Eを付けた人はいない、というデータがあったとします。

こんな感じのデータを想定します。


このテーブルからピボットテーブルを作ると以下のようになります。


元データのテーブルには評価で「E」というデータはありません。この元データからわかることは、AからDまでは評価のデータとして存在するが、Eもしくはそれ以降のデータがあるかどうかは判断が付きませんから、当然といえば当然です。

とはいえ、操作している側としては、Eまで評価があり、それを含めて以下のようなピボットテーブルが欲しい、と考えるのは当然ですよね。


出力用で、A~Eをあらかじめ用意し、GETPIVOTDATA関数とIFERROR関数を使って抜き出し、ゼロの対応が可能です。もちろん、簡略化しているので、この程度のサンプルならピボットを使うまでのことはなく、COUNTIFで十分だろう、というのはご容赦ください(笑)。

あくまで、ピボットテーブルの機能で対応しようとすると、評価の行ラベルが AからEまであることをピボットテーブルに伝えなければなりません。

実データを元にしてラベルを作る(=重複しないデータを作ってラベルを作っているんです)のではなく、たとえて言うなら、入力規則の元データとなるリストを元にラベルを作り、そのリストの項目からそれぞれの項目がいくつ選択されたのかを集計したい、といえます。

ということで、入力規則のリストに相当する評価テーブルのようなものを用意します。


この評価テーブルのAからEは、アンケート結果テーブルのAからEとの間でリレーションシップを組むことができます。アンケート結果テーブルの A とは「とても良い」ですよ、ということです。ワークシート関数では VLOOKUP関数を使って、「とても良い」や「良い」を参照しますよね。

このリレーションシップ、Excel 2013以降の標準機能です。
もっとも簡単な方法は、ピボットテーブル作成時に「複数のテーブルを使う」オプションを指定し、リレーションシップを自動検出させる方法です。シンプルなテーブルであれば、これで十分です。

アンケート結果のテーブルにアクティブセルを置いて、ピボットテーブルを作成します。その時、[複数のテーブルを分析する] の利用のオプションである [このデータをデータモデルに追加する] をオンにします。


フィールド リスト ウィンドウで、すべてのテーブルを表示するため [すべて] タブを選択し、AからEの評価を含む [評価テーブル] の [評価] を行ラベルとしてドロップします。


これで、AからEの行ラベルが表示された空のピボットテーブルが作成されます。


次に、アンケート結果の実データがある [アンケート結果] テーブルから個数を数えるために [名前]を[値エリア]にドロップします。すると、ウィンドウ上部にリレーションシップの自動検出ボタンが表示されます。
今回は評価 - 評価 でシンプルな例なので、自動検出を使います。もちろん、[作成] で手動で設定してもかまいません。


問題がなければ、以下のようなダイアログが表示されます。


ところが、この状態だと、あの空だったピボットテーブルは、期待した E の行が消えたものになります。


ここで、慌てず、ピボットテーブルのオプションの確認です。
少なくとも、データが入る前は、[E] が表示されていました。こういう場合は「データの無いアイテム(行・列)に関連するオプション」があるんじゃないか、とあたりをつけて探します。

実はこれに関連するオプション、普通に Excel のワークシートのデータを扱っている限りだと、使える状況になったことを見た人は少ないと思います。


これは、ピボットテーブルをやっていると良く目にする「OLAPデータ ソース」が元データだった場合に有効になるオプションでした。

オンライン分析処理の概要
https://support.office.com/ja-jp/article/15d2cdde-f70b-4277-b009-ed732b75fdd6

Excelのデータ モデル オブジェクトは、OLAPデータ ソースのキューブファイルと同じ振る舞いをするようです。事実、データ モデルを接続のプロパティでみたのが以下です。


ということで、今まで使えなかった、この「データのないアイテムを行・列に表示する」をオンにします。



すると、以下のようになります。


Eが表示されました。
しかし、空欄です。できれば 0 を表示したいところです。
これもピボットテーブルのオプション [空白セルに表示する値] で 0 を指定できます。


これらの設定をすると、ピボットテーブルが以下のようになります。


ピボットテーブルのような「機能」は、どんなものがオプションにあるか知らないと実現できないことが多いです。その意味では「機能」も習得するのが簡単ではありませんよね。


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

$
0
0
私もよく参考にする日本マイクロソフトの「Data Platform Tech Sales Team Blog」ですが、最近の投稿で「Excelマクロから卒業?」というタイトルのブログがありました。

私も以前に紹介したことのある、上記のブログのポイントである「ピボットの解除」などは、たしかにこれまで VBA で行うことになる難しいお題でした。これがクリックだけでできるようになるのは、「これからは Power Queryか?」とか思いますよね。

特にブックやワークシートを扱う系の処理では、これまで VBA の独壇場だったエリアに Power Query の適用が可能になっているので、ますます VBA卒業?とか言われそうです(笑)。(まぁ、卒業の前に入学してから・・・みたいな話もあるのだけど)

今回はブックにある複数のワークシートを扱う(まとめる)方法をご紹介したいと思います。
2つのケースを説明しますが、いずれもデータを含む表は「テーブル」になっているものとします。もちろん、Power Query ではテーブルになっていない「セル範囲」の表も扱うことができますが、その場合必要な列や行を指定して、データだけにするステップが追加する必要があります。

テーブルにしていれば、データだけを絞り込むステップは必要ありません。

ワークシートの数も名前もわかっている場合

考え方として、各ワークシートにあるテーブルから必要なデータを取り出すクエリを作成し、それらを「追加(Append)」します。データベースの世界や Access の世界では、この「追加」を「ユニオン(Union)」と呼びます。追加やユニオンは、基本的には同じ構造(列名を含む)のテーブルをつなげるイメージです。

4つの支店や部門みたいなグループがあって、そのデータをワークシート毎に分けている、といったサンプルです。札幌、東京、大阪、福岡などのワークシートがある、という感じですね。


それぞれのワークシートに「日付」、「番号」、「数値」のデータがあって、札幌、東京、大阪、福岡からデータを抜き出す、みたいな感じですよね。(最初から、地域みたいな札幌~福岡を入れる列をいれて1つのテーブルに・・・というのはわかります。が、ここではシンプルなサンプルを使いたいので、あしからず。)

名前がわかっている(=固定されている)ので、それぞれのワークシートから必要なデータ(もしくは全件)を条件を付けないで、全件取り込むクエリを作ります。これらから、4つのテーブルを追加(ユニオン)するクエリを作ってみます。実務では必要な「列」だけにしたり、条件を付けて行の絞り込みをすることになるでしょうね。

また、この例では、絞り込み条件なしで、各ワークシートにあるテーブルを全件読み取るクエリを「接続のみ」で作成します。元データと同じテーブルのワークシートを追加しても仕方ないですからね。さらに、どのシートから読み込んだかをわかるように新たに列を追加して、ワークシート名を追加します。


今は複数のクエリの追加(Append)は簡単になりました。以前は、2つしか追加できなかったので、2つを追加してから、その追加クエリにクエリを追加して・・・を繰り返したのですが、今は、3つ以上のクエリを追加するを選ぶと、一気に複数のクエリをAppendすることができます。


Append1というクエリが、4つのテーブルのクエリを追加=Unionしたクエリです。
ワークシートにクエリ結果を全く展開していません。このクエリの使い方は、ピボットテーブルのデータソースにして、欲しい形でピボットテーブル レポートを作成することになります。

ここで、Excel のピボットテーブルの機能としての知識が必要になります。

ピボットテーブルの作成は「挿入」タブの「テーブル」グループにある「ピボットテーブル」から行いますが、作成のダイアログで [外部データ ソースを使用] を選び、[接続の選択] で「Append1」の接続(クエリ)を選びます。この指定で、作成するピボットテーブルの元データに作成したクエリを指定することが可能になります。


はい、これ、複数のテーブルからピボットテーブル レポートを作ることになりますが、データ モデルを使っていません。よって、データ モデルを使ったピボットテーブルの「制限」がありません。
使うかどうかは別として、「集計フィールド」と「集計アイテム」が使えます。


でも、正直なところ、今から Power Query + ピボットテーブルで集計フィールドと集計アイテムを覚える必要はないと思います。集計フィールドは Power Queryの追加の列そのものですし、Power Query とデータ モデルもしくは Power Pivot でメジャーを使うのが主流になりそうです。

このサンプルは、1回きりだと意味がありません。それぞれのテーブル データが更新される、追加されるなど、元データに変更がある場合、一度このクエリとピボットテーブルを作れば、クエリ+ピボットテーブル更新で、最新データにすることができます。

そう考えると、このケースは「別ブック」である場合のほうが、より実務的ですよね。

次は、別ブックの場合の手順を紹介したいと思います。このとき、ワークシートの数は名前を知らなくても、取り込むことができます。となると、なんかVBAっぽいでしょ(笑).

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

$
0
0
前の投稿で、複数のワークシートをまとめる、というお題を取り上げましたが、これ、「今、Excel で開いているブックにある、複数のワークシートにあるテーブルをまとめる」という処理でした。

Excel でデータを扱うのなら、Excel でブックを開くのが鉄則

ただ、この手の処理は、同じブックで処理するよりも、元データと、加工・処理するブックは「違う」パターンが多いです。元データのブックは、別の部門だったり担当者が準備したり、更新したりしていて、そこから加工するのは自分、みたいな感じです。

Excel の処理として、扱うことのできるブックは「Excelで開いている」ことが鉄則です。

そのため、基本的には Excel でデータを扱いたいのであれば、まずは Excel でブックを開く、という処理が「必須」でした。 Excel で一度開けば、Excel という Application を頂点とした、「ブック - シート - セル」という階層構造で処理することができるからです。

VBAでも同じです。ただし、裏技的にブックを開かずにデータを取り出すことが技術的には可能でしたが、広くお勧めできるものではありませんでした。

[VBA] ブックを開かないで読む (Office TANAKA)
http://officetanaka.net/excel/vba/tips/tips28.htm

Power Query でブックを開かずにデータを参照する

という前置きは置いておいて、Excel でブックを開かずに、別ブックから、そこに含まれている各ワークシートのテーブルを一気に取り込んでしまう処理は、アニメーションGIFで一気に紹介できるくらい「簡単」なんです。
 前回は、既に開いているブックのシートにあるテーブルから、それぞれクエリを作成しましたが、今回は、ブックをExcelで開くことなく、指定するだけで、そこにあるテーブルを「テーブル」という条件で絞り込み、リスト化して、一気に展開する、という流れです。


(1) ブックを選んで、テーブル選ばす

[新しいクエリ]  - [ファイルから] - [ブックから] で、Excel ブックを指定できます。このとき、ブックに複数のワークシートがあれば、ナビゲーターウィンドウにそれぞれが表示されます。テーブルも同様です。


通常はここでワークシートやテーブルを選ぶ、または、[複数のアイテムの選択] オプションをチェックして、複数のワークシートやテーブルを選びます。

複数のワークシートやテーブルを選んだ場合は、その数ぶんの「クエリ」を自動的に作成します。それぞれのクエリが作成された後の、たとえば追加(ユニオン)の処理は、前の回で紹介した手順と同じです。


このテーブルやワークシートのオブジェクトを「選択する」条件を含めてクエリ化したいのです。
もう一度、ナビゲーターウィンドウをみると「フォルダー」のようなアイコンがあります。実は、これは Excel のブックそのものを表しているんです。


このフォルダの形をした「ブックアイコン」を選択して、[編集] ボタンを押すと、ブック内のオブジェクトとその属性がテーブル形式で編集可能になります。


ここで、オートフィルターの要領で、必要なオブジェクトの絞り込みが可能になります。

アニメーションGIFでは種類(Kind)でTableを指定して、テーブルオブジェクトだけに絞り込んでいます。

もちろん、名前で「~から始まる」や「~を含む}で絞り込みをかけることも可能です。

そして、このブックだけしか選ばない方法の最大のポイントは、作成するクエリはたった1つしかない、ということです。よって、テーブルが何個あろうが、クエリは1つであり、以下で紹介するように、複数のテーブルを追加するのは、たった1回ボタンを押すだけでいいのです。

(2) 追加(Append = Union)は「同じ形式」であることだけ気を付け、展開する

絞り込んだ後、テーブルの中のデータを取りだす(展開する)のは、ボタン1つを押すだけでOKです。

ただし、展開する前に不要な列を削除します。不要な列を削除、というよりは、「必要な列だけを残す」という作業が本質になります。

アニメーションGIFでは、展開する [Data] 列と、元のデータがどこかわかる [Name] 列を残して、他の列を削除しました。

[Data] 列の先頭行にある展開・集計するボタンで、展開します。




(3) 別のシートが増えても対応可能なクエリ

このクエリはクエリ内の適用済みステップで、ワークシートやテーブルを明示的に指定していません。 「指定したブックにある、テーブルオブジェクトをすべて集めて展開する」というクエリになっているからです。

元データのブックが更新されたら、加工用に用意したクエリを更新することで、最新のデータを取り込みます。もちろん、名前の知らない新しいワークシートの新しいテーブルが追加されても、クエリの編集なしにデータを取り込むことができます。

(4) 列順序は関係なく、列名が重要

テーブルオブジェクト(ListObject)は「構造化参照」されますが、このクエリにおいても構造化参照されています。列名を使って、それぞれのテーブルの列の追加を行っているのです。
そのため、列の順序、順番は関係なく、同じ「列名」を持つオブジェクトが「追加」されます。

[日付] [番号] [数値] という列順序のテーブルと、[数値] [日付] [番号] というテーブルは、問題なく追加可能だ、ということになります。

業務のほとんどは、まとめるべきワークシートの名前が決まっていることが多いですが、日付や期間、時期のようなワークシート名だと、ブックを開くたびにワークシートの数と、新たなワークシートが追加されている、というケースも少なくありません。
VBAを使えば解決していましたが、逆にいえば VBA を使わなくても、Power Query / 取得と変換の機能でここまでできることは、知っていて損はないと思います。

[Power BI Desktop] 3桁カンマをレポートのビジュアルでつけたい

$
0
0
セルの書式設定がある Excel からすると「なにそれ?」なタイトルですが、Power BI サービスで分析結果のデータを共有するために、レポート、ダッシュボードの準備で Power BI Desktop を使っていると、早い段階で「???」と、はまるネタです。数値データに3桁カンマをつけたい、です。

ちなみに、Excel で数値データに3桁カンマを付けるのは、当然リボンのコマンドでもできますが、ショートカットキーは、Ctrl+Shift+1 (つまり、Ctrl+!)です。
さらに、ちなみに(笑)、この Ctrl+Shift+1はトグルではないので、3桁カンマの解除はこのショートカットを再度押してもできません。標準の書式を設定するショートカットがあり、それが Ctrl+Shift+チルダ(~)です。チルダは、ひらがなの「へ」ですよ。標準に戻すこのショートカットは「知っていれば」意外に使う場面が多いと思います。

ExcelユーザーにとってのPower BI Desktopは「ピボットテーブル レポート & グラフ」

私はここに行き着くまで結構時間がかかりました(笑)。
というか、Power BI Desktop のレポートに、もっとも近いのは Excel の「Power View」なんですが、あまりに知名度低いし、今となっては「黒歴史」的に、無かったことにしたいような扱いの機能なので、あえて、ピボットテーブル レポートとピボット グラフ、としました・・・。技術的に Silverlight と HTML5 に翻弄されちゃいました、という感じでしょうか。

[Microsoft] Excel 2013 で Power View シートを作成する

Power View を無かったことにしたいような扱いの話はこちらで紹介してます。

[Road2CloudOffice] Power BI と Excel

さて、Power BI Desktop はもちろん、Excel のピボットテーブル レポートもそうなんですが、最終的なレポートの形が、おぼろげながらも「ぼんやり」とないと、何のデータをどこから手を付けていいかわからなくなります。

ただ、そんな中でも、Power BI Desktop で、取り込んだテーブルの列の「合計」や「個数」はビジュアル(視覚化)の「カード」を使えば、すぐに「レポート」で表示することができます。このあたりの操作性や動きはピボットテーブルに近く、数値のみの列であれば合計が表示され、数値以外の数値があれば個数が表示されます。


ピボットテーブルの「フィールドリスト」のようなウィンドウから数値の列(フィールド)を選べば、自動的に「合計」が表示されます。縦棒グラフのビジュアルが使われるので、カードのビジュアルを選ぶと、もし桁が多いと以下のように表示されます。


これは、ビジュアル(視覚化)の書式-データラベル-表示単位が「自動」になっているためで、これを「なし」に変更します。感覚的にはここに「桁区切りを使用する」がありそうなのですが、ありません。


そして、この操作手順の状態で、リボンの「モデリング」の書式設定に「桁区切り記号」があるのですが、グレーアウトして選択することができません。


このカード ビジュアルの数値に3桁カンマをつけたいのです。が、レポートでカードのビジュアルを選んだ状態だけでは、桁区切り記号のコマンドはグレーアウトしている・・・

最初のころ、これで悩みました。

そのころの対応は、いったんデータに戻って、その列(フィールド)に対して「桁区切り記号」をつけていました。データ側の列に桁区切り記号をつけると、レポートのビジュアルの数値も桁区切り記号がつきます。




ただ、この方法、独自にメジャーを作ったときに、対応する列はなく、関連する列をすべてに桁区切り記号をつけても、3桁カンマがつかないのです。


書式設定はビジュアルではなく、フィールドを選択して行う

つまり、データに戻ってフィールドに書式設定はあまり良いやり方ではななかったわけです。
レポートのビジュアルに表示されている数値に3桁カンマをつける=レポートで「モデリング」タブの「書式設定」のグレーアウトを外すのは、表示形式を変えたいビジュアルを選択するのではなく、右端にあるフィールドリストのフィールドを選択すると、書式設定可能になるのです。


対象となるビジュアルは選択する必要はなく、作成したメジャーはデータにはありませんが、フィールドリストに表示されるので、そのメジャーを選択すると、リボンで書式設定が可能になります。

わかってしまえば、なんともない操作なのですが、結構長い間適切な操作をしていなかったので、ご紹介しました。

Power BI 勉強会 @ 品川マイクロソフト 登壇します

$
0
0
登壇します!と、思ったら、すでに満席でした・・・

http://connpass.com/event/38446/

Excelのユーザーのための、とうたっていますが、「取得と変換」の話になります。
逆説的なお題ですけど、以下のように思うんですよね。

  • CSVファイルの取り込みで「取得と変換」使わない理由がわからない 
  • 複数のワークシートからデータまとめる仕事なのに「取得と変換」を使わない理由がわからない
  • 複数のブックからデータをまとめるのに「取得と変換」を使わない理由がわからない
  • その、ピボットテーブルの表を活用するのに、「取得と変換」を使わない理由がわからない
  • VLOOKUPを使った数式を1万行とかのセルにコピーして「遅い」とかいうのはきつい・・・
「取得と変換」を Power Query に置き換えてもらっても同じですけどね。

データ分析結果を共有するなら、Power BI Desktop & Power BI Service です。ここで Excel にこだわる必然はないですよ。Power BI Publisher for Excel はありますが、そのダッシュボード作ることができるスキルがあれば、Power BI Desktop でレポート作っちゃった方が幸せになれると思います。

Excel 中心の作業や業務であれば、Power Query = 取得と変換 は今後必須になるでしょう、というか、いまどき CSV ファイルのインポートでテキスト ファイル ウィザードを使い続けるのはいかがなものか・・・です。取り込む時点で、データの絞り込みやら、細かくできないんですから。
そこから VBA もありですが、その前に取得と変換やってみましょうよ、と思いますね。

リレーションシップも取得と変換によるクエリがベースになります。Power Pivot は使わなくても、ほぼ同様のことを取得と変換でできます。今となっては Power Pivot の必要を感じません。
DAXをやってメジャー作るなら必要か、と思っていたら、Excel の実装はすごくて、データモデルとして登録すれば、Power Pivot を使わなくても、データモデルのピボットテーブルで、メジャーを DAX で作れるんだから、すごいよね。


みたいな話をしたいのですが、いかんせん50分くらいしかないので、絞り込まなきゃいけません。
少しでも参考になる情報を共有できれば!と思っています。

[Power Query / 取得と変換] FIND と Text.PositionOf、そして Text.Middle

$
0
0
セルA1 に "AB-345"の文字列がある場合、"-"(ハイフン)の位置を調べるワークシート関数は、

=FIND("-", A1)

で、3 を返してくれます。ちなみに、もし、ハイフンが「無かったら」#VALUE エラーになるので、IFERROR を組み合わせますよね。もしなかったら、-1 を返す、という数式が以下です。

=IFERROR(FIND("-",A1),-1)

同じことを Power Query Formula Language (M言語)でやろうとすると、以下になります。

Text.PositionOf([文字列],"-")

この関数は 2 を返します。「0から始まる!」のパターンです。もし、ハイフンがなかったら、この関数は -1 を返してくれます。

ちなみに、ワークシート関数の FIND は大文字・小文字は区別されますが、SEARCH は区別されません。 PositionOf は FIND 同様に区別します。

おおよそ、文字の位置がわかったら、そこから前の部分を抜き出すとか、そこから後ろを抜き出す、といった使い方をします。

AB-345 からハイフンの前にある"AB"を抜き出すには LEFT 関数を、後ろにある 345 を抜き出すなら MID 関数を使うことになります。

エラー処理をしないワークシート関数を使った単純な数式が以下です。A1セルに"AB-345"が入力され、A1を参照し、ハイフンの前と後ろを抜き出す例です。

=LEFT(A1,FIND("-",A1)-1)

=MID(A1,FIND("-",A1)+1,LEN(A1))


同じことを Power Query のクエリ エディターでやると以下のような数式になります。

Text.Start([文字列],Text.PositionOf([文字列],"-"))

Text.Middle([文字列],Text.PositionOf([文字列],"-")+1)

ワークシート関数の MID と違って、ハイフンの後ろの「長さ」を指定する必要がないのはラクですね。



[ピボットテーブル] 日付 時刻 の自動グループ化を無効にする

$
0
0
過去に何度か取り上げているこの話題ですが、いつの間にか Excel 2016 のオプションで、この日付/時刻列の自動グループ化のオフ/オンの設定が可能になっていました。


以前は、グループ化された直後に Ctrl+Z で解除をしていました。

https://road2cloudoffice.blogspot.jp/2016/04/excel-2016.html

または、レジストリでオフにする方法が紹介されていました。

ピボットテーブルで時間グループ化をオフにする

Excel 以外のデータソースに接続して、データモデル経由でピボットテーブルを利用する場合は必要な機能ですが、ワークシートだけの利用だと、ちょっと使いづらく、やはりコンテキストメニューからのグループ化のほうが使いやすいんですよね。

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(1)

$
0
0
Power BI 関連の話をしていると、たまに「良いサンプルデータがない」ということを聞きます。しかし、世の中には、サンプルとして使える「データ」が「実は」公開されています。
データ分析の素材として、すぐに使える形式のものが少ないのが玉にキズですが、それを補う ETL 機能を持っているのが、Power BI Desktop や Excel の取得と変換です。(ただ、この点は他の会社の BI ツールも同様です)

日本マイクロソフトの Data Platform Tech Sales Blog さんの「Power BI Desktop を使って訪日外国人 (インバウンド) 統計データを可視化する」で紹介されていた、日本政府観光局(JNTO)さんが公開されているデータが、とても興味深いのと、Power BI Desktop で十分に利用できるサンプルなので、それを使って何ができるか、をご紹介したいと思います。


JNTOさんは統計情報として「訪日外客統計」を Web サイトで公開しています。

訪日外客統計の集計・発表

このリンク先のページには、PDFのレポートで、毎月、どの国から、何人訪日しているか、公開されています。
PDFだと、今の Power Query / Power BI Desktop / Excel でも取り込みが難しいのですが、レポートではなく「統計データ」が、Excel ブックとして公開されています。

http://www.jnto.go.jp/jpn/statistics/visitor_trends/index.html

このページで公開されている「国籍/月別 訪日外客数 (2003年~2016年)(Excel)」がとても興味深いデータの集まりで、Power BI などで利用しやすい形式になっています。

http://www.jnto.go.jp/jpn/statistics/since2003_tourists.xls

なんといっても(xlsxではないのは置いといて)、Excel ブックなので、ローカル PC のディスクにダウンロードしないで、直接 Power BI Desktop や Excel から参照できます。

具体的な手順や設定はもちろん大切ですが、まずは、このデータを使ってどんなことを探ってみたくなるのか、考えてみました。

そんなに難しく考えないでいいんです。難しく考えないで、「このデータは出せる?」という思いつきを「簡単にできるかどうか」検討することが、トレーニングとして重要であり、そのデータから「あれは?」「これは?」を素早く、数多く取り出すことができれば、データへの考察が深まるでしょう。(取り出すことに時間がかかるのであれば、それはやるべきではないのかもしれません。しかし、重要なのは、それはそのコストが高いのではなく、その時点で取り出すためのスキルが無い、ということど同意だと思います。もちろん、そのスキルを得るために費やした時間とコストは存在しますが。)

まず思いつくのは公表されているデータの中で「最新」はいつで、その最新のデータから訪日外客数が多い国のトップ5とその数値が欲しい、みたいな感じではないでしょうか。

URLの記述が、/since2003_tourists.xls なので、2003年以降のデータがどんどん追加されていっているようです。実際にブックをダウンロードしたのが以下です。


2003年から「シート」が追加されていくタイプです。
印刷レポートも兼ねることから、この手のデータはクロス集計(ピボット集計)の形式が主流なのは仕方ありません。今は、Power BI Destop / Excel 取得と変換の「ピボットの解除」があるので、涙目になることはありませんね!

このブックから「最新のデータ」を抜き出す方法を考えます。

(1) VBAは使わない(シートの名前から「年」を判断しない)
(2) すべての国のデータが入っているわけではないが、データが入っている月を最新とする
(3) Power BI Service のダッシュボードやレポートでメンバーと共有し、モバイルで確認できるようにする

つまり、Power BI Desktop や Excel の Power BI アドインとVBAを除いた機能や関数で、最新データの年・月を出してみよう、ということです。もちろん、データソースを目視すると最新データの年月はわかりますが、データソースの更新をするだけで、抜き出す「最新の年月」も「更新される」イメージです。

この「最新データの最新とは何日か?」というのは、レポートを作成する上で必要になるのですが、意外に簡単ではありません。



このような月次データだと、あまり「更新された最新日」に重要性を感じられないかもしれませんが、いずれ題材となるであろう「気象庁 地震データ」などは、いつのデータなのかが非常に重要な要素となります。 このあたりはバランス感覚が必要ですが、データの分析においては「いつなのか」という日付・時刻が大切になることが多々あるので、ぜひ意識してください。

ということで、JNTOの訪日外客数ブックから、Power BI Desktop や Excel へ分析しやすい形でデータを取り込む必要があります。

ポイントは以下です。
  • ブックにあるワークシート名を指定しないで、必要なワークシートをすべて取り込む
    (ワークシートが追加された場合、削除された場合の対応)
  • クロス集計表のピボット列をピボット解除し、テーブル形式に変換する
  • 必要な行だけを取り込む
  • 必要な列だけを取り込む
  • 必要な列を追加し、値を作成する
ブックにある、2003年から2016年までの14枚のワークシート、来年には2017年を含めたワークシートを取り込むようにする設定、よく見るクロス集計表をテーブル形式に変換する方法などは、今後、官公庁によって作成されるデータを利用するには必須の方法になるでしょう。

次回は、具体的なブックの取り込み方、テーブル形式への変換を手順を追って説明することになるでしょう。お楽しみに。

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(2)

$
0
0
前回からの続きになります。

では、JNTOさんが公開している訪日外客数データを元に、インバウントのインサイトを探すジャーニーに出発しましょう(笑)。

まずは、元データですが、xls 形式の Excel ブックで、1枚のワークシートに1年分のデータが登録されています。2013年から2016年14枚のワークシートが格納されています。


http://www.jnto.go.jp/jpn/statistics/since2003_tourists.xls

これを Power BI Destop または Excel の取得と変換の Web からで、このリンクを利用します。Excel ブックじゃないことに注意です。

Power BI Desktop
Excel 取得と変換
Power BI Desktop を例に手順を追ってみていきます。

なお、Power BI Desktop で xls ブックを開こうとすると「エラー」になる場合があります。(たぶん、多くの人はエラーになると思います)
エラーになった場合は以下を参照してください。Access Database Engine のインストールが必要です。
https://powerbi.microsoft.com/ja-jp/documentation/powerbi-desktop-access-database-errors/

通常、複数のワークシートからデータを取り込みたい場合、取り込みたいワークシートをチェックします。
Power BI Desktop のナビゲーターで複数ワークシートを選択
この方法だと、新しくシートが追加された場合は指定しなおさない限り取り込まれません。
また、それぞれをチェックすると、チェックした数のクエリが作成され、その数の分だけ「編集作業」をしなくてはなりません。

実は、Excel の取得と変換(Power Query)では、フォルダーのアイコンを選択して、[編集] をおして、次の設定画面に進むことができます。

ところが、Power BI Desktop (バージョン: 2.40.4554.421 64-bit (2016年10月)) の場合、フォルダーのアイコンを選択すると、[編集] ボタンがグレーになり、押すことができません。

Power BI Desktop [編集] ボタンを押せない
Excel ではできるのに、なぜ Power BI Desktop ではできないのか、と思いましたが、フォルダのアイコン上で右クリックメニューを出すと [編集] がでてきます。このトラップはびっくりしました。

Power BI Desktop の [編集]ボタン
このフォルダ アイコン(=ブック)を編集ボタンで取り込むと、クエリエディタの以下の画面が表示されます。

Power BI Desktop クエリエディタ 複数シート取り込み
それぞれのワークシートの名前の他に、'2005$'Print_Area という項目があります。これは「印刷範囲の指定」をした範囲を表します。テーブルがある場合は「テーブル1」といったテーブル名が表示されます。

業務上は、なるべく表を「テーブル形式」にしておくことで、Excel ブックのワークシートから必要な「データのみ」を取り出すことができます。そのようなときは、このクエリエディタではワークシートを選ばず、テーブルのみを選びます。今回は、テーブルではないので、ワークシートを選びます。

ここでの注意は「必要なものを選択しない」です。ポイントは「不要なものを外す」です。

今回は印刷範囲をはずしたいので、この列のフィルターオプションで「Print_Area を含まない」を設定します。

テキスト フィルター
行のフィルター ダイアログボックスで 「指定の値を含まない」 で 「Print_Area」 を設定します。


[OK] を押すと、クエリエディタでは、ワークシートのみが残った表になります。


ここまでの手順や設定は、Excel の取得と変換もほとんど同じです。
このあと、Data 列を展開することで、すべてのワークシートのデータを 「クエリの追加(Append)」をすることなく、1つにすることができます。

長くなったので、データの展開以降は次回になります。お楽しみに。

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(3)

$
0
0
第2回からの続きになります。

日本政府観光局が公開している訪日外客数のデータを使って、Power BI Desktop や Excel、Power BI Service でインバンドのインサイトを探してみよう、という試みの第3回目です。

前回までの手順で、訪日外客数の14年分のデータを含む xls ブックから、必要なワークシートのみをクエリエディタで選択するところまで紹介しました。

Power BI Desktop で年別ワークシートをすべて選択する

ここまでの手順は Excel の Power Query もしくは「取得と変換」でも、ほとんど同じです。

Excel2016取得と変換で年別のワークシートをすべて選択する
今回は Excel のクエリエディタの画面で、各ワークシートのデータを展開する手順を紹介します。若干の UI の違いはありますが、Excel の Power Query / 取得と変換と、Power BI Desktop の外部データからデータを取得する機能はほとんどが同じであり、かつ同じ操作手順です。

フォルダのアイコンから編集を選び、不要な印刷範囲を取り除いたクエリエディタには [Name] と [Data] の2つの列があります。
Name 列は「ワークシート名」です。 Data 列は [Table] というオブジェクトへのリンクがあり、その [Table] をクリックすると、ワークシートが展開されます。

Table をクリック
クエリエディタで2003ワークシートの中が表示された
[Name] の 2003 の行にある [Data] 列の Table は 2003 ワークシートだけのデータです。他のワークシートの Table を展開していません。

すべてのワークシートの、Table を展開し、14年分のデータを1つのワークシートで持ちたいので、2003 年のデータの展開前に状態を戻します。

[ワンポイントアドバイス]
状態を 2003 ワークシートの Table クリックの展開前に戻したい場合、向かって右側にある作業ウィンドウ [クエリの設定] の [適用したステップ] にリストされているステップを消すことで、前の状態に戻すことができます。各ステップ名の前にある [ X ] でステップの消去が可能です。
[変更された型] と [2003] のステップを削除することで、Table 展開前にもどります。


Data列にある、それぞれの「Table」をクリックすると、1つのワークシートのみを展開しますが、Data列のヘッダーにある[展開ボタン]をクリックすると、すべてのワークシートを展開します。複数のシートを一気に展開するにはこの [展開ボタン] を使います。


テーブル(リスト)形式ではないデータなので、特定の列名はこの時点ではありません。また、元の列名を使うこともないので、[元の列名をプレフィックスとして使用します] のチェックをはずします。

クエリエディタで Data 列の展開ボタンを押し、[元の列名をプレフィックス・・」のチェックをはずす
この操作を可能にするのは、14枚のワークシートすべてのフォーマットが同じである、という条件が必須です。逆に、フォーマットが同じであれば、この展開ボタンによる複数シートの展開がもっとも楽です。

[OK] をクリックすると、Name の列を残して Data 列が複数の新しい列に展開され、2013ワークシートから2016ワークシートの14枚のワークシートの内容が表示されます。

2003ワークシートの後に2004ワークシートのデータが展開されている
 このデータをクエリエディタの機能を使った「整形」していきます。この整形作業が、今回のデータ取り込みの最大のポイントです。

整形作業はおおまかに以下を行います。
  • データとして要らない「行」の削除
  • データとして要らない「列」の削除
  • クロス集計表をテーブル形式に変換(列のピボット解除)
  • データの種類(型)の正しい設定
  • 必要な追加列の設定
  • ワークシートもしくはデータモデルへ保存
これらの操作を簡単に確実に行うために、クエリエディタでは多くの機能が提供されています。

長くなったので、今回はここまでとして、次回は上述の「整形作業」を手順を追って紹介します。
お楽しみに。

Amazon QuickSight - ストーリーボードが面白そう

$
0
0
Amazon が BI ツール市場に参入しましたね。(というか一般公開)

Amazon QuickSightが一般提供開始(日本はプレビュー)
https://aws.amazon.com/jp/blogs/news/amazon-quicksight-now-generally-available-fast-easy-to-use-business-analytics-for-big-data/

去年の10月の Amazon のイベントで Amazon QuickSight が披露されて、いくつかの記事になっていました。

@IT AWSのセルフサービスBI、「Amazon QuickSight」とは何か
http://www.atmarkit.co.jp/ait/articles/1510/15/news033.html

このブログでは Microsoft の Excel と Power BI を扱っていますが、Power BI のエリアでは、Microsoft のみならず、多くの BI サービスを提供するベンダーがしのぎを削っています。

で・・・正直いって、それほど各社に大きな「差」があるわけではないと感じています。

ガートナーさんはお得意のマジック・クオドランドでポジショニングしてますが。
http://it.impressbm.co.jp/articles/-/13288

Magic Quadrant for BI and Analytics Platforms 2016 出典:米Gartner
ローカルPCの世界では「Excel」という巨人がいるので、多くの BI ツールは「クラウドサービス」として差別化をしているように思えます。
クラウドサービスにするメリットは多くあります。なんといっても、レポートやダッシュボードなど、分析結果の「共有」はクラウドならではのメリットを享受することができます。ここは Excel の不得意なところですからね。

Amazon QuickSight は、他の BI ツールとはちょっと違うアプローチをしているように思えました。それは「ストーリーボード」です。

(おおよそ、SPICE で言っている、超高速とか、パラレルとか、インメモリとかは、だいたい同じようなコンセプトとテクノロジーで各社が実装しています)

ストーリーボードが面白いのは「データでストーリーを語る」と言い切っていることです。

Power BI Services でダッシュボードを作って、他のメンバーと共有したとします。もちろん、テキストボックスなどはあるので「ここのポイントは~」などというコメントは入れられますが、あくまで「補助的」なものです。

ダッシュボードの共有の「目的」は、たしかにリアルタイムもしくは定期的に、決められたKPIやデータを時系列や、最大・最小、全体に対する割合などでチェックすることですが、それでもダッシュボードを単純に見るだけで、それを見た人が問題を把握するなんてことは理想にすぎないと思いませんか。

データドリブンなプレゼンテーションができたら・・・なんて思っていたところに、この QuickSight がストーリーボードのコンセプトを持ってきて、ちょっとわくわくしました。

以下のビデオが AWS  QuickSight を紹介している最近のものかなぁ、と思います。(AWS Summit Series 2016 | Chicago) この動画の中でストーリーボードのデモが 35分ころから始まります。いわゆる、全体から特異点を見つけ出してドリルダウンしていく過程です。(ごめんなさい。言えるほど自分がすごいわけではないですが、それほど面白い、わかりやすいデモではありません>< でも、全体を通してみてみる価値はあります。)


1年間のお試し無料枠があるので、すでにAWSアカウントを持っていれば、無料で利用可能です。(日本はプレビュー)

たぶん、PowerBI から見ても無視できない存在になりそうです。

で・・・

今週末に Power BI コミュニティで登壇しますが・・・満席でした><

https://connpass.com/event/43908/

今回は、日本政府観光局さんのデータを使って、ハンズオン的に以下をご紹介したいと考えています。

(1)ブックに存在する複数のワークシートからデータを一気に取得する
(2)クロス集計表を「ピボット解除」を使ってテーブル形式に変換する
(3)なんらかの結果を Power BI Services を使って共有する

(1)、(2)は Excel の取得と変換でも、Power BI Desktop でも操作は一緒です。Excel 2016 や Office365 ProPlus Excel をお持ちの方は Excel で、持っていない方は Power BI Desktop で一緒に操作しましょう!

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(4)

$
0
0
第3回からの続きになります。

日本政府観光局が公開している訪日外客数のデータを使って、Power BI Desktop や Excel、Power BI Service でインバンドのインサイトを探してみよう、という試みの第4回目です。

前回、複数ワークシートを [Data] の 展開ボタンを使って全て展開する、という手順まで紹介しています。



その時「フォーマットが同じであれば有効です」という前提条件を伝えていますが、この「フォーマットが同じ」については、とても重要なので、今回はちょっと寄り道をしてフォーマットの件を説明したいと思います。

今回対象としているデータソースは、日本政府環境局さんが公開している「国籍/月別 訪日外客数(2003年~2016年)(Excel)」というブックです。

このブックをダウンロードして、Excel ブックを開くと年別の「ワークシート」にデータが「クロス集計表」の形式で保存されています。

2016年、2015年、2013年のワークシートは以下のようになっています。

2003年

2015年

2016年
 このワークシートをみても、数字が違ったり、A列にある国が違ったりしています。また、A3セルに記入されている説明・注釈文も、2016/2015と2013で違います。

フォーマットの観点から言うと、これらの違いは問題ありません。フォーマットが同じ、という意味は、参照したいデータの「列」の順番(Excelの場合は A,B,C の列番号)が同じ、ということです

A列に国の名前が「すべてのワークシート」で使われている
B列は1月の数値が「すべてのワークシート」で使われている
D列は2月の数値が「すべてのワークシート」で使われている
F列は3月の数値が「すべてのワークシート」で使われている
・・・・
X列は12月の数値が「すべてのワークシート」で使われている

もし、2016年のシートと他のシートで「列番号」が違うデータの「配置」になっていたら、「すべてのワークシートのフォーマットが同じ」という条件にならないので、展開ボタンを使って一括してワークシートをクエリ エディタに取り込んではいけません。

ワークシートに記入されている行数(=国の数)や、A3の例の注釈、さらに、データの行番号などはシート毎に異なっていても大丈夫です。
例えば、韓国のデータは各シートとも 7 行目から始まっていますが、全部のシートで韓国のデータが7行目から始まらなくても大丈夫です。中国と韓国が入れ替わっていても問題ありません。

もし、あるシートだけ列番号がずれていたら、一括処理から除外して、列番号を合わせる変換を行ってから、取り込まなければなりません。

ただし、テーブルは列番号が違っていても大丈夫です。

Excel のデータはテーブルで保存・再利用する

Excel で表をテーブルに変換すると、構造化参照に代表されるように、セル、行と列の扱い方が変わります。

このブログでもいくつか取り上げています。

テーブルのすすめ 構造化参照
https://road2cloudoffice.blogspot.jp/2014/11/blog-post.html

テーブルのすすめ VLOOKUP関数
https://road2cloudoffice.blogspot.jp/2014/10/vlookup.html

テーブルのすすめ 入力規則
https://road2cloudoffice.blogspot.jp/2014/10/blog-post.html

テーブルとExcel VBA
https://road2cloudoffice.blogspot.jp/2016/02/excel-vba.html

Office TANAKA の VBA セミナー ベーシック他でも、「テーブル(機能)を使わない理由がありません」と紹介しているイチオシ機能ですが、2007年に搭載されてもう少しで10年を迎えるにも関わらず、浸透しているとは言えない状況です。

データの取得と変換機能や Power Queryからみても、データソースが Excel の場合は「テーブル」形式の表になっていると、取り込み際に「ラク」になるんです。

サンプルのデータは Sheet1 にテーブル1、Sheet2にテーブル2を作成しましたが、列の順番や、テーブルの配置場所は変えたものにしました。テーブル1は「名前」、「区分」、「数値」で A1セルから開始、テーブル2は「区分」、「数値」、「名前」の順に変え、B3セルから始まっています。

テーブル1
テーブル2
このテーブルをこれまで紹介してきた同様の操作でクエリ エディターで取り込むと以下のように、テーブルで定義されている列名の「名前」、「区分」、「数値」を認識して、それらを取り込みますよ、という処理をします。

列名を認識しているクエリ エディター
よって、ワークシート上のテーブルの位置が違っていても、テーブルの内の列の順序が違っていても、「名前」の列は「名前」の列で、「区分」の列は「区分」の列で、そして「数値」の列は「数値」の列でまとめることができます。

展開ボタンによるテーブルの追加
列の順序はクエリ エディターで最終形に修正することができます。

いかがでしょう。

ちょっと横道にそれましたが、データの取得と変換、Power Query は何もデータベースサーバーのデータや、クラウドサービスの API 経由のデータ取得のためだけのものではなく、ExcelやCSVのデータを対象とすることができます。その時、Excel で扱っているデータが「テーブル形式」になっていると、あたかも Excel ブックが「データベースのテーブル」のように扱うことができます。

表計算ソフトの柔軟性ゆえに苦労していたことが、テーブルを扱うことで解消されることが本当に多いので、今一度テーブル機能の利用を検討してはいかがでしょう。

Excel BI - Power BI コミュニティ 登壇の報告

$
0
0
日本マイクロソフト株式会社さんで先月行われた Power BI コミュニティ 勉強会の模様が公開されていました。

Microsoft Japan Data Platform Tech Sales Team Blog
2016/11/26 Power BI 勉強会 – 第二回 が開催されました
https://blogs.msdn.microsoft.com/dataplatjp/2016/11/28/20161126-power-bi-community-2nd/

当日の様子(登壇しているのは私です)
Power BIまわりの情報提供はマイクロソフトさんもがんばってやっていらっしゃいますが、最近は Excel の視点からの情報が少なくなりつつあります。

その代り、Power Query が Excel の標準機能になるなど、Power BI と Excel の関係は変化・進化しているのが現状で、私もひとりで追いかけるのが非常に大変なのが実情です。

Power BI コミュニティ勉強会主催の かがたさんや、日本マイクロソフトの土井さん、コミュニティ勉強会に参加してくれた方と情報交換することが、情報の理解、キャッチアップに非常に役立っているのは疑う余地がないのが現状です。

上記の土井さんのブログには登壇者のパワーポイントも公開しているので、時間があれば Excel ユーザーでもぜひチェックしてほしい内容です。

[Power BI Desktop] エクセル複数ブックの取り込みが簡単になりました

$
0
0
データベースサーバーや、クラウドサービスをデータソースにするだけではなく、Power BI Desktop や Excel の取得と変換や Power Query は「Excel のブック」や「Excelのワークシート」をデータソースとして活用するシーンも十分に考えられます。

すでに、あるフォルダーにある複数の Excel ブックを取り込む方法を紹介してきましたが、もっと簡単になりました、というブログ記事が 2016年12月19日の Microsoft Power BI Blog にて公開されました。

Microsoft Power BI Blog - December 19, 2016 by The Power BI Team
Combining Excel Files hosted on a SharePoint folder with Power BI



原文は「SharePoint フォルダーの複数のExcelファイル(ブック)を Power BI で結合する」という内容です。SharePoint フォルダーを例にしていますが、SharePoint でなく、ローカルのフォルダなどでも同様の操作になります。

これまで、Excel.Workbook 関数を手で入力する方法を紹介してきたわけですが、それをせずとも、複数ブックを結合することができるようになりました。まだ、Power BI Desktop (2016/11版) でしか確認できていませんが、そのうち Excel の取得と変換や Power Query でも利用可能になるでしょう。

以下は、SharePoint フォルダーではなく、ローカルのフォルダーで試してみての結果です。

・ フォルダーを指定して [編集] ボタンでクエリ エディターを起動


クエリ エディターでは、フィルダーにあるブックの情報(属性)が表形式で表示されています。ここから、名前や拡張子などを使って「オートフィルター」のフィルターオプションと同様の操作で絞り込みました。

・ [バイナリの結合] ボタンで Binary からオブジェクトを取り出す

これまでは、[Content] 列にある [Binary] の中にあるオブジェクト(シートやテーブル)を取り出すために、カスタム列の追加と Excel.Workbook を使って、ブックの中にあるシートやテーブルを抜き出していましたが、今回の拡張から、[Content] 列のバイナリの結合ボタンを押すと、新しいダイアログウィンドウが表示されるようになりました。

[Content] 列にあるバイナリの結合ボタン
バイナリの結合ウィンドウ
この後の操作はこれまでのものと似ているのですが、ここで例えば「4月」のシートのアイコンを選ぶと、4月シートのみが展開されますが、「サンプル バイナリ パラメーター」のフォルダアイコンを選択して、[OK] を押すと、各ブックの Binary にあるシートやテーブルのオブジェクトが抜き出されます。

Data列が追加され、Binaryの中のTableが抜き出された状態
Data列の展開ボタンをクリックすることで、4月、5月、6月のワークシートのデータを結合し、展開された状態になります。

・ テーブルだと本当に楽です

ただし、テーブルでなく「範囲」だと、不要な行を削除したりする必要があります。もちろん、もとのブックに含まれるデータが「テーブル」であれば、不要な行に対する処理は必要ありません。

現時点では Excel 2016 の Office Insider スロー更新チャンネルの「取得と変換」では、上記の機能は確認できていませんが、近いうちに Excel でも利用可能になるでしょう。

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(5)

$
0
0
第4回からの続きになります。

日本政府観光局が公開している訪日外客数のデータを使って、Power BI Desktop や Excel、Power BI Service でインバンドのインサイトを探してみよう、という試みの第5回目です。

各年の複数ワークシートで構成されている訪日外客数のブックを取り込んだところまできました。
今の状態は、クロス集計表で表現されている「セルの範囲」が複数年、縦に連なっている状況です。第4回で説明したように、個々の列の情報は同じものという大前提があります。


ここから「不要な情報を取り除く」作業をする、または「必要な情報のみを残す」作業をします。
そのために最初はちょっと違和感があるかもしれませんが、この複数年のクロス集計が縦に連なったセル範囲を「テーブル」のように扱います。テーブルのように扱うことで、見出し行を追加し、「オートフィルター」機能が使えるようになります。そのフィルター機能を使って「不要な行」を取り除く、もしくは「必要な行だけを残す」操作をします。

(1) タイトル行のベースになる行を探して、タイトル行にする 


これらの操作は、現実のデータを見て検討するので、必ず以下で設定する内容であったり、順番であったりが正しいわけではないことに注意してください。扱うデータは「ナマモノ」であり、調理方法(加工方法)はさまざまです。その時その素材にあった方法を見つけるしかありません。

重要なのは、その操作が「再利用可能か?」を常に意識したほうが良い、ということです。この「再利用可能か?」は所々で解説したいと思います。

今回扱っている訪日外客のデータで、テーブルに変換したときにタイトル行になって欲しいのは、4月、5月、6月といった月であり、その行にあるべき(表示はされていませんが)国名などになります。

一切並べ替えをしないで取り込んだ直後のデータは以下のようなものです。


この時、最初の行は 2003 年の昔のデータなので、基本このワークシートは「変更されない」と「仮定」します。そうすると、「タイトル行」にしたいデータ行は4行目にあります。

このように「最初の3行はとりあえず使わない、要らない」というのがわかっているのであれば、「上位の行の削除」を使って、上から何行を削除する、という操作が可能です。


クエリ エディターの[ホーム]タブは、データを取り込んだ直後によく使う基礎的な機能/コマンドをまとめています。[行の管理]や[列の削減]のグループにはデータ取り込み直後に良く使う機能があり、その中に [行の削除] の [上位の行の削除] があります。

どの列が選択状態になっていても、ここでの指定は「行全部」となります。上位の行の3行を削除、という指定は、すべての列を含む3行を削除します。
また、今回の訪日外客のデータ展開で、第1列目の[Name]にはテーブル名に相当する 2003 などの年が「必ず」入っているので、列全てが null になる「空白行」は存在しません。そのため、(くどいですが)「今回の訪日外客のデータ」では全ての列が空白になる「空白行の削除」は該当しません。

また、この時点で当然疑問に思いますが、2003年のデータの[5月] や [6月]の行をこれから「先頭行」として使う設定を行いますが、2004年以降のデータの[5月]や[6月]は、データとして残っています。これはどうなるんだ?と思われるでしょう。これは、後ほどの作業で結果的に「消す」作業をします。

上位3行を消すと、 [5月] [伸び率] [4月]・・・のデータを含む行が1行目になるので、この行を [見出し行] として使います。そのまま [ホーム] タブの [変換] グループにある [先頭の行を見出しとして使用] をクリックして、1行目を見出し行(タイトル行)に変換します。


この変換により、重複した列名は許されない、もしくは必ず列名がなければいけませんから、[伸率]、[伸率_1] などの名前の自動変更が行われます。


ここからは、そのデータにあった対応を行っていきます。JNTO の訪日外客のデータの場合は、以下の方法で不要なデータを取り除くことができました。これらの方法や考え方は、他のデータでも十分に適用可能だと思います。

(2) フィルターをつかって不要な行を取り除く


今、この状態は、複数のワークシートを追加(Append)し、2003年のデータの上から3行分を削除し、4行目を見出し行にしたに過ぎません。不要なデータはまだ山のようにあります。以下はスクロールしていくと見つけることができる不要なデータの例です。(行が多いときはスクロールせずに、フィルターオプションから、重複しないデータの確認ができます)

「総数」や「アジア計」、「ヨーロッパ計」といった、小計、合計の行は必要ありません。

小計行もいりませんが、コメント・注釈行もいりません。

2003年の上位3行で消した表のタイトルは当然次の年のデータでは出てきます。これらの行は必要ありません。

もし、必要となるデータの国が決まっているのであれば、[Column2] のオートフィルダーで国の名前を直接指定するのも一つの方法です。以下であれば、Column2 に「中国」、「台湾」、「米国」、「韓国」、「香港」がある「行だけ」を選択して絞り込むことができます。


ただ、実際には国のデータは昔のデータにはなかった国のデータが追加されることも多く、必要な国を指定して、国を固定するより、不要なデータを削除するほうが「再利用性」が高いと言えます。今後どんな国が増えるかわからない、という状況は、「今後どんな製品が増えるかわからない」や、「今後どんな営業所が・・・」「今後どんなお客様が・・・」に通じるものがあると思います。

この場合に使いたいフィルターオプションは「指定の値を含まない」フィルターオプションです。


このテキストフィルター オプションを使えば、新しい国が入ってきても対応可能です。もちろん、「新しい不要な行」が入ってきたら、その対応をするのには変わりません。新しい不要な行と、新しい国のどちらが追加される可能性が高いかを実データから想定する必要はあります。

・漢字の「計」がある国名はない、という前提で「計」の文字を含まないものにする
>アジア計、ヨーロッパ計、アフリカ計、北アメリカ計など、地域の小計が排除される

・漢字の「注」がある国名はない、という前提で「注」の文字を含まないものにする
>注1:、注2の行が排除される。もちろん漢字1文字の「注」に問題がありそうならば、その行に含まれる「本資料」や「表中の」などを指定すると確実になります

・「総数」」を含む行を外す
>「2004年 訪日外客数(総数)」といったデータのタイトルを表す行と「総数」の計算行が排除される

・「出典:」を含む行を外す
>表の下にある「出典:日本政府観光局(JNTO)」を含む行が排除される

・「本表で」を含む行を外す
>「*本表で、通年の・・・」のコメント行が排除される

このような設定を繰り返して、すべての不要な行を削除します。確認はオートフィルターのリストを見るとが一番いいでしょう。


Column2 は「国」または「地域」のデータ列になったので、見出し行の [Column2] をダブルクリックすると編集モードになるので [国名] などに変更します。また、第1列目の [2003] は年々のデータかを表すので [年] に変更しておきます。


これで不要な行の削除が終わりました。
長くなりましたので、次回は、列について操作します。
お楽しみに。

[PR] M言語(Power Query Formula Language)について書いている書籍はコレ!
 

[Power BI] 日本政府環境局 JNTO さんのデータからのインサイト(6)

$
0
0
第5回からの続きになります。

日本政府観光局が公開している訪日外客数のデータを使って、Power BI Desktop や Excel、Power BI Service でインバンドのインサイトを探してみよう、という試みの第6回目です。

前回でフィルーターオプションと同じ操作性を持つ機能を使って不要な行を取り除き、必要な行のみを残しました。今回は「列の操作」を中心にご紹介します。

前回、[Column2] 列の見出し行(タイトル)をダブルクリックして [国名] に変更し、第1列の [Name] を同じく [年] に変更しました。


ところで、その横の列が [5月] になっていることに違和感を感じた人も少なくないはずです。その並びは、[5月] [伸率] [6月] [伸率_1] [7月]・・・と続き、[9月] [伸率_4] [1月] [10月] [伸率_5] [11月] ・・・となりました。

この順序は、1行目を見出し行にする前の ColumnX の [X] が原因です。


後に国名となるカラムの名前は [Column1] で、[5月] のカラム名は [Column10] です。[9月] は [Column18] で、その横の伸率は [Column19]、そして [1月] が [Column2] です。この ColumnX の数値 [X] の順番で並んでしまっているのです。1,2,3,4・・・ではなく、1,10,11,12・・・,2,20,21,22・・・ですね。

1月、2月、3月 ~と並べ替えたくなりますが、今回の場合、最後の処理で 「列のピボット解除」 を行って、[月] の列をつくり、その列のデータとして月を入れるので、途中で1月、2月~のように並べ替える必要はありません。

(1) 必要な列を選択して [他の列の削除]


第1列の [Name] を [年]に、第2列の [Column2] を [国名] に変更したら、次は必要な列を残します。不要な列の削除の方法は2つあって、1つはその通りのまま「不要な列をすべて選択して削除する」です。一方で必要な列は [年] と [国名] と [1月] から [12月] までの [月] の列だけなので、それらをすべて選択して [他の列の削除] を選ぶことで、不要な列の削除が可能です。というより、必要な列のみを明示的に指定して残す、と言ったほうがいいでしょう。

Ctrlキーを押しながら、列名をクリックすると、複数選択が可能になります。選択された状態で、右クリックのコンテキストメニューから [他の列の削除] を選べば、選択している以外の列が削除されます。


[列の削除] を選ぶか、[他の列の削除] を選ぶかは、元のデータがどのように追加・変更される可能性が高いかで変わります。

個人的な経験談からすると、Power Query を使い始めた当初は削除する列を選択して [列の削除] を行っていました。ところが、新しいデータに不要な列がたまたま追加されたため、削除する列を明示的に指定しているこの方法では、追加された不要列は削除されずエラーになりました。
必要な列が「変化する」ものではないので、この場合は、必要な列をすべて「指定」して、その他の列を削除する指定方法が最も「再利用に適した」方法でした。

訪日外客数のデータで、必要な列だけを残すと以下のようになります。


(2) 列のピボットを解除する


この [列のピボット解除] の考え方が、もしかしたら「難しい」と感じている人もいるかもしれません。
というのも、非常に残念ながら Excel 入門的なトレーニングで、最初の勉強用の Excel の表として「クロス集計表=ピボットテーブル」を入力するための表として紹介する教材が多いからです。


このような縦にも横にもデータの条件を入れて、そのクロスした位置(セル)にすべての条件を満たす数値を入れる表を「クロス集計表」といいます。たとえば、C2のセルは、「支店が東京で、担当が山田で、4月の数値という条件を満たす合計は 38」という意味です。

人間が見るにはとても見やすい表なので、まずは、空のクロス集計表を作り、罫線をきれいに引いて(罫線の練習)、小計には SUM 関数をつかったり、SUBTOTAL 関数を紹介したり(関数の練習)、見出しセルでは書式の変更でフォントや位置を変えたり、といったことをする教材です。

ただし、これは人間が見やすい「最終形の表」であり、いわゆる「ピポットテーブル」としての「結果の表」です。本来この結果の表を作成するための「元の表」は以下のような、リスト形式またはテーブル形式のようなデータでなければいけません。


 クロス集計表は「結果の表」であり、人間が見やすいように「修飾された表」です。クロス集計表に新しい支店や、新しい担当者、月のデータを追加するのは容易ではありません。それを苦労して修正しているケースを見ることもありますが、追加するデータはリスト・テーブル形式の「追加行」として追加し、このテーブルを元にしてクロス集計表を作る手順が、最も簡単で、最も正確で、最も間違いがない方法です。

もっと言えば、実際のデータはさらに細分化されている場合がほとんどです。
支店が東京で、担当が山田で、月は4月で、製品はAの売上が10、製品のBの売上が8、製品のCの売上が15、製品Dの売上が15で、合計が 38 といった感じです。SUMIFSの関数の題材としては面白いと思いますが、データ分析をするための「元の表」はクロス集計表ではなく、リスト・テーブル形式の表でなければなりません。

今回の題材である日本政府環境局さんのデータは、この「クロス集計表」です。残念ながら、このクロス集計表のままでは、さらなるデータ分析が難しいのです。

そして、このクロス集計表は「人間にとって見やすい」表であり、かつ「印刷に向いている」表でもあるため、官公庁が Web で公開・提供しているデータはクロス集計表であることが多いのも事実です。

このようなクロス集計表をリスト・テーブル形式の表に変換する機能を Power Query / 取得と変換は持っています。それが [変換] タブの [任意の列] グループにある [列のピボットの解除] です。


必要な列を残すときの考え方に似ていて、「解除したい列」を選択して行うか、「解除したくない列」を選択して「他の列を解除する」かを選ぶことができます。

ピボットを解除した表は以下になります。


(3) データ型とデータの変換


第3列の [属性] は見出しの名前を [月] に変更し、第4列の [値] は [訪日外客数] に変更します。

この列の操作ではあと2つの変換を行います。まず、簡単なものは、 数値のデータである [訪日外客数] の列を、「数値である」設定をします。

列見出しのアイコンは、その列のデータの種類を表します。[訪日外客数] は実は数値なのか、テキストなのかわからない状態の [?] アイコンです。このアイコンをクリックすると変換データのタイプが表示されるので [整数] を選びます。


アイコンが [123] に変わり、3桁カンマがなくなります。これで計算が可能な「数値」になりました。
この型の変換は、[変換] タブの [任意の列] グループの [データ型の検出] でも可能です。この場合は自動的に型を検出し設定してくれます。

次に、[月] 列のデータが 4月、5月・・・なのであれば、[年]列のデータも 2003年、2004年とするか、[年]、[月] 両方とも数字にしたいところです。 最終的には、Excel において日付のデータは「シリアル値」として持ちたいところです。テキストか、数字かの、どちらかに揃えておいて、最後にはシリアル値にしておきます。

今回は [年] のデータに文字列の「年」を加えて、2003 を 2003年 にしてみます。

[年] の列を選択し、[変換] タブの [テキストの列] グループの [書式] の [サフィックスの追加] を選択します。
ダイアログが表示されるので、追加する「年」を入力します。


[OK] を押すと、[年] の列のデータすべてに「年」の文字列が追加されます。かつ、この列のデータはアイコンが [ABC] と示すようにテキストとして認識されます。


(4) 新しい列を追加してシリアル値のデータを作成する


最後に、[年] と [月] の列のデータから、[年月] という、最終的に「シリアル値」になるデータ列を追加します。

[列の追加] タブの [カスタム列の追加] コマンドをクリックすると「カスタム列の追加」ダイアログが表示されます。

新しい列名には「年月」を入れ、カスタム列の式: には以下を入力します。

=Date.FromText([年]&[月])


[OK]を押すと、以下のように新しい列が追加され、年月のデータが作成されます。


年月日として「1日」が既定値になりました。データ型は日付です。

さきの「カスタム列の追加」で使った Date.FromText という関数は、Power Query Formula Language (PQFL) と呼ばれるものですが、別名称があり、「M言語」とも呼ばれます。

https://msdn.microsoft.com/en-us/library/mt211003.aspx

Date.FromText は日付を表す文字列から日付型のデータを作成するM言語の関数です。

Power Query / 取得と変換においてはこの「M言語」の知識が必要になる場面が出てきます。ただし、Excel のワークシート関数のような頻度で使うものではないと思います。(もしそうだとしたら、かなり苦行になります(笑) 理由は後ほど。)

これまでのクエリ エディターの拡張や、[詳細エディター]での入力支援の「無さ」から考えると、M言語を直接記述して何かやる、というより、リボンのコマンドを選択して、その順番を記録して、「適用したステップ」と fx の数式バーで修正する方向に行くような感じがします。

ここまでの作業で、データを取得して、必要な変換はすべて終わっています。
次回は、最後のほうで触れた M言語について紹介したいと思います。その後で、このデータを使って、訪日外客数のデータを利用した分析やレポートを作っていきたいですね。

では、次回をお楽しみに。

[PR] M言語(Power Query Formula Language)について書いている書籍はコレ!
 

[Power BI] Cortana Intelligence Suite サービスとしての Power BI

$
0
0
本年も宜しくお願い致します。

今年も昨年以上に Power BI まわりはどんどんと進化していくような感じですね。Power BI だけでなく、他のベンダーさんの BI ツールも魅力的なツールになるべくどんどん進化しそうです。

Power BIと他のBIツールを比較したとき、よく比較ツールとして使われるのが、ガートナーさんのBIのMQ(Magic Quadrant)です。昨年2月の調査で、LEADERSに Tableau と Qlik と Microsoft が選ばれていました。

出典:Magic Quadrant for Business Intelligence and Analytics Platforms
Published: 04 February 2016 ID: G00275847
それぞれのベンダーの強みや注意事項がレポートにあるのですが、Microsoft の強みと注意事項はざっくりいうと以下だということです。

強み
・ 利用するための費用が安い
・ 圧倒的なチュートリアル、技術文書等の情報提供
・ あらゆるデータソースへの接続

注意
・ オンプレミスとクラウド、Excel Add-ins と Power BI Desktop、戦略の不透明さ
・ 高度な分析は Excel の 予測だけではできない - Azure/Cortana が担う
・ 今後改善・広がる可能性があるが、使われ方の幅に問題あり
・ 価格やパッケージが変化しすぎたため、BIや分析につよい営業力(体制)がない

BIツールという視点だけでみると、やはり Power BI の強みは「タダで始められる」というほどの費用の低さでしょう。フリーミアムモデルですからね。

一方で、Excel の予測シートや、予測関数の説明や紹介記事をみて、これで「予測できる!」と喜ぶ人がどれだけいるのでしょうか。Power BI が「セルフサービス BI」と言っているのは、「一人でできる」という意味合いだけではなく、「専門家がいらない」という意味で、現場のユーザーによるセルフサービス BI だと思います。ガードナーさんのレポートにもあるように、Power BIは、Power BI だけ見ているとミスリードしそうで、どうやら「Cortanal Intelligence Suite サービス」を見ないと全体像が見えないと思います。そこから見えるのは、データを分析するために、あらゆる種類の、膨大なデータを扱い、そのデータから「Machine Learning」を使って、予測モデルを導き出すこと、そして、その導き出したモデルを使って「視覚化」するツールが Power BI である、と明確に定義しています。

以下の図は Cortanal Intelligence Suite の説明で使われる図ですが、Power BI は右下の「Dashboard and visualizations」を受け持っているようです。


あまたあるデータの項目・種類から、注目している結果に影響があるデータを見つけ出すのが大変なんですよね。その因果関係(因果ではなく相関・・・)を証明するのが回帰分析などです。

Machine Learning は Power BI でデータ分析をやっていくと避けては通れないどころか、本質になるかもしれませんね。ビックデータになればなるほど、IoTになればなるほど、非構造化データまで扱おうとすればするほど、Machine Learning に頼らないと処理できないでしょう。

もしかすると Power BI アドインで、Excel から Machine Learning と連携してワークシート上でテーブルやグラフを作る、ということもあり得るかもしれませんよね。

Excel 視点から見ると、これまでは SQL Server の SSAS, SSIS, SSRS のアドインでしたが、Power BI 2.0 以降は SQL Server の影が見えなくなってきています。今後は、Cortana Intelligence Suite のサービスと連携する「アドイン」が出てきてもおかしくないでしょうね。

今後も Power BI は目が離せません。

Power BI コミュニティ 勉強会#3 に登壇します

$
0
0
昨年末から企画していた Power BI コミュニティ 勉強会 #3 に登壇させていただく予定です。
日時は2月18日(土) 午後1時~6時で、場所は品川の日本マイクロソフトさんの会議室(セミナールーム)です。

https://powerbi.connpass.com/event/48844/

https://powerbi.connpass.com/event/48844/

が、すでに満席じゃありませんか!

前回の Power BI 勉強会 #2 は、セミナールームのキャパが 60 人だったため、次回は 90 人部屋でしましょう、すぐに申込みでいっぱいになったしね、、、と話していたのですが。今回も3日目くらいで満席になったようです。

みなさん、、、アジェンダというか、まだ誰が、何を取り上げるか公開していないんですけど(笑)
この勉強会に対する期待の大きさをひしひしと感じます。

今回も私の枠では Excel からの視点で Power BI との関わりをご紹介したいのですが、Power BI という「サービス ブランド」から Excel のプレゼンスはだんだん少なくなっているのが現状です。

2010年のころは、SSAS (SQL Server Analysis Service) のアドインとして Power Pivot が公開されて、Excel と SSAS の連携、そして Excel を主体とした BI の強いメッセージを発信していました。

しかし、現在 Excel アドインの紹介は Power BI のサイトで「Power BI Publisher for Excel」を除いて露出が相当減りました。また、Power BI Desktop が公開されて以降は「Excel は要らない」というメッセージも発信されるようになり、Excel と Power BI の距離感が変わったように感じられる人も多いと思います。

「Power BI」に無料版が登場、Excel不要の単体アプリとクラウドで動く (日経ITPro 2015/04)
http://itpro.nikkeibp.co.jp/atcl/news/15/042401440/

ただ、このことは Power BI と Excel の距離感が遠くなったわけではないと思います。
現実に Excel アドインだった Power Query は Excel 2016 以降では「標準機能」として搭載されるようになりました。データタブにある「取得と変換」が、これまでの Power Query です。

Power BI Publisher for Excel も、Power BI Service のダッシュボードを利用したい Excel ユーザーにとって、ちょっと難解で、手間がかかる手順を短縮し、共有したい「セル範囲」や「オブジェクト(グラフ)」を「名前」と同様の管理方法で Power BI ダッシュボードに登録、更新可能にしたのは、ある意味で Excel との連携をさらに「簡易化」したといえるでしょう。

Power BI Publisher for Excel | Power BI Service
https://powerbi.microsoft.com/ja-jp/documentation/powerbi-publisher-for-excel/

Power BI Publisher for Excel について、もうひとつ付け加えるとすれば、「データモデル作らなくても、連携できるんだ」の一言につきます。また、Power Query / 取得と変換においても、たとえば、ピボットテーブルのデータソースとして「リレーションシップ」で複数テーブルを扱う、という場合、2013 では「データモデル」を使うことが紹介されますが、現状はデータモデルは必須ではありません。

Power BI Service と密接に連携するためには「データモデル」は必須ですが、そうでなければ、データモデルを作らなくても同等のことができる、という「ゆるやかな連携」を提供していることは、良い意味で Excel との距離感を維持しようとしているように思えます。

ということで、Excel と Power BI はまだまだ関わりあって進化していくんでしょうね。

勉強会当日のネタはまだ構想中ですが、もちろん Power BI がらみの話になります。
すでに満席ですが、前回から考えると少しだけですがキャンセルも発生していましたので、キャンセル待ちも若干可能です。当日会場でお会いできるのを楽しみにしています。

M言語 Power Query Formula Language

$
0
0
先日、Power BI 勉強会#3で「M言語 Power Query Formula Languageとは?」というお話をする時間をいただきました。
冒頭「今回初めて参加された方はどのくらいいらっしゃいますか?」と伺ったところ、結構な方が初めての参加で、これから Power BI を勉強しよう、という人が多かったので、スライドなしで、Power BI の概要を前半の時間を使ってご紹介しました。
よって当初予定の用意したスライドをかなりの速足でご紹介してしまい、大変申し訳ないと感じています。

勉強会スライド 
https://doc.co/UY3RDb

昨日お伝えしたかった内容を再度まとめておきたいと思います。

データを取得し、準備するETL機能とクエリ エディター

Power BIは、Power BI Desktop や Power BI サービス(Web)などのアプリケーションやサービスを総称した名称ですが、Excel にも Power BI アドインというものがあり、その中でも Power Query は Excel 2013 ではアドインとして、Excel 2016 では標準機能の「取得と変換」となって利用可能になっています。
この Power Query の機能はいわゆる ETL(Extract, Transform, Load)機能と呼ばれる、データを抽出し、分析しやすいよう変換し、保存する、という役割を受け持つもので、Power BI Desktop もほぼ同じ機能を持っています。

その機能を実現するのが「クエリ エディター」です。


クエリ エディターは、Power BI Desktop および Excel の Power Query アドインまたはExcel 2016 取得と変換で共通の見た目、操作性を持つウィンドウとして起動します。

マクロ記録のようにクエリ エディターの操作を記録

このクエリ エディターは、そこで行われた1つ1つの操作をクエリの設定ウィンドウの [適用したステップ] として記録していきます。そのときの操作内容を記録する言語が M 言語と呼ばれたり、Power Query Formula Language と呼ばれます。
記録されているステップ名を選択すると、プレビューグリッドにはその操作の結果が表示され、プレビューグリッド上部の数式バーに M言語で記述された数式が表示されます。


操作手順を記録しているので、いまやった操作を「取り消したい」場合は、適用したステップに表示されているステップを削除すると、前の状態に戻ることができます。

M言語の特徴

クエリ エディターで利用する(記録される)M言語には、ある特徴があります。クエリ エディターでは、プレビューグリッドに表示された表やテーブルの操作が記録されるため、記録される M言語の関数は「テーブル」を扱ったものになります。
M言語による数式は、Power Query 関数 (もしくは M言語関数)を使いますが、その関数の表記は以下が基本形です。

クラス.関数(参照するステップ (, その他の引数))

参照するステップの多くは「直前の」ステップになります。クエリ エディターの操作は表を対象することが多いため、クラスの部分が Table の関数が多く使われます。

数式バーはステップ1つの数式のみ確認できますが、[詳細エディター] を使うことで、記録されているすべてのステップの数式の確認が可能です。行の絞り込みや、列の削除や追加の操作は、Table.○○○という関数が使われています。


Tableに関連する関数のパラメーターとして、日付に関する関数や、文字に関する関数などが使われます。Excel のワークシート関数の数式と同じように、関数のパラメーターとして他の操作を行う関数を組み合わせることができます。

たとえば、以下の数式は、フィルターされた行、というステップ名(および変数名)で、Table.SelectRows という関数を使って、行の絞り込みをします。絞り込みの対象は、直前のステップの[変更された型]というステップの結果のテーブルで、条件は、[日付]列の各行の日付データが Date.IsInCurrentYear 関数を使って「今年」であるものを絞り込んでいます。

フィルターされた行 = Table.SelectRows(変更された型, each Date.IsInCurrentYear([日付])),

詳細エディターで確認できるクエリは、複数の操作ステップを let ~ in で括って、in の直後に最終ステップ名(変数)を記述します。そのステップの結果がプレビューグリッドに表示されます。

詳細エディターとM言語を使ってゼロから記述するのか?

結論から言えば、それはハードルが高く、難しいです。
現時点で詳細エディターは、開発環境としての機能は皆無です。インテリセンスのような入力支援もなく、ヘルプ機能や、エラーチェックもないに等しい状態です。
苦労して動くものを作ったとしても、業務内における引継ぎを考えるとお勧めできるものではありません。

現状は、クエリ エディターで行った操作の記録として再利用し、修正が必要であれば最小にとどめることが肝要だと感じています。

ただし、カスタム関数と呼ばれるクエリを使うと便利な場合が出てきます。その作成では詳細エディターでM言語を使わざるを得ません。

カスタム関数を作る

関数なので、引数を宣言します。記述方法は let ~ in の直前に引数を (param1 as text)=> のような記述で設定します。文字列の引数を param1 という名前で定義して、let ~ in の中の数式に渡します。このように引数を設定したクエリは「クエリ関数」になり、他のクエリから参照することができます。


まとめ

空のクエリからM言語を使ってゼロからクエリを記述する、、、というクエリの活用はハードルが高く、エディターの支援機能などを見ても、まだ万人向けとは言えません。多くの操作はクエリ エディターのリボン コマンドから可能で、毎月のアップデートで機能追加されています。
また、この後工程での「分析」のフェーズでも、データの「整理」が可能です。特に「日付」に関しては、クエリ エディターでやるべきか、分析のフェーズで DAX のタイムインテリジェンス関数やカレンダーテーブルですべきか、といった判断が必要になるケースもあります。
データを収集し、分析し、レポートする、という Power BI の一連の流れの中で、機能的にできることを把握し、適切な場面で、適切な機能を使えるようになりたいですね。

以上、昨日お伝えしたかったポイントをまとめてみました。

[Power BI] Excel ユーザーにとっての「メジャー」とは?

$
0
0
先日の Power BI勉強会#3、ご参加ありがとうございました。
ご参加いただいた方で、これから Power BI を勉強したい、という人が多かったのですが、Power Pivot や Power BI Desktop を使いはじめると、早い段階で「計算列」と「メジャー」について学ぶことになります。「計算列」は Excel ユーザーにとっても馴染みがありますが、「メジャー」はなかなか理解しづらいという話をよく聞きます。

例えば、「Power BI メジャーとは」でインターネット検索すると、マイクロソフトの以下のコンテンツを見つけることができます。Power BI 関連のコンテンツは、このご時世でも結構日本語化されているんですよ。

Power BI Desktop のメジャー
https://powerbi.microsoft.com/ja-jp/documentation/powerbi-desktop-measures/

チュートリアル:Power BI Desktop で独自のメジャーを作成する
https://powerbi.microsoft.com/ja-jp/documentation/powerbi-desktop-tutorial-create-measures/

実は Excel ユーザーにとってメジャーを理解する近道、もしくは Power BI Desktop を理解するポイントは、Excel のピボットテーブルと比較するのが一番だと思います。

Power BI Desktop を操作するときは、テーブル、フィールド、レコードを扱いますが、「セル」という概念はありません。Excelユーザーが Power BI Desktop でデータを扱うとき、このセルのイメージが邪魔をすることがあります。
同じように、Excel ピボットテーブル レポートを作成する場合、表やテーブルをデータソースとして範囲指定した後は、テーブルのフィールドをドラッグ&ドロップしてピボットテーブル レポートを作ります。そこにセルの概念はありません。


この操作は、Power BI Desktop でもほぼ同じ操作性です。

ピボットテーブル レポートの作成で、数値しか含まないフィールドのチェックボックスをオンにして選択すると、そのフィールドが「数値」であることを Excel が判断して、Σ 値エリア(ボックス)に追加し、「数値」の列であることから「合計」の計算を自動的に行います。その結果はピボットテーブル レポートの自動的に追加されます。


これを「暗黙のメジャー」と呼びます。そうなんです。これが「メジャー」なんです。
つまり、メジャーとは、テーブルから何等かの計算結果を求めるための仕組みです。Excel の場合は、ピボットテーブル レポートを作成する際に、合計を求めたり、平均を求めたり、最大値や最小値をもとめる、個数を数える、といった「計算結果」を集計方法から選択することができます。


重要なポイントは、この設定では元のテーブルやワークシートに列を追加して数式を入れたり、集計行を追加しセルに数式をいれた結果を参照していません。元のテーブルやワークシートに対して、なんら列や行の追加・修正をせずに計算結果を求めています。

「暗黙の」と呼ばれるのは、数値列であれば自動的に合計が既定になり、その他平均などのメジャーが用意される、という意味です。そのため、Power BI Desktop では数値フィールド名の先頭にΣマークがつきます。

Excel のピボットテーブルの [値フィールドの設定] と [集計方法] で合計や個数、平均といった計算を指定するように、Power BI Desktop でも [値 フィールド] のドロップダウン リストから計算方法を変更することができます。


そして、Excel ピボットテーブル レポートで設定できる、もう一つの計算方法のグループがあります。[値フィールドの設定] の [計算の種類] タブを選択すると、以下のような計算の種類を選択することができるドロップダウン リストが表示されます。


比率を計算するもの、累計を扱うもの、順位を扱うものなどを選択することができます。
同様の計算すべてを Power BI Desktop でやるには、一部ダイアログの設定で可能なものもありますが、多くはメジャーを「自分で」作成することになります。その時に処理を記述するのが、ワークシート関数に似た DAX (Data Analysis eXpressions) と呼ばれるものです。

Excelユーザーからすると、ピボットテーブル レポートの「計算の種類」で設定するだけで結果を得られるものを、DAXを使った数式でメジャーを作る「手間」がかかります。そのかわり、「計算の種類」には無い複雑な計算を独自に作成することができるようになります。

過去に私のブログで上記と似た内容を投稿しているのでそちらも参照ください。

Power BI Desktop - Excel とどこが違うのか(2)
https://road2cloudoffice.blogspot.jp/2016/04/power-bi-desktop-excel-2.html

DAXについては日本マイクロソフト Data Platform Tech Sales Team Blog さんの DAX 入門シリーズが参考になります。
連載:DAX入門
https://blogs.msdn.microsoft.com/dataplatjp/dax/

先日の勉強会で「四半期がうまく扱えなくて・・・」という質問をいただきましたが、プロパティの設定変更等では対応できません。カレンダーテーブルを作成して対応します。この件は、上記の DAX 入門の「カレンダーテーブルの作成」に解説がありますので、是非ご一読ください。
Viewing all 82 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>