Views Aggregator Plus
Viewsの結果に対してクエリ後の集計を実行するViewsスタイルプラグインで、ネイティブのViewsやデータベースレベルの集計では不可能な集計機能を提供します。
views_aggregator
インストール
composer require 'drupal/views_aggregator:^2.1'
composer require 'drupal/views_aggregator:^2.0'
概要
Views Aggregator Plusは、Drupal Viewsに強力なクエリ後集計機能を追加します。データベースレベルの操作に依存するネイティブのViews集計とは異なり、このモジュールはデータベースクエリが実行された後の結果セットに対して動作します。このアーキテクチャの違いにより、通常では不可能な集計機能が可能になります。
このモジュールは「集計オプション付きテーブル」と呼ばれる特殊なテーブルスタイルプラグインを提供し、管理者が1つのカラムの同一値に基づいて結果行をグループ化・圧縮しながら、他のカラムにさまざまな集計関数を適用できます。例えば、売上データを業種別にグループ化し、売上高を合計し、企業数をカウントできます。
主な機能には、グループメンバーの列挙(グループ内のすべての項目をリスト表示)、集計(値のカウントをテキストヒストグラムとして表示)、正規表現による行のフィルタリング、ヘッダー/フッター/キャプションに合計を表示するカラム全体の集計、カスタム集計関数の追加機能があります。このモジュールは圧縮なしのグループごとの小計をサポートしており、元の行の後に計算された小計を表示できます。
このモジュールはWebformの送信データ、Commerce 2.xのフィールド(複数通貨を含む)とよく統合され、数学的操作とフォーマットのためのTwig構文を「Global: Custom text」フィールドでサポートしています。
Features
- 生のデータベース値ではなくレンダリングされた結果に対して動作するクエリ後集計
- 同じ値を共有する複数の行を単一の集計行に折りたたむグループ化と圧縮機能
- 数学的集計関数:COUNT、SUM、AVERAGE、MEDIAN、MINIMUM、MAXIMUM、RANGE
- 文字列集計関数:Enumerate(オプションのソートと重複排除でリスト)、Tally members('値 (n)'形式の値カウント)、Display first member
- 正規表現による行フィルタリングで一致しない結果を除外
- テーブルのヘッダー、フッター、またはキャプションに合計を表示するカラム集計
- 行を圧縮せずに各グループの後に集計結果を表示する小計モード
- グループ化と圧縮機能の大文字小文字を区別しないグループ化オプション
- Webform送信データフィールドのサポート
- 単一カラムでの複数通貨を含むCommerce 2.x価格フィールドのサポート
- テーブルスタイリングオプション(bordered、condensed、hover、striped)を持つBootstrapテーマ統合
- number_format()フィルターを保持したGlobal: Custom textフィールドでのTwig構文サポート
- 集計結果でのクリックソート可能なカラム
- hook_views_aggregation_functions_info()を介したカスタム集計関数API
- 関数のパラメータサポート(区切り文字、正規表現、精度値)
Use Cases
業種別売上レポート
売上データを業種セクター別にグループ化し、業種ごとの総売上高(SUM)、企業数(COUNT)、平均取引サイズ(AVERAGE)を表示します。テーブルフッターにカラム合計を表示して全体の数値を示します。
集計付きアンケート結果
アンケート回答を質問カテゴリでグループ化し、TALLYを使用して回答分布を「回答 (カウント)」形式で表示し、どのオプションが最も人気があったかを簡単に確認できるようにします。
範囲付き在庫レポート
製品をカテゴリ別にグループ化し、カテゴリごとの価格範囲(MIN - MAX)と数量範囲を表示し、フッターに全体の範囲を表示します。
列挙付き顧客注文履歴
注文を顧客別にグループ化し、購入したすべての製品を単一のセルに列挙(アルファベット順でソートし重複を削除)して、各顧客が購入した商品の概要を素早く把握できます。
小計付き財務レポート
勘定科目カテゴリでグループ化された詳細な取引行を表示し、元の詳細行を表示したまま各カテゴリの後に合計を示す小計行を挿入します。最終的な合計行で全体の数値を表示します。
パターンによるフィルタリング結果
Filter rows機能と正規表現を使用して、テストデータや内部エントリをレポートから除外し、本番注文番号などの特定のパターンに一致する行のみを表示します。
複数通貨Commerceレポート
異なる注文が異なる通貨を使用するCommerce注文合計を集計し、モジュールが自動的に通貨ごとに個別の合計を計算し、適切にフォーマットして表示します。
Webform送信統計
Webform送信を選択フィールドでグループ化し、数値送信データフィールドの統計(カウント、平均スコアなど)を計算してWebform送信を分析します。
Tips
- 他のグループ集計関数を使用する場合は、必ず1つのフィールドにのみ「グループ化と圧縮」を割り当ててください(Filter rowsは独立して動作するため除く)
- パラメータフィールドを使用して区切り文字をカスタマイズ - デフォルトはEnumerateとTallyでは'<br/>'、Rangeでは' - '
- 大文字小文字を区別しないグループ化には、グループ化と圧縮機能のパラメータとして'case-insensitive'を入力
- カラム集計は、行をグループ化せずに合計を追加するためにグループ集計とは独立して使用可能
- Twig構文でGlobal: Custom textを使用する場合、集計結果でのフォーマットを保持するためにnumber_format()を最後のフィルターとして配置
- Counterフィールド(Global: Counter)は、ソート後に値が再計算されるため、クリックソートから自動的に除外されます
- 複数通貨のCommerce価格フィールドでは、モジュールが自動的に通貨ごとに個別の合計を計算します
Technical Details
Hooks 2
hook_views_aggregation_functions_info
カスタムのグループ集計関数とカラム集計関数を定義します。各関数はPHP関数名で識別され、グループレベルの集計(行をグループ化する際に適用)とカラムレベルの集計(合計を作成するために適用)の両方を提供できます。
hook_views_aggregation_functions_info_alter
既存の集計関数定義を変更します。ラベルの変更、関数の無効化、既存の集計関数のレンダリング可能設定の変更に使用します。
Troubleshooting 5
フィールドフォーマッターを「デフォルト」ではなく「プレーンテキスト」に変更してみてください。一部のフィールドタイプには、集計値とうまく機能しないフォーマッターがあります。
集計カラムはクリックソート可能ですが、ソートは集計された値に対して行われます。数値カラムの場合は、基礎となるデータが数値であることを確認してください。モジュールは可能な場合は数値として比較します('$1,000'は'$9.99'の後に来ます)。
同じフィールドに2つの集計関数を適用すると、2番目の関数は元のデータではなく1番目の関数の結果に対して動作します。独立した計算が必要な場合は、別々のフィールドの使用を検討してください。
詳細設定セクションでViewsのネイティブ集計を無効にしてください(「集計を使用:いいえ」に設定)。Views Aggregator PlusはViewsの組み込み集計機能と併用するようには設計されていません。
「カラム集計行を結果セット全体に適用」がページャー有効時に選択されている場合、モジュールは正確な合計を計算するためにすべての結果を取得する必要があります。非常に大きなデータセットの場合は、「現在のページに適用」の使用またはViewのフィルターの最適化を検討してください。