昔のExcelしか使ったことがない人むけのゆるいPowerBI入門的な記事その1・・・というか自分の理解の記録
皆さんこんにちは。胡田です。 今回は珍しくPowerBIのお話です。私はPowerBIはデータ可視化ツールとしては以前からずっと便利に使っているのですが、PowerBI内でデータを加工したりすることはこれまで避けていました。なぜかというと「良くわからなくて、新しい方法を学ぶ時間が取れなかったから」です。 これは単純に言い訳なのですが、私はプログラムが書けるし書くことが好きなので、なにかデータ加工的な事をする必要がある場合にはデータベースの外側でプログラムで書いてしまいます。そして、データベースをプログラムで更新しちゃう。そして出来上がったデータベースに対してPowerBIを接続してしまえば必要な可視化が簡単にできてしまいます。なので、PowerBIの中でテーブルを定義して、データを操作して…ということはしなくてもどうにでもなったのです。 ですが、他の人と一緒にトレーニングも兼ねてちょっとした複数のcsvファイルを元にしたレポートを作成する機会があり、PowerBIで全部やりたいという希望がその一緒に作業する人にあったので、一緒に付き合うことにしました。 いや、勝手がわからなくて結構苦労しました(笑 というわけで、私のような「昔ExcelでVLookup関数を駆使して頑張ったことあったけどもうやりたくないなぁ…」と言っているような知識レベルの人に向けてPowerBIで戸惑ったところと理解したところを少し書いておきたいと思います。 理想的には「(昔の)Excelしか使ったことがない人に向けたPowerBIの導入記事」的な感じになるといいのですが、はて、さて。 私はこのあたり本気で初心者かつまともに勉強もせずいじって直感で理解しているだけなのでPowerBIをガリガリやっている人からするとレベルが低かったり効率が悪かったり、他にもっと適切なやり方があったりするのではと思いますが、そこは生暖かい目で見守りつつ、コメントで優しくアドバイスいただければと思います。 とりあえず好き勝手にデータを編集できない Excelでは新規にファイルを作るとシートがあり、セルがあり、適当な場所にいきなり値を書き込んだり出来るわけですが、PowerBIではそうはいきません。保持できるデータはすべてきちんと定義されたテーブルの形になります。データベースですね。 とりあえずまずは感覚を掴むためにテスト的にテーブルを作ってみて、データを書き込んで…と試してみたかったので、「データの入力」を行いました。 出てくるのは「テーブルの作成」画面です。このあたりはExcelよりもAccessに近いんですかね?すいません、Accessもほとんど使ったことなくてですね…。 で、この画面でテーブルを作成するのは特に違和感ありませんでした。 列を追加したり、複数レコードにしてみたり、はい。「読み込み」をクリックするとテーブルが作成されます。 ここまではまぁ違和感ないのですが、じゃぁ、このテーブルを編集したい!と思うと早速やり方がよくわからなくなりました。直接この画面では編集できないのですね。 これ、裏側ではすべて「クエリ」が作成され、それによってデータが読み込まれたということになっているようですね。 「クエリの編集」をクリックすると、このテーブルを生成したクエリを確認、編集することができます。 全部クエリで表現されるというのは面白いですね。Excelとは全く異なるアプローチです。 「ソース」をクリックすると再度テーブル作成のGUIが表示されました。なるほど。 1つのセルに「関数を書く」というアプローチではない このテーブルの作成画面は感覚的にはExcelに近い感じで操作出来るのですが、別に関数が書けるわけではないです。 こんな感じにExcelでの関数っぽい書き方をしてもたんに文字列になっています。 このあたりきちんとテーブルとして列の定義が厳密という感じでしょうか。Excelよりも列の型が厳密なSharePointの感覚に近いという印象です。 で、なにか関数を使って計算等したければ、新しい「列」を定義してその中で列の定義として関数を書いたり、テーブル全体に対して「メジャー」を定義するというアプローチになるようです。(間違ってたら突っ込みください。) 「新しい列」をクリックするとこのように列の定義を書くことができます。 これはセル1つに対して定義しているのではなくて、列全体の定義です。Excelとは違います。 ためしに”あ”と入力してみます。 今は2レコードしか無いですが、すべてのレコードの「列」には「あ」と入力されます。列の定義が「あ」なので当然ですね。あくまでも定義したが「列」であって、Excelのように1セルに入力したのでは無いことがわかります。 この列の定義の中では「同じレコードの他の列」を参照することができます。 ※「テーブル1」だと補完してくれなくて面倒だったのでテーブル名を「Table1」に変更しました。 補完してくれますね! 「列」の定義をTable1の列1にしたところ、きちんと同じレコードの列1の値が入力されました。Excelだと他のセルの値を相対参照、絶対参照で自由に参照する事ができますが、PowerBI内のテーブルの定義ではそういうアプローチでは無いことがわかります。 で、この列の定義の中では「DAX式」が書けるのだそうです。なぜなら、そうやって怒られたから…。 DAX式を列の定義として入力してあげればいろいろと他の列の値なんかを使いながらデータ加工ができそうです。 リファレンスはこちらにあります! - [Data Analysis Expressions (DAX) Reference - DAX | Microsoft Docs](https://docs.microsoft.com/ja-jp/dax/data-analysis-expressions-dax-reference) たとえば「列」に対して「列1」のテキストの左から3文字を入力してみます。 こんな感じに簡単に行なえます。 列の定義に書けるのがDAX式(DAX functions)ということを理解しておけばまずOKですね。 DAX式とPowerQueryは違うものなので注意! ちなみに、DAX式とクエリの中で記載できるクエリの文法は全く別物なので注意が必要です。というか私は当初混乱しました。 こちらPower Query。「クエリ」の中で使うものです。 Power Query M function reference - PowerQuery M | Microsoft Docs ...