Wenn Sie mit Ihren LookML-Dateien arbeiten und mit Ihren Aktualisierungen zufrieden sind, führen Sie zur Bereitstellung Ihrer LookML-Änderungen im nächsten Schritt den LookML Validator aus, um eine vollständige Modellvalidierung durchzuführen.
Gelegentlich kann eine Fehlermeldung wie die folgende angezeigt werden:
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 weist darauf hin, dass users.lifetime_orders
nicht auf das Feld user_order_facts.lifetime_orders
zugreifen kann, auf das es verweist.
Warum tritt dieser Fehler auf?
Dieser Fehler kann verschiedene Ursachen haben:
- Das Feld, auf das Sie verweisen, ist nicht vorhanden.
-
Das Feld, auf das Sie verweisen, ist eine ganze Dimensionsgruppe. Beispielsweise wird auf eine Dimensionsgruppe ohne angehängtes
timeframe
verwiesen. - Einige Explores können nicht auf das Feld zugreifen, da ein Join fehlt.
Option 1: Das Feld ist nicht vorhanden
Wenn in LookML-Feldern auf das Feld user_order_facts.lifetime_orders
verwiesen wird, es aber selbst nicht als Feld 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 dafür sorgen, dass das Feld in der Ansicht user_order_facts
definiert ist. Wenn es nicht vorhanden ist, können Sie es hinzufügen.
Option 2: Das Feld verweist auf eine ganze Dimensionsgruppe
Dimensionsgruppen stellen eine Gruppe von Dimensionen dar. type: time
-Dimensionsgruppen stellen eine Gruppe von Zeitraumdimensionen dar, die im timeframe
-Parameter definiert sind. Wenn Sie in LookML auf Dimensionsgruppen verweisen, müssen Sie die entsprechende Dimension (in diesem Fall timeframe
) an den Namen der Dimensionsgruppe anhängen.
Sehen wir uns zum Beispiel die folgende Dimensionsgruppe an:
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 Zeitrahmen-Dimension innerhalb der Gruppe verweisen, z. B. auf eine der folgenden Optionen:
-
date
:${created_date}
-
week
:${created_week}
-
month
:${created_month}
Wenn Sie versuchen, nur den Namen der Dimensionsgruppe (${created}
) zu verwenden, weiß Looker nicht, auf welchen Zeitraum Sie sich beziehen, und löst einen Fehler aus.
Option 3: Ein Join fehlt
Im Folgenden finden Sie die LookML-Definition von users.lifetime_orders
:
dimension: lifetime_orders { type: number sql: ${user_order_facts.lifetime_orders};; }
Beachten Sie, dass die Substitutionsoperatoren${}
verwendet werden, um auf das LookML-Felduser_order_facts.lifetime_orders
zu verweisen.
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, da es in der Modelldatei Instanzen gibt, in denen die Ansicht users
mit einem Explore verknüpft ist, ohne dass user_order_facts
ebenfalls verknüpft wurde.
Wenn Sie sehen möchten, welche Explores das Problem verursachen, können Sie die in der Fehlermeldung hervorgehobenen Vorkommen maximieren:
Diese Vorkommen zeigen, dass die Explores order_items
und orders
im Modell ecommerce
den Fehler verursachen. Diese Explores haben viele Joins und sind in der Modelldatei so 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 wird die users
-Ansicht ohne gleichzeitig die user_order_facts
-Ansicht verbunden. Daher kann kein Explore auf das Feld user_order_facts.lifetime_orders
zugreifen. Wenn Sie versuchen, das Feld users.lifetime_orders
, das auf user_order_facts.lifetime_orders
verweist, in einem der beiden Explores abzufragen, würden Sie den Fehler auslösen.
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 keinen Fehler in einem Explore aus, mit dem user_order_facts
ebenfalls verknüpft ist.
Sehen wir uns beispielsweise das Explore users
an:
explore: users { join: user_order_facts { sql_on: ${users.id} = ${user_order_facts.users_id} } }
Hier ist user_order_facts
verknüpft, sodass die Abfrage von users.lifetime_orders
keinen Fehler auslöst.
Wie kann ich den Fehler beheben, der durch einen fehlenden Join verursacht wird?
Wenn der Fehler durch einen fehlenden Join verursacht wird, haben Sie mehrere Möglichkeiten, ihn zu beheben:
-
Die fehlende Ansicht in allen Supportanfragen verknüpfen. Für das auf dieser Seite verwendete Beispiel muss die Ansicht
user_order_facts
dort verbunden werden, wo die Ansichtusers
in einem Explore verbunden wird. - Schließen Sie das Feld aus, das in Explores den Fehler verursacht, wenn Sie die fehlende Ansicht nicht zusammenführen möchten.
Der fehlenden Ansicht beitreten
Im vorherigen Beispiel lässt sich der Fehler beheben, indem user_order_facts
mit allen Explores verknüpft wird, in denen users
ebenfalls verknüpft ist. Dadurch können Explores auf user_order_facts.lifetime_orders
zugreifen, wenn users.lifetime_orders
in einer Abfrage verwendet wird.
Über den Metadatenbereich in der IDE können Sie sich alle Explores ansehen, die die Ansicht users
verwenden.
Im folgenden Beispiel werden die fehlenden Ansichten zusammengeführt:
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 nicht für alle Explores, in denen users
verknüpft ist, der Ansicht user_order_facts
beitreten. Vielleicht möchten Sie beispielsweise nicht, dass Nutzer auf die Felder aus der Ansicht user_order_facts
im Explore orders
zugreifen, aber Sie möchten, dass Nutzer ohne Fehler auf die Felder aus der Ansicht users
zugreifen können. Dazu schließen Sie das Feld, das den Fehler verursacht (users.lifetime_orders
), aus dem Explore orders
aus. Verwenden Sie dazu den Parameter
fields
.
Mit dem Parameter fields
für Explores können Sie bestimmte Felder in einem Explore ein- oder ausschließen. In diesem Fall können Sie users.lifetime_orders
so aus dem orders
-Explore ausschließen:
explore: orders { fields: [ALL_FIELDS*, -users.lifetime_orders] # exclude users.lifetime_orders join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }