sql_always_having

用途

explore: explore_name {
  sql_always_having: ${count} >= 100 ;;
}
階層
sql_always_having
デフォルト値
なし

許可
指標名や SQL 列名を使用する SQL HAVING 条件

特別なルール
sql_always_having で参照している SQL 列名が、Explore の一部ではなく、結合されたビューの一部である場合は、always_join パラメータを使用するか、フィールド名を参照することが重要です。

定義

sql_always_having を使用すると、ユーザーが変更できないクエリ制限を適用できます。この制限は、sql_always_having が使用されている Explore のすべてのクエリについて、Looker が生成する基盤となる SQL の HAVING 句に挿入されます。ユーザーが実行するクエリ以外にも、ダッシュボード、スケジュール化されたLook、そのExploreに依存する組み込まれた情報などに適用されます。

条件は、データベースの実際のテーブル名と列名を使用して、純粋な SQL で記述できます。また、次のような Looker 参照を使用することもできます。

  • ${view_name.SQL_TABLE_NAME}。別の Looker ビューまたは派生テーブルを参照します。この参照の SQL_TABLE_NAME はリテラル文字列です。置き換える必要はありません。
  • ${view_name.field_name}: Looker フィールドを参照します。この方法を使用すると、Looker が必要な結合を自動的に含めることができるため、SQL 列を直接参照するよりも優れています。

sql_always_having 条件は、ユーザーが作成するクエリの基盤となる SQL を確認しない限り、ユーザーには表示されません。

注文数が 100 件未満のグループをユーザーが閲覧できないようにする:

# Using Looker references
explore: order {
  sql_always_having: ${count} >= 100 ;;
}

# Using raw SQL
explore: order {
  sql_always_having: COUNT(*) >= 100 ;;
}

収益が 1,000 ドル未満のグループをユーザーが確認できないようにする:

explore: customer {
  sql_always_having: ${total_revenue} >= 1000 ;;
}

顧客数が 100 人未満のグループをユーザーが確認できないようにします。

explore: order {
  sql_always_having: ${customer.count} >= 100 ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

一般的な課題

生の SQL を使用する場合は、always_join の使用が必要になることがあります。

sql_always_having で参照している SQL 列名が、Explore の一部ではなく結合されたビューの一部である場合は、always_join パラメータを使用することが重要です。次の例を考えてみましょう。

explore: order {
  sql_always_having: SUM(customer.visits) >= 100 ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

この場合、sql_always_havingorder Explore ではなく、結合された customer ビューの列を参照しています。sql_always_having はすべてのクエリに適用されるため、customer もすべてのクエリで結合することが重要です。

Looker はクエリの SQL を生成する際、可能な限りクリーンな SQL の作成を試み、ユーザーが選択したフィールドに必要な結合のみを使用します。この場合、ユーザーが顧客フィールドを選択した場合にのみ、Looker は customer を結合します。always_join を使用すると、結合を強制的に実行できます。

sql_always_having: SUM(customer.visits) >= 100 の代わりに sql_always_having: ${customer.total_visits} >= 100 を使用した場合、Looker は always_join を使用しなくても customer 結合を作成します。このため、可能な限り、未加工の SQL 参照ではなく Looker フィールド参照を使用することをおすすめします。

Explore ごとに 1 つの sql_always_having のみを使用する

explore 定義に sql_always_having は 1 つだけ指定する必要があります。必要に応じて ANDOR を使用して、必要な動作をすべて 1 つの sql_always_having にまとめます。

知っておくべきこと

SQL の WHERE 句にも同様のパラメータがあります。

sql_always_having と非常によく似たパラメータとして sql_always_where があります。これは同じように動作しますが、HAVING 句ではなく WHERE 句に条件を適用します。

ユーザーが変更できるが削除できないフィルタが必要な場合は、always_filter を検討してください。

特定のフィルタセットをユーザーに強制的に使用させたいが、デフォルト値は変更できるようにしたい場合は、always_filter を試してください。

変更できないユーザー固有のフィルタが必要な場合は、access_filter を検討してください。

Explore に各ユーザーに固有のフィルタを設定し、変更できないようにする場合は、access_filter を使用します。