sql_always_where

使用状況

Explore: explore_name {
sql_always_where: ${created_date} >= '2017-01-01' ;;
}
階層
sql_always_where
デフォルト値
なし

許可
ディメンション名や SQL 列名を使用する SQL の WHERE 条件

特別なルール
Explore の一部ではなく、結合ビューの一部である sql_always_where で SQL 列名を参照する場合は、always_join パラメータを使用するか、代わりにフィールド名を参照することが重要です。

定義

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

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

  • ${view_name.SQL_TABLE_NAME}。別の Looker ビューまたは派生テーブルを参照します。このリファレンスでは SQL_TABLE_NAME がリテラル文字列として処理されているので、他の文字列に置き換える必要はありません。
  • ${view_name.field_name}。Looker フィールドを参照します。Looker は必要な結合を自動的に組み込めるため、SQL 列を直接参照するよりも、このメソッドを使用する方が適切です。

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

ユーザーが 2012 年 1 月 1 日より前の注文を確認できないようにする:

# Using Looker references
explore: order {
  sql_always_where: ${created_date} >= '2012-01-01' ;;
}

# Using raw SQL
explore: order {
  sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}

Periaptly Corporation のお客様情報を閲覧できないようにするには:

explore: customer {
  sql_always_where: ${name} <> 'Periaptly Corporation' ;;
}

ユーザーが Periaptly Corporation の注文を確認できないようにする:

explore: order {
  sql_always_where: ${customer.name} <> 'Periaptly Corporation' ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

一般的な課題

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

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

explore: order {
  sql_always_where: customer.name <> 'Periaptly Corporation' ;;
  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

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

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

sql_always_where: ${customer.name} <> 'Periaptly Corporation' を使用した場合は、sql_always_where: customer.name <> 'Periaptly Corporation' の代わりに Looker を使用することで、always_join を使用することなく customer を結合できます。このため、可能な限り未加工の SQL 参照ではなく、Looker のフィールド参照を使用することをおすすめします。

Explore 1 回につき sql_always_where を 1 つだけ使用する

explore 定義には sql_always_where を 1 つだけ含めます。必要に応じて ANDOR を使用して、必要な動作をすべて 1 つの sql_always_where にまとめます。

知っておくべきこと

SQL HAVING 句にも同様のパラメータがある

sql_always_where にも、sql_always_having とよく似たパラメータがあり、同じように機能しますが、条件を WHERE 句ではなく HAVING 句に適用します。

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

ユーザーに特定のフィルタセットの使用を必須にしつつ、デフォルト値を変更する必要がある場合は、always_filter を試してください。

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

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