使用状況
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_where
は order
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 つだけ含めます。必要に応じて AND
と OR
を使用して、必要な動作をすべて 1 つの sql_always_where
にまとめます。
知っておくべきこと
SQL HAVING 句にも同様のパラメータがある
sql_always_where
にも、sql_always_having
とよく似たパラメータがあり、同じように機能しますが、条件を WHERE
句ではなく HAVING
句に適用します。
ユーザーが変更できて削除できないフィルタが必要な場合は、always_filter
を検討してください。
ユーザーに特定のフィルタセットの使用を必須にしつつ、デフォルト値を変更する必要がある場合は、always_filter
を試してください。
変更できないユーザー固有のフィルタが必要な場合は、access_filter
を検討してください。
各ユーザーに固有の(変更できない)フィルタを Explore で使用する場合は、access_filter
を使用します。