Ga verder naar hoofdinhoud

Tijdreeksen plotten

Maak dashboards en selecteer de tijdreeksen die u wilt plotten. Gebruik aangepaste query's en geavanceerde functies zoals filteren, aggregatie, granulariteit, rekenkundige bewerkingen en functies om met tijdreeksen te werken.

Een dashboard maken

Een dashboard maken met tijdreeksgegevens van Cognite Data Fusion (CDF):

  1. Meld u aan bij uw Grafana-exemplaar en maak een dashboard.

  2. Gebruik de querytabs onder de hoofdgrafiek om tijdreeksen te selecteren voor uw dashboard:

    • Zoeken in tijdreeksen: haal gegevens op uit een specifieke tijdreeks. Typ de naam of beschrijving van de tijdreeks en selecteer deze in de vervolgkeuzelijst.

      Geef waarden voor aggregatie en granulariteit rechtstreeks in de query op. Standaard heeft de aggregatie de waarde gemiddeld en wordt de granulariteit bepaald op basis van het tijdsinterval dat voor de grafiek is geselecteerd.

      tip

      Stel eventueel een aangepast label in en gebruik de indeling {{property}} om gegevens op te halen uit de tijdreeks. U kunt alle beschikbare tijdreekseigenschappen gebruiken om een label te definiëren, bijvoorbeeld {{name}} - {{description}} of {{metadata.key1}}.

    • Tijdreeksen van asset: haal gegevens op uit tijdreeksen met betrekking tot een specifieke asset. Typ de naam of beschrijving van de asset en selecteer deze in de vervolgkeuzelijst. Geef eventueel aan of u tijdreeksen van subassets wilt opnemen.

    • Aangepaste query voor tijdreeksen: haal een tijdreeks op die overeenkomt met een query.

  3. De tijdreeks die overeenkomt met uw selectie, wordt weergegeven in het grafiekgebied. Pas de periode indien nodig aan om relevante gegevens weer te geven.

Periode aanpassen

Aangepaste query's gebruiken

Aangepaste query's bieden fijnmazige controle over de selectie van tijdreeksgegevens. U kunt rekenkundige bewerkingen, functies en een speciale syntaxis gebruiken voor het ophalen van synthetische tijdreeksen. In dit gedeelte worden ook de beperkingen beschreven voor het filteren van gegevens en hoe u regex-filters en filters op de server effectief kunt gebruiken.

Een query definiëren

Als u tijdreeksen wilt opvragen, geeft u een query met de betreffende parameters op. Als u bijvoorbeeld een query wilt uitvoeren voor een tijdreeks waarbij id gelijk is aan 123, geeft u ts{id=123} op.

U kunt tijdreeksen opvragen via id, externalId of tijdreeksfilters.

Aangepaste query

Voor synthetische tijdreeksen kunt u meerdere eigenschapstypen opgeven:

  • bool: ts{isString=true} of ts{isStep=false}
  • string of number: ts{id=123} of ts{externalId='external_123'}
  • array: ts{assetIds=[123, 456]}
  • object: ts{metadata={key1="value1", key2="value2"}}

Als u complexe synthetische tijdreeksen wilt maken, kunt u de typen in één query combineren:

ts{name="test", assetSubtreeIds=[{id=123}, {externalId="external_123"}]}

Filteren

Query's ondersteunen ook filters op basis van tijdreekseigenschappen die gelden als de logische operator AND. Met onderstaande query vindt u bijvoorbeeld de volgende tijdreeksen:

  • die horen bij een asset met een id die gelijk is aan 123
  • waarbij name begint met "Begin"
  • waarbij name niet eindigt met "end"
  • waarbij name niet gelijk is aan "Begin query"
ts{assetIds=[123], name=~"Begin.*", name!~".*end", name!="Begin query"}

De querysyntaxis bevat vier typen gelijkheidsoperators:

  • = - strikte gelijkheid. Geeft parameters op voor de tijdreeksaanvraag bij CDF. Gebruik dit met filterkenmerken.
  • =! - strikte ongelijkheid. Filtert opgehaalde tijdreeksen op eigenschappen die niet gelijk zijn aan de tekenreeks. Ondersteunt tekenreeks-, numerieke en boole-waarden.
  • =~ - gelijk aan regex. Filtert de opgehaalde tijdreeksen op eigenschappen die overeenkomen met de reguliere expressie. Ondersteunt tekenreekswaarden.
  • !~ - ongelijk aan regex. Filtert de opgehaalde tijdreeksen op eigenschappen die niet overeenkomen met de reguliere expressie. Ondersteunt tekenreekswaarden.

U kunt ook filteren op metagegevens:

ts{externalIdPrefix="test", metadata={key1="value1", key2=~"value2.*"}}

De bovenstaande query vraagt om tijdreeksen waarbij het volgende geldt:

  • externalIdPrefix is gelijk aan "test"
  • metadata.key1 is gelijk aan "value1"
  • metadata.key2 begint met "value2"

Beperkingen van query's

Bij het uitvoeren van aangepaste query's moet u begrijpen wat de onderliggende beperkingen zijn voor het ophalen van tijdreeksen:

  • Filteren op de client De connector past regex-query's toe (=~ voor overeenkomsten en !~ voor uitsluitingen) en past onnauwkeurige ongelijkheidsfilters (=!) toe op de client. Dit proces wordt uitgevoerd nadat er voor het eerst maximaal 1000 tijdreeksitems zijn opgehaald uit Cognite Data Fusion (CDF). Dit betekent dat mogelijk niet alle relevante tijdreeksen in de opgehaalde subset worden opgenomen als het totale aantal groter is dan 1000.

  • Filteren op de server Als u deze beperking wilt omzeilen, wordt aanbevolen om indien mogelijk gebruik te maken van filters op de server. Dit kunt u doen door strikte gelijkheidsfilters (=) toe te passen op specifieke eigenschappen van de tijdreeksfilters. Op die manier beperkt u effectief de serie tijdreeksen die uit CDF worden opgehaald, zodat de daaropvolgende filters op de client worden toegepast op een meer gerichte gegevensset. Dit is vooral handig als u wilt dat alle relevante (en vooral de belangrijkste) tijdreeksen worden opgenomen in de initiële gegevensset die wordt opgehaald uit CDF.

Combineer filters op de server met specifieke kenmerken of metagegevens om het bereik van uw query te verfijnen voordat u regex of andere filters op de client toepast. Op die manier hebt u meer kans dat alle belangrijke tijdreeksen worden geselecteerd in uw Grafana-dashboard.

Aggregatie, granulariteit en uitlijning

U kunt aggregatie en granulariteit opgeven voor elke tijdreeks via de vervolgkeuzelijsten in de gebruikersinterface.

Als de aggregatie bijvoorbeeld is ingesteld op average en de granulariteit is gelijk aan 1h, vragen alle query's om gegevenspunten met de geselecteerde aggregatie en granulariteit. Aggregatie met synthetische tijdreeksen wordt standaard uitgelijnd op donderdag 00:00:00 UTC, 1 januari 1970.

Met de querysyntaxis voor synthetische tijdreeksen kunt u aggregatie, granulariteit en uitlijning voor elke tijdreeks afzonderlijk definiëren:

ts{externalId='houston.ro.REMOTE_AI[34]', alignment=1599609600000, aggregate='average', granularity='24h'}

De bovenstaande query overschrijft de waarden voor aggregatie en granulariteit die zijn ingesteld in de gebruikersinterface. Zie de API-documentatie voor een lijst met ondersteunde aggregaties.

Rekenkundige bewerkingen

U kunt rekenkundige bewerkingen toepassen om tijdreeksen te combineren. Bijvoorbeeld:

ts{id=123} + ts{externalId="test"}

Het resultaat van de bovenstaande query is een enkele grafiek waarin de gegevenspunten de opgetelde waarden zijn van elke tijdreeks.

In dit voorbeeld kan de query ts{name~="test1.*"} meer dan één tijdreeks retourneren. Stel dat er drie tijdreeksen worden geretourneerd met id's 111, 222 en 333:

ts{name~="test1.*"} + ts{id=123}

De query resulteert in drie grafieken, een combinatie van opgetelde tijdreekswaarden die worden geretourneerd door de eerste en tweede expressies in de query. De resulterende grafieken komen overeen met deze query's:

  • ts{id=111} + ts{id=123}
  • ts{id=222} + ts{id=123}
  • ts{id=333} + ts{id=123}

U kunt een voorbeeld van dit gedrag zien (elke ts{}-expressie retourneert twee tijdreeksen) in de onderstaande afbeelding (let op de labels onder de grafiek).

Wiskunde voor aangepaste query

Functies

We ondersteunen diverse functies die u kunt toepassen op synthetische tijdreeksen:

  • Trigonometrisch: sin(ts{}), cos(ts{}), pi().
  • Functies met variabele lengte: max(ts{}, ...), min(ts{}, ...), avg(ts{}, ...).
  • Algebraïsch: ln(ts{}), pow(ts{}, exponent), sqrt(ts{}), exp(ts{}), abs(ts{}).
  • Foutafhandeling: on_error(ts{}, default_value). Zie Foutverwerking voor berekeningen.
  • Sterke tijdreeks: map(expression, [list of strings to map from], [list of values to map to], default_value). Zie Tijdreeksen in de vorm van tekenreeksen.

Foutverwerking voor berekeningen

De functie on_error(ts{...}) kan worden weergegeven als grafiek, zelfs als er een uitzondering optreedt. Hiermee worden fouten verwerkt zoals:

  • BAD_DOMAIN: als een onjuist invoerbereik is opgegeven. Bijvoorbeeld delen door nul of de vierkantswortel van een negatief getal.
  • OVERFLOW: als het resultaat meer dan 10^100 is in absolute waarde.

Als een van deze fouten wordt aangetroffen, retourneert CDF geen waarde voor het tijdstempel, maar een foutveld met een foutbericht. U kunt dit voorkomen door de (sub)expressie op te nemen in de functie on_error():

on_error(1/ts{externalId='canBeZero'}, 0)

Tijdreeks voor tekenreeks

De functie map() kan tijdreeksen met tekenreekswaarden verwerken om tekenreeksen te converteren. Als bijvoorbeeld een tijdreeks voor een klep de waarden "OPEN" of "CLOSED" kan hebben, kunnen deze worden geconverteerd naar een getal, waarbij bijvoorbeeld:

map(TS{externalId='stringstate'}, ['OPEN', 'CLOSED'], [1, 0], -1)

"OPEN" wordt toegewezen aan 1, "CLOSED" aan 0, en alle andere waarden aan -1.

Aggregaties voor tijdreeksen in de vorm van tekenreeksen worden momenteel niet ondersteund. Alle tijdreeksen in de vorm van tekenreeksen worden beschouwd als trapsgewijze tijdreeksen.

Conversie van eenheden

Als een tijdreeks een gedefinieerde unitExternalId heeft, kunt u de waarden ervan converteren naar een andere eenheid binnen dezelfde hoeveelheid wanneer u gegevens opvraagt met behulp van aangepaste query's.

Voorbeeld:

{ts{externalId='temperature_f_houston', targetUnit='temperature:deg_c'} + ts{id='123', targetUnitSystem='SI'}}

U kunt targetUnit of targetUnitSystem kiezen voor elke tijdreeks of aggregatie. De doeleenheid die u kiest, moet compatibel zijn met de oorspronkelijke eenheid.

Bij het opvragen van gegevenspunten met behulp van synthetische tijdreeksen worden de eenheden voor de waarden niet behouden. Dit betekent dat het mogelijk is om waarden uit een temperatuurtijdreeks toe te voegen aan een afstandstijdreeks, ook al is dit fysiek niet nauwkeurig.

Let op: als u probeert toegang te krijgen tot de eigenschappen van een unit of unitExternalId van een tijdreeks in het labelveld, retourneert Grafana de oorspronkelijke eenheid van de tijdreeks, niet de eenheid van de gegevenspunten.

Tijdreeksgegevens van gegevensmodellen weergeven

U kunt tijdreeksgegevens van exemplaren van CDF-gegevensmodellen weergeven:

  1. Selecteer op het tabblad Gegevensmodellen het gegevensmodel en de versie.

  2. Geef de query op.

    belangrijk

    Voeg __typename en externalId toe onder de velden die de tijdreeks bevatten. In dit voorbeeld hieronder temperature en pressure:

    {
    listPump {
    items {
    temperature {
    __typename
    externalId
    }
    pressure {
    __typename
    externalId
    }
    }
    }
    }
    Aangepast model voor querygegevens