2017-08-20 3 views
1

Ich habe Probleme zu verstehen, wenn Spotfire bedingte Berechnungen zwischen beliebigen Zeilen erlaubt, die numerische Daten enthalten, die über Datengruppen wiederholt werden. Ich konnte nichts finden, um mich auf eine richtige Lösung zu bringen.Spotfire - berechnete Spalte mit Zeilenverhältnissen basierend auf der Bedingung

Kontext (vereinfacht): Ich habe Daten aus einem Sensor Berichtstatus eines Prozesses und diese Daten werden in Bursts/Gruppen gruppiert, die eine Messung darstellen, die jeweils einige Minuten dauert. Innerhalb jedes Bursts misst der Sensor ein Signal und wenn ein vordefiniertes Merkmal (Signalform) erkannt wurde, gibt der Sensor einen berechneten Wert aus, V quantifiziert dieses Merkmal und meldet auch eine RunTime, bei der dies geschah.

Also im Wesentlichen habe ich drei Spalten: Burst-Nummer, eine Reihe von RTs innerhalb dieser Burst und Werte mit diesen RTs verbunden. Ich muss eine berechnete Spalte hinzufügen, um ein Verhältnis von Werten für Zeilen zu machen, wobei RT gleich einer bestimmten Zahl ist, sagen wir 1,89 und 2,76.

example of data table

Die hohe Logik wäre:

Wenn ein Wert bei 1,89 Laufzeit existiert und ein Wert vorhanden auf 2,76 Laufzeit dann das Verhältnis dieser Werte berechnen. Wiederholen Sie für jeden Burst. Ich verstehe, ich kann die Berechnung über Gruppen mit OVER-Operator wiederholen, aber ich habe mit Logik innerhalb jeder Gruppe zu kämpfen ... Alle Tipps würden wir uns freuen. Vielen Dank!

Antwort

0

Als Erstes müssen Sie eine Bestellung auf Ihren Datensatz anwenden. Ich nehme an, die Beispieldaten abgeschlossen ist, und umfasst die Fälle, in Ihre realen Daten, damit wir eine berechnete Spalte erstellen:

RowID() as [ROWID] 

Sobald dies geschehen ist, können wir eine berechnete Spalte erstellen, die Ihr Verhältnis über seinen jeweiligen berechnen wird Gruppen. Nur eine Anmerkung, Ihr B4 Beispiel ist falsch im Vergleich zu den anderen Gruppen. Das heißt, Sie haben Ihren Zähler und Nenner umgekehrt.

If(([RT]=1.89) or ([RT]=2.76),[Value]/Max([Value]) OVER (Intersect([Burst],Previous([ROWID])))) 

diese nach unten brechen ...

  • If(([RT]=1.89) or ([RT]=2.76), schränkt die Zeilen in denen die RT = 1.89 or 2.76.
  • Als nächstes kommt die Auswertung, wenn die obige Bedingung TRUE ist
  • [Value]/Max([Value]) OVER (Intersect([Burst],Previous([ROWID])))) dies den Wert für die Zeile nimmt und dividiert sie durch die Max([Value]) über die Gruppierung von [Burst] und AllPrevious([ROWID]). Dies wird durch die Intersect() Funktion bemerkt. Der Nenner ist also immer der vorherige Wert für die Gruppierung. Beachten Sie, dass Max() ein einfaches Aggregat war, das verwendet werden sollte, aber für diesen Fall sollten alle ausreichen, da wir nur einen einzelnen Wert erwarten. Alle Over() Funktionen erfordern und aggregieren, um die Ergebnismenge auf eine einzelne Zeile zu beschränken.

ERGEBNISSE

Results

+0

Brilliant! Vielen Dank, scsimon! Ich bin ziemlich neu in Spotifre und ich habe immer noch Schwierigkeiten mit Knoten Navigation in Ausdrücken.Ich wusste, dass IF-Anweisungen die Daten begrenzen, aber nicht ganz klar, dass ein Knoten erstellt wurde, in dem man mit Methoden wie Previous navigieren kann und aus dem man mit Intersect fliehen muss. Vielen Dank noch einmal. – MaxSense

+0

Keine Sorgen überhaupt Mate – scsimon

Verwandte Themen