タグ別アーカイブ: マスタ

リレーションのツボ~2つのテーブルを組み合わせつつフィルターする~

【フィルターがどうもおかしい?と思ったらまずは今回の内容を疑ってみましょう!】

今回の記事では2つに分かれているテーブルを、リレーションにより一緒のマトリックスで使用します

上の画像の「発注数の合計」「納品数の合計」はそれぞれ別のテーブルのものです

そして、別のテーブルの内容がそれぞれ同じく「商品ID」にてフィルターされています

ちなみにここで言うフィルターとはエクセルのフィルター機能とは似て若干異なります

エクセルのフィルター機能は主に絞り込むために使用します

今回の記事のフィルターは「絞り込む」だけでなく「区分」や「選択」の意味がありますので、その点はご留意ください

実はこの「別テーブル共存」「同フィルター」の状態を作るのがとても重要なことなのです

どう作るかについては王道があります

1.参照マスタを作成する

2.それぞれのテーブルとの間で参照マスタとのリレーションを「1対多」「単一方向」で作成する

3.参照マスタの内容でフィルターする

この3つが王道です

何故ここで王道という表現を使うのか?

これは他にもリレーションやフィルタをする方法があるからです

但し、他の方法だと不正確だったり、曖昧さが残ります

この不正確になったり、あいまいさが何故発生するのかを理解し、Power BIのフィルターがどういうものなのかを考察するのが今回の記事の目的です

では、ここから王道も含めて他の方法を取った場合を実際に見ていきたいと思います

今回使用するデータ

発注テーブル

商品ID、発注数、発注日の3列から構成されます

商品IDは1~10まであります

発注日は1つの商品IDに対して複数あります

ちなみに発注数の合計は190になります

納品テーブル

商品ID、納品数、納品日の3列から構成されます

商品IDは発注されてまだ全く納品されてないものもあるので、1~7までになります

納品日は1つの商品IDに対して複数あります

発注された10種類のIDの商品の中にはまだ全く納品されていない商品がある、というのが後々大きなポイントになります

ちなみに納品数の合計は80になります

商品IDマスタ

全部で10行あります

発注テーブルと納品テーブルの商品ID数は以下のようになります

発注テーブル:10 > 納品テーブル:7

ですので商品IDマスタの行数は、両テーブルを漏れなくダブりなく網羅した10となります

王道の場合

王道の場合のリレーションは次のようになります

「発注テーブルと商品IDマスタ」そして「納品テーブルと商品IDマスタ」それぞれの間に「1対多」のリレーションがあります

何故、1対多の関係になるかというと、前述のように1商品IDに対して発注日や納品日が複数に跨るからです

(注)ここでの*は多の意味になります

そしてそれぞれのリレーションは「単一方向」で作成します

以上が王道のリレーションのパターンです

マスタでフィルター

ではビジュアルはどうなるかを次に説明します

最大のポイントは商品IDマスタでフィルタすることです

マスタ以外でフィルター

では、次のように発注テーブルの商品IDでフィルターするとどうなるかを見てみましょう?

発注テーブルから取得する「発注数」は問題ないですが、納品テーブルから取得する「納品数」の方は全ての行が合計数になってしまい、商品ID別のフィルターが効いていません

理由はフィルタの方向が「商品IDマスタ」⇒「発注、納品テーブル」の方向の「単一」であるためです

その為、発注テーブルのフィルターが商品IDマスタを通じて納品テーブルまで波及していないからです

更に、次の画像のように納品テーブルの商品IDでフィルターしてみましょう!

こちらも発注数が合計になってしまいます

加えて、商品IDの8以降が欠けてしまいます

ですので、あくまでフィルターは参照マスタの内容で行うのが確実なのです

単一ではなく双方向でフィルターした場合

前述の王道ではクロスフィルターを単一で行っていました

では、クロスフィルターを双方向に変えてみたいと思います

この場合は実は、前述はうまく行かなかった発注テーブルからのフィルターが正しく行えます

何故正しくフィルターが行えるか?他の言葉で言い換えると何故、発注テーブルの内容で正しく納品テーブルの内容をフィルターが行えるかというと、フィルターが波及するからです

フィルターが波及する点は、納品テーブルの内容でフィルターした時も同様です

但し、この場合は結果が曖昧になります

商品IDが納品テーブルの内容の7迄になるからです

ですので、リレーションを双方向にて2つのテーブルをつなぐ場合は「曖昧」な結果になる可能性があるということになります

多対多

最後に、商品IDマスタを介さずに多対多でリレーションする場合を見てみましょう

ここで、本題に入る前に多対多の関係について詳細に見ておきましょう

上の画像で1が上下のテーブルで複数出現します

前回の商品IDマスタと発注、納品テーブルの関係では1「1、1、・・・」となっていました

ところが、今回の多対多の関係では「1、1」「1、1」ということになります

以下の画像のように、参照マスタに参照する値が複数あるのとは違い、元々複数の値があるテーブルどうしなのでそんなに問題が無いかのように感じます

実はこの場合も曖昧な結果になります

下の画像は「発注テーブル」の商品IDにてフィルタしたケースです

この場合は確かに問題がありません

今度は納品テーブルにてフィルタしてみます

この場合、納品テーブルの商品ID数までしか表示されないので曖昧な結果になります

ですので、やはり王道の方法が一番確実なのです!

<まとめ>

今回は参照マスタを使用して、2つのテーブルを連携する「王道」について解説しました

記事の途中で「2つのテーブルの内、どちらかの方がID数が多いのが分かっていれば問題ないのでは?」と思った方もいらっしゃると思います

確かにその通りなのですが、王道の方法であれば「ミスに気づきやすい」なども含めて総合的に確実性が担保されるので、王道の方法を実践するのがベストです!

最後に、

今回の記事は前回の内容:クロスフィルターの方向を単一もしくは双方で調整とも踏まえてみて頂くと理解が深まると思います

ぜひ前回の記事も目を通してみてください

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

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ドロップダウンリスト活用による入力の省力化

以前、エクセルのレッスンをしている時に、ある企業でマネージャーをしている方から相談を受けました

「部下の行動を記録して報告する必要があるが、入力を省力化したい」という内容でした

文章の入力を省力化する場合には、固定文章をマスタ化した上での「ドロップダウンリスト」の活用をお勧めします

エクセルシートに文章を記入するのではなく、予めリストを作成しておいた「短い文章」の中から「選択」をすることにより、文章の記入業務を効率化します

*報告は自由フォーマットという前提での解説です

マスタ化

例えば、今回のマネージャーの方のケースで言えば、こんな風に入力していました

このケースの場合は、担当者と遅刻などの特筆事項は「固定的」な内容なので、下の画像のように別表を作成して管理しておきましょう!

ドロップダウンリスト作成

まずはデータタブから「データの入力規則」をクリックしましょう!

次に、入力値の種類から「リスト」を選択しましょう

上の画像のリストを選択した後は、「リストにする範囲/マスタ」を指定しましょう

これで、ドロップダウンリストが完成です

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

作成したドロップダウンリストはコピーもできます!

<まとめ>

今回はドロップダウンリストの作成により、文章の記入業務を効率化する方法を解説しました

ドロップダウンリストは簡単な操作で作成でき、コピーをすることもできます

ドロップダウンリストは入力時やエラー発生時のメッセージも設定できるので、そちらの機能もあわせて活用していくことをお勧めします


にほんブログ村

ピボットテーブルでグループ化をカスタマイズする方法

【今回はピボットテーブル・グループ化機能の裏技を解説します】

ピボットテーブルにグループ化という機能があります

数値や日付でデータをまとめ直すことができるのでとても便利です

実は、文字列でもグループ化機能が使えます!

グループを文字列にて作成すれば、「マスタなし」のままでデータを独自にまとめ直すことができます

使用するデータ

地区別の注文金額をデータとして使用します

地区は上の画像のように「東京、名古屋、神戸・・・」という風に分かれています

こちらの地区の区分を東日本西日本にグループ化します

グループ化及び解除

グループ化

 グループ化を行う時には、数値や日付でグループ化する時とは違い、まずはグループ化の対象をCtrlキーを押しながら指定します

その後、右クリックして表示される「グループ化」をクリックします

すると、下の画像のようにグループ化対象として指定した箇所がグループ化されます

 上の作業で「東日本」にグループ化する「東京、仙台」をグループ1でまとめ直したので、次に「名古屋、神戸、大阪」をグループ2にまとめます

グループ解除

グループ化したものを解除する場合には、該当のグループ上で下の画像の「グループ解除」をクリックします

グループ名の変更

 前章のままだと、グループの名称がそれぞれ「グループ1」「グループ2」のままなので該当のグループにカーソルを置いて名称を変更します

尚、画面右の作業ウィンドウに目を移すと、グループ化したことにより新たに作成されたフィールドの名称が「地区2」となっています

こちらは、一旦、フィルター欄に配置します

その後、数式バーでフィールド名を変更します

<まとめ>

今回は、文字列から独自にカスタマイズしたグループを作成する方法を解説しました

この方法を知っておくと、わざわざマスタを作成してVLOOKUP関数で紐づけるなどの手間も不必要です

しかも、変更処理もグループ化の解除を行った後に、再度グループ化を行うだけなのでとても楽です

エクセルはとても進歩しているので、こういった裏技を知っておくと業務効率が違ってきます

また次回、ピボットテーブルの裏技を紹介していきます

ちなみに解説で使用したエクセルのバージョンは次の通りです


にほんブログ村