Wenn Sie an Ihren LookML-Dateien arbeiten und mit Ihren Aktualisierungen zufrieden sind, besteht der nächste Schritt zum Bereitstellen Ihrer LookML-Änderungen darin, den LookML-Validator auszuführen, um eine vollständige Modellvalidierung durchzuführen.
Gelegentlich wird möglicherweise ein Fehler wie der folgende angezeigt:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
In diesem Beispiel bezieht sich der Fehler auf das Feld lifetime_orders in der Ansicht users. Der Fehler gibt an, dass users.lifetime_orders nicht auf das Feld user_order_facts.lifetime_orders zugreifen kann, auf das es verweist.
Debugging-Baum
Verwenden Sie den folgenden Entscheidungsbaum, um häufige Liquid-Probleme zu beheben:
In den folgenden Abschnitten werden die Szenarien im Baum genauer beschrieben.
Warum tritt dieser Fehler auf?
Es gibt mehrere Gründe, warum dieser Fehler auftreten kann:
- Das Feld, auf das Sie verweisen, ist nicht vorhanden.
-
Das Feld, auf das Sie verweisen, ist eine gesamte Dimensionsgruppe. Beispielsweise wird auf eine Dimensionsgruppe ohne angehängtes
timeframeverwiesen. - Auf das Feld kann in einigen Explores nicht zugegriffen werden, da eine Verknüpfung fehlt.
Das Feld ist nicht vorhanden
Wenn auf das Feld user_order_facts.lifetime_orders in LookML-Feldern verwiesen wird, es aber nicht als Feld selbst vorhanden ist, wird der Fehler unknown or inaccessible field angezeigt.
Sie können den Fehler beheben, indem Sie das Feld, das den Fehler auslöst, in diesem Beispiel user_order_facts.lifetime_orders, der Ansicht hinzufügen, die das betreffende Feld enthält. In diesem Fall können Sie prüfen, ob das Feld in der Ansicht user_order_facts definiert ist. Wenn es nicht vorhanden ist, können Sie es hinzufügen.
Das Feld verweist auf eine gesamte Dimensionsgruppe
Dimensionsgruppen stellen eine Gruppe von Dimensionen dar. type: time Dimensionsgruppen stellen eine Gruppe von Dimensionen für Zeiträume dar, die im Parameter timeframe definiert sind. Wenn Sie in LookML auf Dimensionsgruppen verweisen, müssen Sie den entsprechenden Zeitraum (timeframe in diesem Fall) an den Namen der Dimensionsgruppe anhängen.
Betrachten Sie beispielsweise die folgende Dimensionsgruppe:
dimension_group: created {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.created_at ;;
}
Wenn Sie in einem anderen LookML-Feld auf die Dimensionsgruppe created verweisen möchten, müssen Sie auf eine bestimmte Zeitraumdimension in der Gruppe verweisen, z. B. auf eine der folgenden:
-
date:${created_date} -
week:${created_week} -
month:${created_month}
Wenn Sie nur den Namen der Dimensionsgruppe verwenden (${created}), weiß Looker nicht, auf welchen Zeitraum Sie sich beziehen, und generiert den Fehler.
Es fehlt eine Verknüpfung
Die folgende LookML-Definition von users.lifetime_orders:
dimension: lifetime_orders {
type: number
sql: ${user_order_facts.lifetime_orders};;
}
Beachten Sie die Verwendung der Substitutionsoperatoren${}zum Verweisen auf das LookML-Felduser_order_facts.lifetime_orders.
Die Dimension lifetime_orders in der Ansicht users verweist auf das Feld lifetime_orders aus der Ansicht user_order_facts. In diesem Fall wird der Fehler ausgelöst, weil es in der Modelldatei Instanzen gibt, in denen die Ansicht users mit einem Explore verknüpft ist, ohne dass auch user_order_facts verknüpft wurde.
Wenn Sie sehen möchten, welche Explores das Problem verursachen, können Sie die Vorkommen maximieren, die in der Fehlermeldung hervorgehoben sind:
Diese Vorkommen zeigen, dass die Explores order_items und orders im Modell ecommerce den Fehler verursachen. Diese Explores haben viele Verknüpfungen und sind in der Modelldatei wie folgt definiert:
explore: orders {
join: users { # users joined without user_order_facts
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
}
explore: order_items {
join: inventory_items {
relationship: many_to_one
sql_on: ${order_items.inventory_item_id} = ${inventory_items.id}
}
join: orders {
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id}
}
join: users { # users joined without user_order_facts
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
}
In beiden Explores ist die Ansicht users verknüpft, ohne dass auch die Ansicht user_order_facts verknüpft ist. Daher kann in keinem Explore auf das Feld user_order_facts.lifetime_orders zugegriffen werden. Wenn Sie versuchen, das Feld users.lifetime_orders (das auf user_order_facts.lifetime_orders verweist) in einem der beiden Explores abzufragen, wird der Fehler ausgelöst.
Der LookML-Validator warnt Sie, dass Nutzer den Fehler erhalten, wenn sie users_order_facts.lifetime_orders abfragen. Das Feld users.lifetime_orders löst in einem Explore, mit dem auch user_order_facts verknüpft ist, keinen Fehler aus.
Betrachten Sie beispielsweise das Explore users:
explore: users {
join: user_order_facts {
sql_on: ${users.id} = ${user_order_facts.users_id}
}
}
Hier ist user_order_facts verknüpft. Daher löst die Abfrage von users.lifetime_orders keinen Fehler aus.
Wie kann ich den Fehler beheben, wenn er durch eine fehlende Verknüpfung verursacht wird?
Wenn der Fehler durch eine fehlende Verknüpfung verursacht wird, haben Sie mehrere Möglichkeiten, ihn zu beheben:
-
Verknüpfen Sie die fehlende Ansicht in allen Fällen. Im Beispiel auf dieser Seite muss die Ansicht
user_order_factsüberall verknüpft sein, wo die Ansichtusersin einem Explore verknüpft ist. - Schließen Sie das Feld, das den Fehler verursacht, aus Explores aus, wenn Sie die fehlende Ansicht nicht verknüpfen möchten.
Fehlende Ansicht verknüpfen
Im vorherigen Beispiel kann der Fehler behoben werden, indem Sie user_order_facts mit allen Explores verknüpfen, mit denen auch users verknüpft ist. So wird sichergestellt, dass Explores auf user_order_facts.lifetime_orders zugreifen können, wenn users.lifetime_orders in einer Abfrage verwendet wird.
Im Metadatenbereich der IDE können Sie alle Explores sehen, die die Ansicht users verwenden.
Im folgenden Beispiel werden die fehlenden Ansichten verknüpft:
explore: order_items {
join: inventory_items {
relationship: many_to_one
sql_on: ${inventory_items.id} = ${order_items.inventory_item_id}
}
join: orders {
relationship: many_to_one
sql_on: ${order_items.order_id} = ${orders.id}
}
join: users {
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
join: user_order_facts { # join user_order_facts through users
relationship: many_to_one
sql_on: ${users.id} = ${user_order_facts.users_id}
}
}
Wenn Sie den LookML-Validator jetzt noch einmal ausführen, sollte dieser Fehler nicht mehr angezeigt werden.
Das Feld, das den Fehler verursacht, aus Explores ausschließen
Möglicherweise möchten Sie die Ansicht user_order_facts nicht mit allen Explores verknüpfen, mit denen users verknüpft ist. Vielleicht möchten Sie nicht, dass Nutzer im Explore orders auf die Felder aus der Ansicht user_order_facts zugreifen können, aber Sie möchten, dass Nutzer ohne Fehler auf die Felder aus der Ansicht users zugreifen können. Dazu können Sie das Feld, das den Fehler verursacht —
users.lifetime_orders — mit dem
fields Parameter aus dem orders Explore ausschließen.
Mit dem Parameter fields für Explores können Sie bestimmte Felder in ein Explore einbeziehen oder daraus ausschließen. In diesem Fall können Sie das Feld users.lifetime_orders so aus dem Explore orders ausschließen:
explore: orders {
fields: [-users.lifetime_orders] # exclude users.lifetime_orders
join: users {
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
}