Wenn Sie an Ihren LookML-Dateien arbeiten und mit den Änderungen zufrieden sind, führen Sie als Nächstes den LookML-Validator aus, 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.
Woran liegt dieser Fehler?
Dafür kann es mehrere Gründe geben:
- Das Feld, auf das Sie verweisen, ist nicht vorhanden.
-
Das Feld, auf das Sie verweisen, ist eine ganze Dimensionsgruppe, z. B. wird auf eine Dimensionsgruppe verwiesen, ohne dass ein angehängtes
timeframe
verwendet wird. - Das Feld ist für einige Explores nicht zugänglich, da eine Verbindung fehlt.
Option 1: Das Feld ist nicht vorhanden
Wenn in LookML-Feldern auf das Feld user_order_facts.lifetime_orders
verwiesen wird, es aber nicht als Feld vorhanden ist, wird der Fehler unknown or inaccessible field
ausgegeben.
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 user_order_facts
-Ansicht definiert ist. Ist das nicht der Fall, 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 Zeitachsendimensionen dar, die im Parameter timeframe
definiert sind. Wenn Sie in LookML auf Dimensionsgruppen verweisen, müssen Sie dem Namen der Dimensionsgruppe die entsprechende Dimension anhängen, in diesem Fall timeframe
.
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 Zeitrahmen-Dimension innerhalb 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 (${created}
) verwenden, weiß Looker nicht, auf welchen Zeitraum Sie sich beziehen, und generiert den Fehler.
Option 3: Es fehlt eine Verbindung
Hier ist die LookML-Definition von users.lifetime_orders
:
dimension: lifetime_orders { type: number sql: ${user_order_facts.lifetime_orders};; }
Beachten Sie die Verwendung der Ersetzungsoperatoren${}
, 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, weil es in der Modelldatei Instanzen gibt, in denen die Ansicht users
mit einem Explore verknüpft ist, ohne dass auch die user_order_facts
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 explorativen Datenanalysen order_items
und orders
im Modell ecommerce
den Fehler verursachen. Diese Explores haben viele Joins und werden 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 Ansicht users
ohne die Ansicht user_order_facts
verknüpft. Daher kann kein Explore auf das Feld user_order_facts.lifetime_orders
zugreifen. Wenn Sie versucht haben, 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 beim Abfragen von users_order_facts.lifetime_orders
den Fehler erhalten. Das Feld users.lifetime_orders
löst in einem Explore, mit dem user_order_facts
ebenfalls verbunden ist, keinen Fehler aus.
Ein Beispiel ist die users
-Erkundung:
explore: users { join: user_order_facts { sql_on: ${users.id} = ${user_order_facts.users_id} } }
Hier ist user_order_facts
verknüpft, sodass eine Abfrage für users.lifetime_orders
keinen Fehler auslöst.
Wie kann ich den Fehler beheben, wenn er durch einen fehlenden Join verursacht wird?
Wenn der Fehler durch ein fehlendes Join verursacht wird, können Sie ihn auf verschiedene Arten beheben:
-
Fügen Sie die fehlende Ansicht allen Fällen hinzu. Achten Sie bei dem Beispiel auf dieser Seite darauf, dass die
user_order_facts
-Ansicht überall dort verbunden ist, wo dieusers
-Ansicht in einem Explore verbunden ist. - Schließen Sie das Feld, das den Fehler verursacht, aus Explores aus, wenn Sie die fehlende Ansicht nicht zusammenführen möchten.
Fehlende Ansichten zusammenführen
Im obigen Beispiel kann der Fehler behoben werden, indem user_order_facts
mit allen Explores zusammengeführt wird, mit denen auch users
zusammengeführt ist. So können explorative Datenanalysen auf user_order_facts.lifetime_orders
zugreifen, wenn users.lifetime_orders
in einer Abfrage verwendet wird.
Im Metadatenbereich in der IDE können Sie alle Explores aufrufen, in denen die Ansicht users
verwendet wird.
Im folgenden Beispiel werden die fehlenden Datenansichten 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 auftreten.
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, in denen users
verknüpft ist. Vielleicht möchten Sie beispielsweise nicht, dass Nutzer im Explore orders
auf die Felder der Ansicht user_order_facts
zugreifen, aber ja, dass sie fehlerfrei auf die Felder der Ansicht users
zugreifen. Dazu können Sie das Feld, das den Fehler verursacht, also users.lifetime_orders
, mit dem Parameter fields
aus dem orders
-Explore ausschließen.
Mit dem Parameter fields
für Explores können Sie bestimmte Felder in ein Explore aufnehmen oder daraus ausschließen. In diesem Fall können Sie das Feld users.lifetime_orders
aus dem Explore orders
so 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} } }