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