ディメンションを操作する

完了

スター スキーマの作成にあたっては、ディメンション テーブルとファクト テーブルがあります。 ファクト テーブルには、販売注文、出荷日、再販業者、サプライヤーなどのイベントに関する情報が含まれています。 ディメンション テーブルには、製品または時間など、ビジネス エンティティに関する詳細情報が格納され、リレーションシップを介してファクト テーブルに接続されます。

階層を 1 つのソースとして使用すると、ディメンション テーブルで詳細を見つけやすくなります。 これらの階層は、データの自然なセグメントを通じて形成されます。 たとえば、日付の階層を作成して、日付を年、月、週、日に分割することができます。 階層は、データの概要を表示するだけではなく、データの詳細にドリルダウンできるので便利です。

階層

ビジュアルをビルドするときは、Power BI によって日付型の値が階層として自動的に入力されます (テーブルが日付テーブルとしてマークされていない場合)。

階層の例のスクリーンショット。

上記の Date 列では、年、四半期、月、日として、日付が段々詳細に表示されていきます。 また、手動で階層を作成することもできます。

たとえば、Category と SubCategory 別の合計売上を示す積み上げ横棒グラフを作成する場合を考えてみましょう。 このタスクを実行するには、Category と SubCategory の Product テーブルに階層を作成します。 階層を作成するには、Power BI の [フィールド] ペインに移動して、階層を作成する列を右クリックします。 次の図に示すように、[新しい階層] を選択します。

Product テーブルの新しい階層のスクリーンショット。

次に、作成した新しい階層に SubCategory 列をドラッグ アンド ドロップします。 この列は、階層のサブレベルとして追加されます。

Category Name Hierarchy と Category Name および SubCategory Name が入れ子になっているスクリーンショット。

次に、[視覚化] ペインで積み上げ横棒グラフを選択して、ビジュアルをビルドできます。 Category Name Hierarchy[軸] フィールドに追加し、Total Sales[値] フィールドに追加します。

[軸] フィールドが Category Name Hierarchy で [値] フィールドが TotalSales のスクリーンショット。

ビジュアルをドリルダウンすると、表示する内容に応じて、CategorySubcategory の両方を表示できます。 階層を使用すると、データのレベルの増加を 1 つのビューで表示できます。

1 つのビジュアル上の 2 つのビューのスクリーンショット。

階層について学習したので、さらに一歩進んで、ファクト テーブルとディメンション テーブルの間の複数のリレーションシップにおける親子階層とそのロールについて調べます。

親子階層

次の例では、データベース内に Employee テーブルがあり、従業員、その上司、上司の ID という重要な情報を示しています。 この表を見ると、Roy FManager 列に繰り返し現れていることに気付くでしょう。 図に示すように、複数の従業員に同じ上司がいますが、これは、上司と従業員の間の階層を示しています。

Employee ID、Employee、Manager ID、Manager の各列が含まれる Employee テーブルのスクリーンショット。

Manager 列によって階層が決定され、その結果、それが "親" となり、"子" は従業員となります。 この例では、この階層のすべてのレベルを表示できるようにします。 Power BI では、階層のすべてのレベルが既定で表示されるわけではないので、確実にこの階層のすべてのレベルを表示するか、データをより高い細分性で表示するためにフラット化するかは、ユーザーが決めます。

親子階層をフラット化する

最上位レベルの親に基づいて複数の子レベルを表示するプロセスは、"階層のフラット化" と呼ばれます。 このプロセスでは、テーブルに複数の列を作成し、同じレコード内の親から子への階層パスを表示します。 使用するのは、各従業員の管理パスのテキスト バージョンを返す単純な DAX 関数である PATH() と、このパスを管理階層の各レベルに分割する PATHITEM() です。

重要

DAX については、まだ説明されていませんが、別のモジュールで説明されます。 この関数は、階層を説明しているため、このセクションに含まれています。 このキャパシティで DAX を使用すると混乱が生じる場合は、DAX モジュールを参照してから、このセクションに戻ってください。

テーブルでは、[モデリング] タブに移動して、[新しい列] を選択します。 表示された数式バーに次の関数を入力します。この関数によって、従業員と上司の間のテキスト パスが作成されます。 この操作により、DAX に計算列が作成されます。

Path = PATH(Employee[Employee ID], Employee[Manager ID])

親子階層をフラット化するための DAX メジャーのスクリーンショット。

次のスクリーンショットに示すように、従業員と上司の間のパスが完成し、新しい列に表示されます。

Power BI の PATH 関数テーブルのスクリーンショット。

Roger M を見ると、ID のパスは 1010 | 1011 | 1013 となっています。つまり、Roger M (ID 1013) の 1 つ上のレベルは、彼の上司の Pam H (ID 1011) であり、Pam H の 1 つ上のレベルは、彼女の上司の Roy F (ID 1010) です。 この行では、Roger M は階層の最下位で、子レベルにあり、Roy F は階層の最上位で、親レベルにあります。 このパスは、すべての従業員に対して作成されます。 階層をフラット化するには、PATHITEM 関数を使用して各レベルを分離します。

階層の 3 つのレベルをすべて個別に表示するには、次の式を入力して、前と同じ方法で 4 つの列を作成します。 PATHITEM 関数を使用して、対応する階層のレベルに存在する値を取得します。

  • Level 1 = PATHITEM(Employee[Path],1)
  • Level 2 = PATHITEM(Employee[Path],2)
  • Level 3 = PATHITEM(Employee[Path],3)

PATHITEM 関数の使用のスクリーンショット。

完了すると、テーブル内に階層の各レベルが含まれていることに気付くでしょう。 Roy F は階層の最上位にあり、レベル 2 からレベル 3 に進むと、上司と従業員が互いにマップされていることがわかります。

親子階層のフラット化のスクリーンショット。

ここでは、上で行ったように、[フィールド] ペインで階層を作成できます。 最初の階層レベルであるレベル 1 を右クリックして、[新しい階層] を選択します。次に、レベル 2レベル 3 をこの階層にドラッグ アンド ドロップします。

従業員レベルの新しい階層のスクリーンショット。

これで、階層が正常にフラット化され、個々のレベルを表示できるようになりました。

上記では、ファクト テーブルとのリレーションシップが 1 つしかないディメンションについて考えました。 ただし、ディメンション テーブルにファクト テーブルとのリレーションシップが複数ある状況も、たしかに発生します。

多様ディメンション

多様ディメンションには、ファクト テーブルとの有効なリレーションシップが複数あります。つまり、同じディメンションを使用して、データの複数の列またはテーブルをフィルター処理することができます。 その結果、取得する必要のある情報に応じて、さまざまな方法でデータをフィルター処理することができます。 このトピックは複雑なため、このセクションでのみ紹介します。 多様ディメンションを操作するには、複雑な DAX 関数が必要です。これについては、後のセクションで説明します。

モデル内の多様ディメンションのスクリーンショット。

上のビジュアルは、Calendar、Sales、Order のテーブルを示しています。 Calendar は、ディメンション テーブル、Sales と Order はファクト テーブルです。 ディメンション テーブルには、Sales と Order のそれぞれに対して、合わせて 2 つのリレーションシップがあります。 この例は、Calendar テーブルを使用して Sales と Order の両方でデータをグループ化できるので、多様ディメンションの例となります。 Calendar テーブルが Order テーブルと Sales テーブルを参照するビジュアルをビルドする場合、Calendar テーブルは多様ディメンションとして機能します。