計算列と計算フィールドの使い方

ほとんどのユーザーは、Power Pivot の使い方を初めて習得するとき、結果の集計や計算がいくつかの方法で行われることに真価があることを見出します。データに数値を含む列がある場合は、ピボットテーブルまたは Power View のフィールド一覧で列を選択して、簡単に列を集計できます。事実上は数値であるため、合計、平均、カウントなど、選んだ種類の集計は自動的に行われます。これは、暗黙的メジャーと呼ばれます。暗黙的メジャーは、手早く簡単な集計ができて便利ですが、それには制約もあります。この制約は、明示的メジャー集計列によって、ほとんどの場合、解決することができます。

例を挙げてみましょう。この例では、集計列を使って、製品という名前のテーブルの行ごとに新しいテキスト値を追加します。 製品テーブルの各行には、販売している各製品に関する、あらゆる種類の情報が含まれています。 製品名、色、サイズ、ディーラー価格などの列があります。 製品カテゴリという名前の関連テーブルもあり、このテーブルには製品カテゴリ名の列が含まれています。 必要なことは、製品テーブルの各製品に、製品カテゴリ テーブルの製品カテゴリ名を組み込むことです。 製品テーブルには、次のように、製品カテゴリという名前の集計列を作成できます。

[計算済み製品カテゴリ] 列

新しい製品カテゴリの数式では RELATED DAX 関数を使って、関連テーブルである製品カテゴリにある製品カテゴリ名の列から値を取得し、その値を製品テーブルの各製品 (各行) に入力しています。

これはすぐれた例であり、集計列を使って固定値を行ごとに追加し、ピボットテーブルの行、列、フィルター領域または Power View レポートで使えるようにする方法を示しています。

別の例を挙げてみましょう。この例では、製品カテゴリの利益率を計算します。 これは一般的な状況であり、多くのチュートリアルでも扱われています。 データ モデルに売上テーブルがあり、取引データが含まれています。売上テーブルと製品カテゴリ テーブルの間には関係があります。 売上テーブルには、売上金額を含む列および経費を含む列があります。

次のように、売上高の列の値から COGS 列の値を差し引いて、利益金額を行ごとに計算する集計列を作成できます。

Power Pivot テーブルの [利益] 列

ここでピボットテーブルを作成して製品カテゴリ フィールドを列の領域に、新しい利益フィールドを値の領域にドラッグできます (PowerPivot のテーブルの列は、ピボットテーブルのフィールド一覧のフィールドです)。結果は、合計利益という名前の暗黙的メジャーです。これは、さまざまな製品カテゴリごとに利益列の値を集計した金額です。結果は次のように表示されます。

単純なピボットテーブル

この場合、利益は値のフィールドとしてのみ意味があります。 利益を列の領域に配置すると、ピボットテーブルは次のようになります。

有用な値が含まれないピボットテーブル

利益フィールドは、列、行、フィルターの領域に配置しても、有用な情報を提供しません。 値の領域の集計値としてのみ意味があります。

これまでに、利益という名前の列を作成して、売上テーブルの行ごとに利益率を計算しました。次に、利益をピボットテーブルの値の領域に追加すると、暗黙的メジャーが自動的に作成され、結果が製品カテゴリごとに計算されました。製品カテゴリの利益を実際には 2 回計算したのではないかと疑問に思った人は正解です。最初に売上テーブルの行ごとに利益を計算し、利益を値の領域に追加して、製品カテゴリごとに集計しました。利益の集計列を作成する必要はなかったのではないかと思った人も正解です。では、集計列を作成せずに利益を計算する方法はあるのでしょうか。

利益は、実際には明示的メジャーとして、さらに適切に計算されます。

とりあえず、利益の集計列は売上テーブルに残し、製品カテゴリはピボットテーブルの列に、利益は値に残して、結果を比較することにします。

売上テーブルの計算領域に、名前の競合を避けて、総利益という名前のメジャーを作成します。最終的には、これまでと同じ結果になりますが、利益の集計列はできません。

最初に、売上テーブルで売上高の列を選び、[オート SUM] をクリックして売上高の合計の示的なメジャーを作成します。明示的メジャーは、Power Pivot のテーブルの計算領域に作成するものであることに注意してください。COGS 列も同様に操作します。名前は売上高の合計COGS の合計に変更して、識別しやすくします。

PowerPivot の [オート SUM] ボタン

次の数式を使って、別のメジャーを作成します。

総利益:=[ 売上高の合計] - [ COGS の合計]

注:  この数式は、総利益:=SUM([売上高]) - SUM([COGS]) とすることもできますが、売上高の合計と COGS の合計という別個のメジャーを作成すると、ピボットテーブルでもそれを使用でき、あらゆる種類のその他のメジャーの数式で引数としてそれを使用できるようになります。

総利益の新しいメジャーの書式を通貨に変更した後で、ピボットテーブルに追加できます。

ピボットテーブル

総利益の新しいメジャーには、利益集計列を作成してからそれを値に配置した場合と同じ結果が返されます。違いは、総利益のメジャーの方がはるかに効率的であり、データ モデルがクリーンで小さくなります。その時点でピボットテーブル用に選んだフィールドのみを計算するためです。本当は、利益の集計列など、まったく必要ないのです。

この最後の部分が重要なのはなぜでしょうか。 集計列では、データ モデルにデータが追加され、データはメモリを消費します。 データ モデルを更新すると、利益列のすべての値を再計算するためにも、処理リソースが必要となります。 実際には、このようにリソースを消費する必要はありません。実際に利益を計算する必要があるのは、製品カテゴリ、地域、日付など、利益が必要なフィールドをピボットテーブルで選んだときだからです。

別の例を挙げてみましょう。 この例では集計列で結果が作成され、その結果は一見正しいようですが….

この例では、売上金額を総売上のパーセンテージとして計算します。 次のように、売上 (%) という名前の集計列を売上テーブルに作成します。

[計算済み売り上げの %] 列

この数式では、売上テーブルの行ごとに、売上高列の金額が、売上高列のすべての金額の合計で割られます。

ピボットテーブルを作成し、製品カテゴリを列に追加して、新しい売上 (%) 列を選んで値に配置すると、製品カテゴリごとに売上 (%) の合計が計算されます。

製品カテゴリの売り上げの % の合計を表示するピボットテーブル

よろしいでしょうか。 ここまでは正しいように見えます。 しかし、スライサーを追加してみましょう。 カレンダー年度を追加して、年を選びます。 この場合は 2007 を選びます。 次のような結果になります。

ピボットテーブルの [売り上げの % の合計] の正しくない結果

一見、これはまだ正しいように思えます。 しかし、パーセンテージは実際には合計で 100% になる必要があります。2007 年の製品カテゴリごとに総売上のパーセンテージが知りたいからです。 何を間違えたのでしょうか。

売上 (%) 列では、売上高列の値を売上高列のすべての値の合計で割って行ごとに割合を計算します。 集計列の値は固定です。 テーブルの行ごとの、変更できない結果です。 売上 (%) をピボットテーブルに追加すると、売上高列のすべての値の合計として集計されます。 売上 (%) 列のすべての値の合計は、常に 100% です。

ヒント:  「DAX の数式のコンテキスト」を必ず参照してください。 行レベルのコンテキストおよびフィルター コンテキスト (ここで説明していること) についてよく理解できます。

売上 (%) 集計列は、役に立たないので削除できます。その代わりにメジャーを作成すると、どのフィルターやスライサーを適用しても、総売上の割合は正しく計算されます。

前に作成した売上高合計のメジャーは、売上高列を単純に合計したものでした。総利益のメジャーでは、この列を引数として使いましたが、新しい集計フィールドでも引数として再び使います。

ヒント:  売上高の合計や COGS の合計などの明示的メジャーを作成すると、ピボットテーブルやレポートでそれ自体が役立つだけでなく、結果が引数として必要となるときは、その他のメジャーで引数としても役立ちます。これで、数式はさらに効率的になって読みやすくなります。これは適切なデータ モデリングの方法です。

次の数式を使って、新しいメジャーを作成します。

売上の合計 (%):=([売上高の合計]) / CALCULATE([売上高の合計], ALLSELECTED())

この数式では、売上高の合計の結果を売上高の合計で割り、列や行のフィルターのうちピボットテーブルで定義されているものを適用します。

ヒント:  DAX リファレンスの CALCULATE 関数と ALLSELECTED 関数を必ず参照してください。

新しい売上の合計 (%) をピボットテーブルに追加すると、次のようになります。

ピボットテーブルの [売り上げの % の合計] の正しい結果

適切になったようです。製品カテゴリごとの売上の合計 (%) は、2007 年の総売上の割合として計算されます。カレンダー年度スライサーで別の年を選んだり、複数年を選んだりした場合、製品カテゴリのパーセンテージは新しくなりますが、総計は 100% になります。別のスライサーやフィルターを追加することもできます。どのスライサーやフィルターを適用しても、売上の合計 (%) メジャーでは、常に総売上のパーセンテージが算出されます。メジャーを使うと、結果は常に、列と行のフィールド、および適用されるフィルターやスライサーによって決まるコンテキストに従って計算されます。これがメジャーの機能です。

次のガイドラインは、集計列とメジャーのどちらが特定の計算ニーズに適しているかを判断するときに役立ちます。

集計列を使う

  • 新しいデータを、ピボットテーブルの行、列、フィルターに表示するか、Power View の視覚エフェクトの軸、凡例、タイルに表示する場合は、集計列を使う必要があります。 データの通常の列と同じように、集計列はどの領域でもフィールドとして使用でき、集計列が数値である場合は、値でも集計できます。

  • 新しいデータを行の固定値にする場合。 たとえば、日付テーブルがあって日付の列が含まれており、別の列に月の番号のみを含める必要があるとします。 集計列を作成すると、日付列の日付から月の番号のみを計算できます。 たとえば、=MONTH(‘日付’[日付]) というようにします。

  • テーブルの行ごとにテキスト値を追加する場合は、集計列を使います。 テキスト値を含むフィールドは、値で集計できません。 たとえば、=FORMAT('日付'[日付],"mmmm") では、日付テーブルの日付列の日付ごとに、月の名前を取得できます。

メジャーを使う

  • 計算の結果が、ピボットテーブルで選んだその他のフィールドに常に依存する場合。

  • ある種のフィルターに基づいてカウントを計算したり、前年比や分散を計算したりというように、より複雑な計算を行う必要がある場合は、集計フィールドを使います。

  • ブックのサイズを最小限にしてパフォーマンスを最大にする場合は、可能な限り多くの計算をメジャーとして作成します。多くの場合は、すべての計算をメジャーにすると、ブックのサイズが著しく小さくなり、更新時間を短縮できます。

保持点での Profit 列と同じように、集計列を作成すると、[ピボット テーブルまたはレポートに集計する問題はありません。実際には、実際に適切な簡単に見について説明し、独自の計算を作成することをお勧めします。Power Pivot のこれら 2 つの非常に強力な機能の理解がにつれて、ことが必要になる、最も効率的に使用して正確なデータ モデルを作成することができます。おそらく学習した内容は、ここに役立ちます。その他の優れた参考存在してもできるようにするがあります。ここでは、いくつか: DAX の数式のコンテキストPower Pivot での集計、およびDAX リソース センターします。とても便利なデータ モデリングと数式の例と損益データ モデリングと分析 Excel での Microsoft Powerpivot によるサンプルが読み込まれているを持ち、高度なもう少し会計および財務プロフェッショナルに転送されるように、中にします。

注記: 

  • 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

  • この記事の英語版を参照するには、ここ をクリックしてください。Microsoft コミュニティの他のメンバーと一緒に、Community Translation Framework (CTF) を使ったこの記事の改善にご協力ください。記事内の文章にマウス ポインターを合わせて、CTF ウィジェットの [翻訳を改善します] をクリックしてください。CTF の詳細については、ここ をクリックしてください。CTF を使用すると弊社の サービス利用規約 に同意したことになります。

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×