フィルタ

レポートにフィルタが含まれており、リクエストされたすべてのフィールドでフィルタ処理されていないデータがコミュニティ コネクタにより返される場合、フィルタはデータポータルによってコネクタのレスポンスに適用されます。ただし、コミュニティ コネクタレベルでフィルタを適用すると、場合によってはパフォーマンスが大幅に向上します。フィルタ情報は getData() リクエスト オブジェクトで渡され、コネクタでこの情報を使用してデータをフィルタ処理してから、データポータルに送り返すことができます。

たとえば、SQL データベースに接続する場合、WHERE 句でフィルタを直接適用(下図の B3)すると、データポータルに返される行の数を大幅に減らすことができます。これにより、処理してデータポータルに送信する必要があるデータの量(B5)が制限されます。

フィルタのフローチャート

フィルタを適用するルール

  1. すべてのフィルタが適用されるか、まったく適用されないかのいずれかです。詳しくは、サポートされていないフィルタを参照してください
  2. レスポンスに forFilterOnly フィールドを含めないでください。
  3. request.dimensionsFilters 配列の各エントリを AND でつなぎます。

    たとえば、次のフィルタの場合、コネクタには「countryUSAかつsourceSocial」の値が含まれます。

    {
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["USA"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }],
            [{
              "fieldName": "source",
              "values": ["Social"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }]
          ]
        }
        
  4. request.dimensionsFilters 配列の各サブ配列を OR でつなぎます。

    たとえば、次のフィルタの場合、コネクタには「countryUSAまたはcountryCanada」の値が含まれます。

    {
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["Canada"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }, {
              "fieldName": "country",
              "values": ["USA"],
              "type": "INCLUDE",
              "operator": "EQUALS"
            }]
          ]
        }
        

次の例は、レポート ユーザーがフィルタを定義するときから、コミュニティ コネクタがフィルタ処理されたデータを返すときまでのフロー全体を示しています。

フィルタの例

  1. レポート ユーザーは 2 つのフィルタを作成しました。

    1. country は、Canada, USAIN_LIST になります。
    2. source は、Social, OrganicIN_LIST になります。
  2. レポート ユーザーは、source ディメンションと sessions 指標でグラフ コンポーネントを設定しました。

  3. getData() が、次のリクエスト オブジェクトでデータポータルによって実行されます。

    {
          "fields": [
            {"name": "source"},
            {"name": "sessions"},
            {"name": "country", "forFilterOnly": true}
          ],
          "dimensionsFilters": [
            [{
              "fieldName": "country",
              "values": ["Canada", "USA"],
              "type": "INCLUDE",
              "operator": "IN_LIST"
            }],
            [{
              "fieldName": "source",
              "values": ["Social", "Organic"],
              "type": "INCLUDE",
              "operator": "IN_LIST"
            }]
          ]
        }
        
  4. コネクタはフィルタ処理されたデータでレスポンスします。

    たとえば上記の例では、「country"Canada" または "USA"」かつsource"Social" または "Organic"」である sourcesessions が返されます。すべてのフィルタが正常に適用されたため、filtersAppliedtrue に設定します。

元のデータ

source sessions country
Social 60 USA
Social 50 Canada
Social 40 UK
Organic 90 USA
Organic 80 Canada
Organic 70 UK
Newspaper 30 USA
Newspaper 20 Canada
Newspaper 10 UK

フィルタされたデータ

source sessions
Social 60
Social 50
Organic 90
Organic 80

getData() レスポンス

{
      "schema": [
        {"name": "source",   "dataType": "STRING"},
        {"name": "sessions", "dataType": "NUMBER"},
      ],
      "rows": [
        {"values": ["Social", 60]},
        {"values": ["Social", 50]},
        {"values": ["Organic", 90]},
        {"values": ["Organic", 80]}
      ],
      "filtersApplied": true
    }
    

サポートされていないフィルタ

コネクタがリクエスト内のフィルタをひとつでも適用できない場合、フィルタは実行されません。リクエストされたすべてのフィールド(forFilterOnly フィールドを含む)を返し、レスポンスの filtersApplied キーを false に設定します。

例:

{
      "schema": [
        {"name": "source",   "dataType": "STRING"},
        {"name": "sessions", "dataType": "NUMBER"},
        {"name": "country",  "dataType": "STRING"}
      ],
      "rows": [
        {"values": ["Social", 60, "USA"]},
        {"values": ["Social", 50, "Canada"]},
        {"values": ["Social", 40, "UK"]},
        {"values": ["Organic", 90, "USA"]},
        {"values": ["Organic", 80, "Canada"]},
        {"values": ["Organic", 70, "UK"]},
        {"values": ["Newspaper", 30, "USA"]},
        {"values": ["Newspaper", 20, "Canada"]},
        {"values": ["Newspaper", 10, "UK"]},
      ],
      "filtersApplied": false
    }