エクセルピボット 計算の種類 DAX関数式_12_順位

公開日 2023年2月19日 最終更新日 2023年2月19日

データについて

<無料> 建築着工統計調査_表1_用途別_全国_月次 (列 – 複数値形式)

政府統計の総合窓口(e-Stat)(https://www.e-stat.go.jp/
「建築着工統計調査」(国土交通省)を基にデータ製作所が作成

データをダウンロードしたページ

本稿の定義

・データテーブル : ピボットで集計する前のもとデータ
・ディメンション : 「日付」「地域」「用途」
・メジャー : 「床面積の合計 (㎡)」「建築物の数 (棟)」「工事予定額 (万円)」
 メジャーは「建物の数 (棟)」だけを使用しています。

データテーブル

コンテキストフィルターが適用されていない : 画像の左側のピボット
このように定義します。
「行」「列」ともにコンテキストがなく、メジャーを集計 (合計) している状態です。

・コンテキストフィルターが適用されている : 画像右側のピボット
 行は「用途」の「A住居専用住宅」「B住居専用準住宅」で、「日付 (年)」は「2020」「2021」「2022」のコンテキストフィルタが適用されている。
 列は「建築主」の「国」「市区町村」「都道府県」のコンテキストフィルターが適用されている。

・せルの値 : ピボットの行列がクロスしたメジャー集計値。画像でH4の値 (セルの値) は171です。

 コンテキストフィルターが適用されているされているH4のセルの値とは、
*「用途」=「A住居専用住宅」AND「日付 (年)」=「2020」AND「建築主」=「国」
 このコンテキストフィルター条件を満たすメジャーの集計 (合計) 値といえます。

・ディメンションフィルター : ディメンションのいくつかの項目を選択している状態
 ピボットは「用途」「日付 (年)」「建築主」でディメンションフィルターを適用しています。
 本稿は、常にディメンションフィルターを適用していることを前提し説明しています。説明の都度にディメンションフィルターについて記述していません。
 なお、メジャーフィルターは適用していません。

本投稿は、このような定義と、画像右側のピボットの変化をもとに解説しています。

計算の種類の前段階である集計方法は
「合計」です。
「SUM」「SUMX」のような合計値を返す集計関数を使用するという意味です。

<イメージ>
 ある会社には複数の部があります。
・ディメンションフィルター : 複数の部から営業部を選ぶ。

・コンテキストフィルター : 営業部員の性別や苗字や出身地のデータテーブルから、クロス集計表をつくる。
 行列がクロスするセルへは、男性・佐藤さん・東京出身のようなコンテキストフィルター条件を満たす値だけが入る 。女性・佐藤さん・東京出身は、その条件を満たす別のセルへ値が入る。

・メジャー集計 (合計) : 男性・佐藤さん・東京出身が2名いたら、2名の身長 (メジャー) を合計して該当するセルへ値を返す。

計算の種類 順位

 「昇順での順位」または、「降順での順位」を選択すると、基準フィールドのうちのどれかを選択できます。ここでは「日付 (年)」の昇順で説明します。

行われる計算は
 「日付 (年)」に従った順位です。「日付 (年)」には親 (上位階層) 「用途」があるので、「A居住専用住宅」と「B居住専用準住宅」ごとに値の順位を返します。

 降順での順位のときは

昇順の逆の値をを返します

DAX関数式

 現在のピボットの行は「用途」「日付 (年)」、列は「建築主」のコンテキストフィルターが適用されています.。
 現在の、行と列のコンテキストフィルターのうち、行に設定されている「日付 (年)」のコンテキストフィルター無視することで「日付 (年)」の親にあたる「用途」ごとに順位を返すことができます。

=RANKX(ALLSELECTED('データテーブル'[日付 (年)]),SUMX(RELATEDTABLE('データテーブル'),[建築物の数 (棟)]),,ASC)

RANKX : 集計した「建築物の数 (棟)」のランクを返す統計関数

ALLSELECTED : 現在の、行で使用されている「日付 (年)」のコンテキストフィルターを無視するフィルター関数

SUMX : 「建築物の数 (棟)」を合計する集計関数

RELATEDTABLE : 「日付 (年)」のコンテキストフィルターを無視しながら値を評価するリレーションシップ関数

 左側のピボットのセルB4は、
「用途」=「A住居専用住宅」AND「日付 (年)」=「2020」AND「建築主」=「国」
 このコンテキストフィルター条件を満たすメジャーの集計 (合計) 値です。
 セルB4と同様にセルB5の値もセルB6の値も、すべてのセル値は、それぞれが、それぞれのコンテキストフルタ―条件を満たすメジャーの集計 (合計) 値です。

・「用途」=「A住居専用住宅」を適用する
・「日付 (年)」=「2020」を無視する
・「建築主」=「国」は適用する

 各セルに適用されている行のコンテキストフィルター (「日付 (年)」) を無視し、行の「日付 (年)」と列の「建築主」に従っててメジャーを合計してランクを返します。

 降順の時
「ASC」を「DESC」へ変更します。

=RANKX(ALLSELECTED('データテーブル'[日付 (年)]),SUMX(RELATEDTABLE('データテーブル'),[建築物の数 (棟)]),,DESC)

結果が計算の種類のときと一致していれば成功です。