ThingWorx Modelldefinition in Composer > Datenspeicher > Wert-Streams > Dienst "QueryPropertyHistory" verwenden
Dienst "QueryPropertyHistory" verwenden
Der Dienst QueryPropertyHistory fragt den Wert-Stream für jeden Eigenschaftswert des angegebenen Quell-Dings im jeweils angegebenen Zeitbereich ab. (Dabei muss die jeweilige Eigenschaft eine protokollierte Eigenschaft sein.) Der Dienst ruft ValueStream.queryValueStreamEntriesfür jede Eigenschaft auf und kombiniert die Werte in einem Ergebnissatz.
QueryPropertyHistory gibt einen Datensatz zurück, der durch die Abfrage jeder protokollierten Eigenschaft eines Dings und die anschließende Zusammenfassung dieser Einzeldatensätze in einem großen Datensatz erstellt wird. Eine "Zeile" wird für jeden Zeitstempel in den einzelnen Datensätzen erstellt. Wenn es einen protokollierten Wert mit diesem Zeitstempel gibt, wird er in der Zeile des Datensatzes eingegeben. Wenn es keinen protokollierten Wert gibt, wird standardmäßig der letzte protokollierte Wert für diese Eigenschaft verwendet. Wenn Sie die Option Keine im Parameter fillOption wählen, wird der Wert Null zurückgegeben. Wenn es keine protokollierte Eigenschaft gibt, bleibt der Eintrag leer. Dieser Kombinationsprozess entfernt Duplikate für eine angegebene Eigenschaft auf Grundlage des Zeitstempels.
Um die tatsächlichen protokollierten Werte einer angegebenen Eigenschaft zu erhalten, müssen Sie die Dienste des Typs QueryPropertyHistory verwenden (beispielsweise QueryIntegerPropertyHistory). Sie können bestätigen, dass Daten tatsächlich mit diesen Diensten gelöscht werden. Um zu verstehen, wie dieser Dienst arbeitet, werden unten mehrere Beispiele angegeben.
Beispielszenarios
Szenario 1: Ich gebe 3 Zeilen an, aber QueryPropertyHistory gibt 9 zurück.
Ein Wert-Stream wird verwendet, um 3 Eigenschaften zu protokollieren. Es gab bereits 3 separate Einträge für jede Eigenschaft. Daher ist die Gesamtzahl der eingegebenen Datenpunkte 9.
Wenn QueryPropertyHistory für diesen Wert-Stream mit dem Parameter maxItems = 3 aufgerufen wird, werden stattdessen 9 Datenzeilen zurückgegeben. QueryPropertyHistory fragt jede einzelne Eigenschaft dreimal ab, da maxItems auf 3 gesetzt wurde. Da es 3 Dateneingaben für jede Eigenschaft gab, war die maximale Menge von zurückgegebenen Elementen möglich: 9 Zeilen.
Szenario 2: Ich weiß, dass Daten mit diesem Zeitstempel vorhanden sind, aber ich erhalte eine leere InfoTable.
Sie können Ihren eigenen benutzerdefinierten Zeitstempel von einem Edge-Gerät protokollieren, wenn Sie nicht den verwenden möchten, den ThingWorx automatisch für einen in den Wert-Stream eingegebenen Wert generiert. Es sollte jedoch das folgende Verhalten berücksichtigt werden.
Was geschieht, wenn ich diese benutzerdefinierte Zeitstempelspalte abfrage, statt setPropertyVTQ zu verwenden?
Der Dienst QueryPropertyHistory ruft vom Wert-Stream, den das Ding verwendet, einen ersten Ergebnissatz auf Grundlage der Parameter startDate, endDate, oldestFirst und maxRows ab.
Wenn Sie startDate und endDate leer lassen, bedeutet dies, dass Sie nicht die Zeitstempeleigenschaft abrufen, die automatisch generiert wird. Die Abfrage ruft maxRows ab (beispielsweise 500), entweder von den aktuell hinzugefügten Eigenschaftswerten oder den ältesten Eigenschaftswerten im Wert-Stream. Dies wird durch den booleschen Parameter oldestFirst bestimmt. Wenn oldestFirst auf "false" eingestellt wird, enthält der zurückgegebene Ergebnissatz die 500 zuletzt eingegebenen Eigenschaftswerte für jede Eigenschaft. Wenn 3 Eigenschaften mit jeweils mehr als 500 Werten protokolliert werden, enthält der erste Datensatz 1.500 Zeilen.
Was geschieht nach der Verarbeitung?
Es ist ein Parameter übrig, der nicht verwendet wurde: query. Dieser Parameter wird nach der Verarbeitung angewendet. Nachdem die erste Abfrage des Wert-Streams abgeschlossen ist, wird auf diesen ersten zurückgegebenen Ergebnissatz der Parameter query angewendet, um zu filtern und nur die gewünschten Daten zurückzugeben.
Problem?
Wenn Sie die benutzerdefinierte Zeitstempel-Eigenschaft abfragen möchten, die Sie erstellt haben, aber der erste zurückgegebene Ergebnissatz nicht die Zeit beinhaltet, nach der Sie in der Abfrage suchen, wird nichts gefunden, und eine leere Infotable wird zurückgegeben.
Lösung
Zur vollständigen Vermeidung dieses Problems müssen Sie den Dienst setPropertyVTQ verwenden, um einen eigenen Zeitstempelwert in den Wert-Stream einzugeben. Dies überschreibt die automatisch generierten Zeitstempelwerte, die den genauen Zeitpunkt repräsentieren, zu dem ein Wert in den Wert-Stream eingegeben wurde. Die Parameter startDate und endDate können dann statt des Parameters query verwendet werden, um Datumsangaben abzufragen. Sie riskieren keinen Datenverlust durch die Abfrage eines Zeitstempels.
War dies hilfreich?