Die Timeseries-Datenfunktion im ENLYZE Power BI Connector ermöglicht das Abfragen von Maschinendaten innerhalb eines definierten Zeitraums.
Dieses Tutorial zeigt, wie Zeitreihendaten basierend auf anderen Datenstrukturen, die Zeiträume definieren (z. B. Produktionsaufträge), abgefragt und aggregiert werden, um Key Performance Indicators (KPIs) zu berechnen.
Anwendungsfall: Berechnung der spezifischen Energie pro Produktionsauftrag
Hier wird der Prozess zur Berechnung des spezifischen Energie für jeden Auftrag in einem Werk mit fünf Produktionslinien beschrieben. Dazu werden Maschinenvariablen benötigt, die Folgendes messen:
Linien-Durchsatz (verarbeitete Produktmenge)
Wirkleistung (Energieverbrauch pro Produktionslinie)
Schrittübersicht
Zeitreihendaten für Durchsatz und Wirkleistung während jedes Produktionsauftrags abfragen.
Die Daten aggregieren, um die Gesamtproduktionsmenge und den gesamten Energieverbrauch pro Auftrag zu erhalten.
Anschließend lässt sich die spezifische Energie berechnen:
1. Erforderliche Daten importieren
Folgende Elemente aus dem ENLYZE Power BI Connector werden benötigt:
Die Timeseries-Funktion
Die Variables-Tabelle
Die Production Runs-Tabelle
Hinweis
Die Production Runs-Tabelle ist spezifisch für dieses Beispiel. Jede Tabelle mit separaten start- und end-Zeitstempeln kann stattdessen verwendet werden.
2. Relevante Variablen filtern
Bevor Zeitreihendaten abgefragt werden, müssen die relevanten Maschinenvariablen gefiltert werden.
Eine Kopie der Variables-Tabelle erstellen und FilteredVariables nennen.
Die Tabelle filtern und nur die für die Analyse relevanten Variablen beibehalten.
Die Variablen nach display_name sortieren
3. Zeitreihendaten pro Auftrag abfragen
Als Nächstes wird eine modifizierte Version der Production Runs-Tabelle erstellt, die eine zusätzliche Spalte für Zeitreihendaten enthält.
Tipp
Vorher die Production Runs-Tabelle filtern, um nur relevante Läufe einzubeziehen. Dies reduziert die Verarbeitungszeit.
Da jeder Auftrag einer bestimmten Maschine zugeordnet ist, wird eine Funktion benötigt, um die korrekten Variablen für jede Maschine abzurufen.
Eine leere Abfrage erstellen und fxGetMachineVariables nennen.
Eine Power Query M-Funktion definieren, die FilteredVariables basierend auf der Maschinen-UUID filtert:
3.2. Hilfsfunktion fxTimeseriesForRuns erstellen
Nun wird eine Funktion definiert, die die Timeseries-Abfrage auf jede Zeile der Production Runs-Tabelle anwendet.
Eine leere Abfrage erstellen und fxTimeseriesForRuns nennen.
Eine Power Query M-Funktion definieren, die Zeitreihendaten für jeden Auftrag abruft:
3.3. Tabelle TimeseriesPerProductionRun erstellen
Eine leere Abfrage erstellen und TimeseriesPerProductionRun nennen.
Die fxTimeseriesForRuns-Funktion auf die Production Runs-Tabelle anwenden:
Die resultierende TimeseriesPerProductionRun-Tabelle enthält alle Aufträge mit einer zusätzlichen timeseries-Spalte, in der die zugehörigen Zeitreihendaten gespeichert sind.
4. Zeitreihendaten für Visualisierungen aggregieren
Nun werden die abgerufenen Zeitreihendaten aggregiert, um Gesamt-Durchsatz und Gesamtenergieverbrauch pro Auftrag zu berechnen.
= (machine as text) as table =>
let
SelectedVariables = Table.SelectRows(FilteredVariables, each [machine] = machine)
in
SelectedVariables
= (runs as table) as table =>
let
TimeseriesForRuns = Table.AddColumn(
runs,
"timeseries",
each Record.ToList(
Timeseries(
fxGetMachineVariables([machine]),
[start] as datetimezone,
[end] as datetimezone,
"1h",
"avg"
){0}
){0}
)
in
TimeseriesForRuns
= fxTimeseriesForRuns(#"Production Runs")
= (RunsWithTimeseries as table) =>
let
AggregatedThroughput = Table.AddColumn(
RunsWithTimeseries,
"total_throughput",
each List.Sum(Table.Column([timeseries], Table.ColumnNames([timeseries]){1}))
),
AggregatedEnergy = Table.AddColumn(
AggregatedThroughput,
"total_energy",
each List.Sum(Table.Column([timeseries], Table.ColumnNames([timeseries]){2}))
),
// Set column types to number
ResultWithTypes = Table.TransformColumnTypes(AggregatedEnergy, {
{"total_throughput", type number},
{"total_energy", type number}
})
in
ResultWithTypes