Bei Dialekten, die dies unterstützen, können Sie mit der Funktion für benutzerdefinierte Kalender in Looker einen benutzerdefinierten Kalender in Ihrer Datenbank definieren, z. B. einen bestimmten Geschäfts- oder Einzelhandelskalender, und den Kalender dann auf eine datumsbasierte Dimensionsgruppe in Ihrem LookML-Modell anwenden. Ihre Nutzer können dann Explore-Abfragen mit Ihren benutzerdefinierten Zeiträumen wie custom_week, custom_period erstellen, als wären es Standardzeiträume.
Vorbereitung
Bevor Sie benutzerdefinierte Kalender verwenden, müssen die folgenden Voraussetzungen erfüllt sein:
- Sie benötigen eine Looker-Verbindung zu einem Dialekt, der benutzerdefinierte Kalender unterstützt.
- Sie müssen in Ihrer Datenbank eine Kalendertabelle erstellen, die Sie dann in Looker als Ansicht modellieren können. Looker verwendet die Kalendertabelle in Ihrer Datenbank, um benutzerdefinierte Zeiträume zu berechnen. Weitere Informationen finden Sie im Abschnitt Kalendertabelle in der Datenbank erstellen.
- Ihr LookML-Projekt muss die neue LookML-Laufzeit verwenden. Wenn die Legacy-Funktion Legacy-LookML-Laufzeit verwenden auf Ihrer Instanz aktiviert ist, müssen Sie die Anweisung
new_lookml_runtime: yesin die Manifestdatei Ihres Projekts einfügen.
Benutzerdefinierten Kalender erstellen
Wenn Sie einen benutzerdefinierten Kalender implementieren möchten, müssen Sie die folgenden allgemeinen Schritte ausführen, die in den nächsten Abschnitten beschrieben werden:
- Kalendertabelle in der Datenbank erstellen
- Benutzerdefinierte Kalenderansicht in LookML definieren
- Benutzerdefinierte Kalender-Dimensionsgruppe erstellen
Kalendertabelle in der Datenbank erstellen
Um Datumsangaben für benutzerdefinierte Kalender zu berechnen, benötigt Looker eine dedizierte Kalendertabelle in Ihrer Datenbank, in der Ihre benutzerdefinierten Zeiträume definiert sind. Ihre Tabelle muss eine Referenzdatumsspalte mit dem Standardkalenderdatum enthalten. Looker verknüpft Ihre Kalendertabelle mit Ihren Datentabellen (z. B. einer orders-Tabelle) basierend auf der Referenzdatumsspalte.
Die Spaltennamen in der Kalendertabelle sind flexibel. Wenn Sie die benutzerdefinierte Kalenderansicht in LookML definieren, verwenden Sie den Block calendar_definition, um die Spalten in Ihrer Datenbank Standardnamen für benutzerdefinierte Zeiträume zuzuordnen.
Das folgende Beispiel zeigt ein Tabellenschema für eine Kalendertabelle mit dem Namen fiscal_calendar_table.
| Spaltenname | Datentyp | Beschreibung |
|---|---|---|
reference_date |
DATE |
Das Standardkalenderdatum (z. B. „2023-01-01“). Wird für die Teilnahme verwendet. Sollte ein eindeutiger Schlüssel oder Primärschlüssel sein. |
fiscal_day_num |
INTEGER |
Das numerische benutzerdefinierte Datum oder der ordinale Tag des Jahres (z. B. 1). |
fiscal_year |
VARCHAR |
Das Geschäftsjahr (z. B. „FY2023“). |
fiscal_year_num |
INTEGER |
Das numerische Geschäftsjahr (z. B. 2023). |
fiscal_quarter_of_year |
VARCHAR |
Das Geschäftsquartal (z. B. „FQ1“). |
fiscal_quarter_of_year_num |
INTEGER |
Das numerische Geschäftsquartal (z. B. 1). |
fiscal_week_of_year |
VARCHAR |
Die Finanzwoche des Jahres (z. B. „Woche01“, „FW01“). |
fiscal_week_of_year_num |
INTEGER |
Die numerische Steuerwoche des Jahres (z. B. 1). |
fiscal_period_of_year |
VARCHAR |
Ein benutzerdefinierter Zeitraumname (z. B. „P01“). |
fiscal_period_of_year_num |
INTEGER |
Der numerische benutzerdefinierte Zeitraum (z. B. 1). |
season |
VARCHAR |
Ein benutzerdefinierter Name für die Jahreszeit (z. B. „Winter“). |
season_num |
INTEGER |
Die numerische benutzerdefinierte Saison (z. B. 1). |
prev_week_num |
INTEGER |
Der Ordinalwert für die vorherige Woche (z. B. 52 oder 53). Looker benötigt diesen Wert, um periodenübergreifende Messwerte zu berechnen, wenn die aktuelle Woche 1 ist und die vorherige Woche in Ihrem Kalender nicht 52 ist. prev_week_num ist nur erforderlich, wenn Sie Messwerte für den Vergleich von Zeiträumen mit benutzerdefinierten Kalendern verwenden möchten und Ihr benutzerdefinierter Kalender nicht 52 Wochen hat. |
prev_day_num |
INTEGER |
Der Ordinalwert für den Vortag (z. B. 364 oder 371). Looker benötigt diesen Wert, um periodenübergreifende Messwerte zu berechnen, wenn der aktuelle Tag 1 ist und der vorherige Tag in Ihrem Kalender nicht 364 ist. prev_day_num ist nur erforderlich, wenn Sie Messwerte für den Vergleich von Zeiträumen mit benutzerdefinierten Kalendern verwenden möchten und Ihr benutzerdefinierter Kalender nicht 364 Tage hat. |
Hier sind einige Beispielzeilen aus der Tabelle fiscal_calendar_table:
reference_date |
fiscal_day_num |
fiscal_year |
fiscal_year_num |
fiscal_period |
fiscal_period_num |
prev_week_num |
prev_day_num |
|---|---|---|---|---|---|---|---|
2023-12-25 |
359 |
FY2024 |
2024 |
P01 |
1 |
51 |
358 |
2023-12-26 |
360 |
FY2024 |
2024 |
P01 |
1 |
51 |
359 |
2024-01-01 |
1 |
FY2024 |
2024 |
P02 |
2 |
52 |
364 |
2024-01-02 |
2 |
FY2024 |
2024 |
P02 |
2 |
52 |
1 |
Benutzerdefinierte Kalenderansicht in LookML definieren
Nachdem Sie eine Kalendertabelle in Ihrer Datenbank erstellt haben, müssen Sie eine LookML-Ansicht erstellen, um die Kalendertabelle der Datenbank zu modellieren.
Die Ansichtsdatei für den benutzerdefinierten Kalender muss Folgendes enthalten:
- Der Parameter
sql_table_name, der auf die benutzerdefinierte Kalendertabelle in Ihrer Datenbank verweist. - Der Block
calendar_definition, um die Spalten Ihrer Tabelle den benutzerdefinierten Zeitraumtypen von Looker zuzuordnen. dimension-Parameter, um die Spalten der benutzerdefinierten Kalendertabelle in Ihrer Datenbank zu modellieren.
Hier sehen Sie eine Ansichtsbeispieldatei mit dem Namen fiscal_calendar.view.lkml, die das Beispiel fiscal_calendar_table modelliert:
view: fiscal_calendar {
sql_table_name: fiscal_calendar_table ;;
calendar_definition: {
reference_date: reference_date
timeframe_mapping: {
custom_year: fiscal_year
custom_quarter: fiscal_quarter_of_year
custom_date: fiscal_date
custom_week: fiscal_week_of_year
custom_period: fiscal_period_of_year
custom_season: season
}
timeframe_ordinal_mapping: {
custom_year: fiscal_year_num
custom_quarter: fiscal_quarter_of_year_num
custom_date: fiscal_day_num
custom_week: fiscal_week_of_year_num
custom_period: fiscal_period_of_year_num
custom_season: season_num
}
previous_ordinal_mapping: {
custom_week: prev_week_num
custom_date: prev_day_num
}
}
dimension: reference_date {
type: date
primary_key: yes
sql: ${TABLE}.reference_date ;; # Assuming column name is reference_date
}
dimension: fiscal_date {
type: string
sql: FORMAT_TIMESTAMP('%Y-%m-%d', ${TABLE}.reference_date) ;;
}
dimension: fiscal_day_num {
type: number
sql: ${TABLE}.fiscal_day_num ;;
}
dimension: fiscal_year {
type: string
sql: ${TABLE}.fiscal_year ;;
}
dimension: fiscal_year_num {
type: number
sql: ${TABLE}.fiscal_year_num ;;
}
# ... other dimensions for quarters, weeks, periods, seasons, etc. ...
# Example placeholder dimensions for unused timeframes
dimension: season {
type: string
sql: 'N/A' ;;
hidden: yes
}
dimension: season_num {
type: number
sql: 0 ;;
hidden: yes
}
}
Weitere Informationen zu den calendar_definition-Parametern finden Sie auf der Parameterseite zu calendar_definition.
Benutzerdefinierte Kalenderdimensionsgruppe erstellen
Nachdem Sie eine Kalendertabelle in Ihrer Datenbank erstellt und die Datenbankkalendertabelle in LookML modelliert haben, können Sie eine Dimensionsgruppe vom Typ type: custom_calendar erstellen, die auf der benutzerdefinierten Kalenderansicht basiert.
Hier ist ein Beispiel für eine Ansichtsdatei mit dem Namen orders.view.lkml, die eine benutzerdefinierte Kalenderdimensionsgruppe definiert.
include: "/views/fiscal_calendar.view"
view: orders {
sql_table_name: public.orders ;;
dimension_group: created {
type: custom_calendar
# Optional list of allowed timeframes
custom_timeframes: [
custom_date,
custom_week,
custom_year
]
sql: ${TABLE}.created_at ;;
based_on_calendar: fiscal_calendar # This links to your calendar view
}
}
Mit dieser LookML erstellt Looker automatisch einen neuen Satz benutzerdefinierter Zeiträume für die Dimensionsgruppe created (z. B. „Geschäftsjahr“, „Geschäftswoche“). Nutzer können diese Felder dann zum Erkunden, Berichten und Filtern verwenden.
Weitere Informationen zum Erstellen einer Dimensionsgruppe für benutzerdefinierte Kalender finden Sie auf der Dokumentationsseite dimension_group.
Wichtige Punkte
Beachten Sie die folgenden Einschränkungen für benutzerdefinierte Kalender:
- Gefilterte Messwerte: Benutzerdefinierte Kalender werden für gefilterte Messwerte nicht unterstützt. Sie können im Parameter
filterseines Messwerts nicht auf eine benutzerdefinierte Kalenderdimension verweisen. - Erweiterte Filter: Benutzerdefinierte Kalender werden in erweiterten Filtern nicht unterstützt. Sie können in Looker-Filterausdrücken nicht auf eine benutzerdefinierte Kalenderdimension verweisen.
- Symmetrische Aggregate:In einigen komplexen Join-Szenarien werden symmetrische Aggregate für Abfragen mit benutzerdefinierten Kalenderdimensionen möglicherweise nicht vollständig unterstützt.
- Dimensionsbefüllung: Looker kann fehlende Datumsangaben für benutzerdefinierte Kalenderdimensionen nicht mit der Dimensionsbefüllung ergänzen.
- Filtern über Kalendergrenzen hinaus:Wenn ein Filter auf einen benutzerdefinierten Zeitraum angewendet wird, der zu einem Datum führt, das nicht im Kalender enthalten ist, werden möglicherweise unerwartete Ergebnisse zurückgegeben. Das hat mit der Ordinalarithmetik zu tun, die zur Berechnung des Beginns eines Zeitraums verwendet wird.
OR-Filter:OR-Filter werden für Abfragen mit benutzerdefinierten Kalendern nicht unterstützt.- Verhalten bei der Zeitzonenumrechnung: Looker berücksichtigt die vorhandene Semantik für die Zeitzonenumrechnung. Wenn die Zeitzone der Datenbank und die Zeitzone der Abfrage übereinstimmen, wird keine Zeitzonenkonvertierung angewendet. Wenn sie nicht übereinstimmen, wendet Looker die Zeitzonenumrechnung an. Sie können dieses Verhalten überschreiben, indem Sie
convert_tz: nofür Ihre benutzerdefinierte Kalenderdimensionsgruppe angeben. - Standardsortierung:Looker wendet eine Standardsortierung auf das erste Datumsfeld an, wenn benutzerdefinierte Kalenderfelder ausgewählt sind. Der Nutzer kann dann eine andere Datensortierung angeben.
- Benutzerdefinierte Kalenderfilter:Benutzerdefinierte Kalenderdimensionen unterstützen bestimmte Filteroptionen, z. B. liegt innerhalb der letzten 3 benutzerdefinierten Jahre oder liegt innerhalb dieses benutzerdefinierten Zeitraums. Weitere Informationen finden Sie im Abschnitt Benutzerdefinierte Kalenderfilter auf der Dokumentationsseite Daten filtern und einschränken.
Unterstützte Datenbankdialekte für benutzerdefinierte Kalender
In der folgenden Tabelle ist zu sehen, welche Dialekte benutzerdefinierte Kalender in der aktuellen Looker-Version unterstützen:
| Dialekt | Unterstützt? |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13.x - 0.17.x | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| ClickHouse 26+ | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Dremio 26+ with Arrow Flight SQL | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud AlloyDB for PostgreSQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MongoSQL | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |