Nutzung
explore: view_name_1 {
join: view_name_2 {
sql_where: ${view_name_1.id} < 100 ;;
}
}
explore: view_name_1 {
join: view_name_2 {
sql_where: ${view_name_1.id} < 100 ;;
}
}
|
Hierarchy
sql_where |
Default Value
None
Accepts
A SQL WHERE clause
|
sql_where lets you apply a query restriction that users cannot change. The restriction will be inserted into the WHERE clause of the underlying SQL that Looker generates if and only if the join is used in the query. In addition to queries run by human users, the restriction will apply to dashboards, scheduled Looks, and embedded information that relies on that Explore.
The condition can be written in pure SQL, using your database's actual table and column names. It can also use Looker field references like ${view_name.field_name}, which is the preferred method, because Looker can be smarter about automatically including necessary joins. A sql_where condition is not displayed to the user, unless they look at the underlying SQL of any queries that they create.
For example, you can specify that if the join to users is used, that only users younger than 50 should be included:
explore: orders_users_under_50 {
view_name: orders
join: users {
sql_on: ${users.id} = ${orders.user_id} ;;
sql_where: ${users.age} < 50 ;;
type: left_outer
}
}
Wenn der Nutzer Orders.Count und Users.Count auswählt, wird in Looker aus diesem LookML-Code der folgende SQL-Code generiert:
SELECT
COUNT(orders.id) AS orders_count,
COUNT(DISTINCT users.id, 1000) AS users_count
FROM thelook2.orders AS orders
LEFT JOIN thelook2.users AS users ON users.id = orders.user_id
WHERE users.age < 50
LIMIT 500
OR-Logik verwenden.Wenn Sie die OR-Logik mit sql_where verwenden, müssen Sie die SQL-Bedingung in Klammern setzen. Anstatt beispielsweise Folgendes zu schreiben:
sql_where: region = 'Northeast' OR company = 'Altostrat' ;;
Sie würden Folgendes schreiben:
sql_where: (region = 'Northeast' OR company = 'Altostrat') ;;
Wenn Sie in diesem Beispiel die Klammern vergessen haben und ein Nutzer einen eigenen Filter hinzugefügt hat, könnte die generierte WHERE-Klausel so aussehen:
WHERE
user_filter = 'something' AND
region = 'Northeast' OR
company = 'Altostrat'
In diesem Fall funktioniert der vom Nutzer angewendete Filter möglicherweise nicht. Zeilen mit company = 'Altostrat' werden immer angezeigt, da die AND-Bedingung zuerst ausgewertet wird. Ohne Klammern wird nur ein Teil der sql_where-Bedingung mit dem Filter des Nutzers kombiniert. Wenn Klammern hinzugefügt wurden, würde die WHERE-Klausel stattdessen so aussehen:
WHERE
user_filter = 'something' AND
(region = 'Northeast' OR company = 'Altostrat')
Der Filter des Nutzers wird jetzt auf jede Zeile angewendet.
sql_where-AbhängigkeitenIm Allgemeinen werden Joins in Looker in der richtigen Reihenfolge implementiert, unabhängig davon, in welcher Reihenfolge sie in LookML definiert sind. Eine Ausnahme besteht bei sql_where. Wenn Sie in Ihrer sql_where-Anweisung auf ein Feld aus einem anderen Join verweisen, muss der Join, auf den Sie verweisen, vor Ihrer sql_where-Anweisung im LookML-Code definiert werden.
Hier ist beispielsweise eine sql_where-Anweisung, die auf das Feld inventory_items.id verweist, bevor inventory_items verknüpft wurde:
explore: orders {
hidden: yes
join: order_items {
sql_on: ${order_items.order_id} = ${orders.id} ;;
sql_where: ${inventory_items.id} IS NOT NULL ;;
}
join: inventory_items {
sql_on: ${inventory_items.id}=${order_items.inventory_item_id} ;;
}
}
Wenn Sie eine Abfrage in diesem Explore ausführen, gibt Looker einen Fehler zurück, dass das Feld inventory_items.id nicht gefunden werden kann.
Sie können dieses Problem jedoch beheben, indem Sie die Joins neu anordnen, sodass der im sql_where-Befehl referenzierte Join vor dem sql_where-Befehl definiert wird:
explore: orders {
hidden: yes
join: inventory_items {
sql_on: ${inventory_items.id}=${order_items.inventory_item_id} ;;
}
join: order_items {
sql_on: ${order_items.order_id} = ${orders.id} ;;
sql_where: ${inventory_items.id} IS NOT NULL ;;
}
}
Dadurch wird der Fehler verhindert, da der inventory_items-Join definiert wird, bevor auf das Feld inventory_items.id in der sql_where-Anweisung des order_items-Joins verwiesen wird.
sql_where wird nur angewendet, wenn der Join verwendet wird.Die in sql_where angegebene Abfragebeschränkung wird in die WHERE-Anweisung des zugrunde liegenden SQL-Codes eingefügt, den Looker generiert, wenn und nur wenn der Join in der Abfrage verwendet wird. Wenn Sie eine WHERE-Klausel anwenden möchten, auch wenn der Join nicht verwendet wurde, verwenden Sie stattdessen sql_always_where.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2026-02-05 (UTC).