残業を減らす!Officeテクニック

誰がどのプロジェクトに関わっているかを把握したい! Power Pivotのメジャーで可視化

メジャーを利用すれば、ピボットテーブルで文字列操作が可能

 複数のプロジェクトが同時に進行している職場では、同じ社員が複数のプロジェクトに関わっていることも珍しくありません。主担当や副担当、メンバーといった役割を含めて、誰がどの程度、関わっているかを把握しておく必要があります。

 以下は、プロジェクト名に紐付くように社員名を並べた管理表です。1行が1人の参加記録になっています。

プロジェクト名と、関わっている社員をまとめた管理表の例

 この表を元にしてピボットテーブルを作れば、社員ごとの参加件数や予定工数を集計することもできます。しかし、具体的なプロジェクト名を集計結果として表示しようとすると、思うようにいきません。

 文字列の[プロジェクト名]を[値]に追加した場合、その数がカウントされてしまうためです。[プロジェクト名]を[行]に追加すれば確認できますが、今度は社員ごとのデータが複数行に分かれてしまいます。

[プロジェクト名]を[値]に追加するとカウントされてしまう
[プロジェクト名]を[行]に追加した場合は、社員ごとのデータが複数行に分かれてしまう

 参加件数や予定工数と一緒に、具体的なプロジェクト名を1つのセルに表示する方法はないのでしょうか? 今回は、Power Pivotで利用できるDAX関数の「CONCATENATEX」を使い、複数の文字列を1つのセルにまとめて表示する方法を紹介します。

データモデルからピボットテーブルを作成する

 ピボットテーブルで文字列を集計するには、Power Pivotの「メジャー」を利用します。メジャーとは、独自の計算方法を定義し、ピボットテーブルの[値]エリアで利用できる仕組みです。通常のセルに入力する数式とは異なり、集計する行や列、フィルターの条件に応じた計算結果を返します。

 ただし、メジャーを利用するには、ピボットテーブルの元データを「データモデル」に追加しておく必要があります。今回の例では、「プロジェクト一覧」という名前のテーブルをデータモデルに追加します。

「プロジェクト一覧」という名前のテーブルをデータモデルに追加する
[Power Pivot]タブの[データモデルに追加]をクリックする
プロジェクト一覧がデータモデルに追加された。[ホーム]タブの[ピボットテーブル]をクリックする
[新しいワークシート]を選択して、[OK]をクリックする
データモデルを元にしたピボットテーブルが作成された。[ピボットテーブルのフィールド]に折りたたまれたテーブル名(ここでは「プロジェクト一覧」)が表示される。[>]をクリックすると、フィールドが一覧表示される

 なお、[Power Pivot]タブが表示されていない場合は、[Excelのオプション]の[アドイン]から設定を変更しておきます。

[Excelのオプション]の[アドイン]にある[COMアドイン]を選択して、[設定]をクリックする。[Microsoft Power Pivot for Excel]にチェックを付けて、[OK]をクリックする

CONCATENATEX関数でプロジェクト名をまとめる

 続いて、メジャーを作成します。メジャーの計算式には、DAX(Data Analysis Expressions)という数式言語を使います。計算式では「DAX関数」を利用できます。Excelのワークシート関数と似たものもありますが、データの集計や分析に適した独自の関数も用意されています。

 今回は、DAX関数の1つであるCONCATENATEX関数を使います。似た名前の関数にCONCATENATE関数もありますが、これは2つの文字列を連結する関数です。一方、CONCATENATEX関数は、テーブルの各行から値を取り出して連結します。区切り文字や並べ替えの順序も指定できるため、複数のプロジェクト名をまとめる用途に向いています。

=CONCATENATEX(

VALUES('プロジェクト一覧'[プロジェクト名]),

'プロジェクト一覧'[プロジェクト名],

"、",

'プロジェクト一覧'[プロジェクト名],

ASC

)

 テーブル名は半角の「'」で囲みます。ネストしているVALUES関数は、重複しないプロジェクト名の一覧を取り出すためのものです。同じプロジェクトに参加する社員が複数いても、名前が重複するのを防げます。最後の2つの引数では、プロジェクト名の昇順で並べるように指定しています。

[Power Pivot]タブの[メジャー]-[新しいメジャー]をクリックする
[メジャー名]に名前を付けて(ここでは「参加プロジェクト一覧」)、上記の数式を入力する

 作成したメジャーをピボットテーブルに追加してみましょう。以下は、[行]に[氏名]を追加し、[値]には[プロジェクト名](カウント)、[予定工数(人日)](合計)、作成したメジャー[参加プロジェクト一覧]を追加した結果です。

社員ごとにプロジェクトの参加件数、予定工数とあわせて、具体的なプロジェクト名も一覧化できる

 例えば、伊藤さんは5件のプロジェクトに参加し、予定工数は合計206人日です。一方、高橋さんが参加しているプロジェクトは4件ですが、予定工数は224人日です。

 予定工数は各プロジェクトの全期間にわたる計画値なので、この数値だけで現在の業務負荷を正確に判断できるわけではありませんが、各メンバーに割り当てられた作業量の合計は把握できます。

プロジェクトごとの参加メンバーを確認する

 CONCATENATEX関数は、プロジェクト名以外の文字列にも利用できます。今度は、プロジェクトごとに、参加している社員数と名前をまとめてみましょう。先ほど作成したメジャーと同じ要領で、メジャー名を「参加メンバー一覧」として、次の数式を入力します。

=CONCATENATEX(

VALUES('プロジェクト一覧'[氏名]),

'プロジェクト一覧'[氏名],

"、",

'プロジェクト一覧'[氏名],

ASC

)

 先ほどの数式から、連結する対象を[プロジェクト名]から[氏名]に変更しただけです。同じ集計範囲内に氏名が複数回登場しても、VALUES関数によって重複せずに表示できます。

 なお、「VALUES('プロジェクト一覧'[氏名])」では、同姓同名の別人を区別できません。実務で利用する場合は、社員IDなどを使って区別する工夫が必要です。

[メジャー名]に名前を付けて(ここでは「参加メンバー一覧」)、上記の数式を入力する

 以下は、[行]に[プロジェクト名]、[列]に[部署]、[値]に[氏名](カウント)と作成したメジャー[参加メンバー一覧]を追加した結果です。

プロジェクトごとに、部署から参加した人数と社員名を一覧化できる

 1つのプロジェクトに対して、どの部署から何人、誰が割り当てられているかを知りたいケースは多いでしょう。この一覧なら、ひと目でわかります。

 ピボットテーブルは、合計や平均、個数といった数値の集計だけに使うものではありません。「メジャー」を利用すれば、具体的な名前を集計結果として表示することもできます。

 今回紹介した方法は、研修ごとの受講者名や、部署別の担当業務、イベントごとの参加企業名などを一覧化したい場合にも応用できます。