Hopp til hovedinnhold

Plott tidsserier

Opprett dashbord, og velg tidsseriene du vil plotte. Bruk egendefinerte spørringer og avanserte funksjoner som filtrering, aggregering, detaljnivå, aritmetiske operasjoner og funksjoner for å arbeide med tidsserier.

Opprett dashbord

Slik oppretter du et dashbord med tidsseriedata fra Cognite Data Fusion (CDF):

  1. Logg på Grafana-forekomsten, og opprett et dashbord.

  2. Bruk spørringsfanene under hoveddiagramområdet for å velge tidsserier for dashbordet:

    • Tidsseriesøk: Hent data fra en bestemt tidsserie. Begynn å skrive inn navnet eller beskrivelsen for tidsserien, og velg den fra rullegardinmenyen.

      Angi aggregering og detaljnivå direkte i spørringen. Aggregering er som standard satt til gjennomsnitt, og detaljnivået avgjøres av det valgte tidsintervallet for diagrammet.

      tips

      Eventuelt kan du angi en egendefinert etikett og bruke formatet {{property}} til å hente data fra tidsserien. Du kan bruke alle de tilgjengelige tidsserieegenskapene for å definere en etikett, for eksempel {{name}} - {{description}} eller {{metadata.key1}}.

    • Tidsserier fra tagg: Hent data fra tidsserier knyttet til en bestemt tagg. Begynn å skrive inn navnet eller beskrivelsen for taggen, og velg den fra rullegardinmenyen. Du kan også velge om du vil inkludere tidsserier fra deltagger.

    • Egendefinert spørring for tidsserier: Hent tidsserier som samsvarer med en spørring.

  3. Tidsserien som samsvarer med valget, gjengis i diagramområdet. Juster tidsrammen etter bevhov for å vise relevante data.

Juster tidsramme

Bruke egendefinerte spørringer

Egendefinerte spørringer tilbyr svært detaljert kontroll over utvalget av tidsseriedata. Du kan bruke aritmetiske operasjoner, funksjoner og en spesiell syntaks til henting av syntetiske tidsserier. Dette avsnittet skisserer også begrensningene knyttet til datafiltrering, og hvordan du effektivt kan bruke regex og filtre på serversiden.

Angi en spørring

Når du vil spørre etter tidsserier, angir du en spørring med parameterne i. Hvis du for eksempel vil spørre etter en tidsserie der id er lik 123, angir du ts{id=123}.

Du kan spørre etter tidsserier ved hjelp av id, externalId eller tidsseriefiltre.

Egendefinert spørring

For syntetiske tidsserier kan du angi flere egenskapstyper:

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

Hvis du vil opprette komplekse syntetiske tidsserier, kan du kombinere typene i én enkelt spørring:

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

Filtrering

Spørringer støtter også filtrering basert på tidsserieegenskaper som gjelder som logisk AND. Spørringen nedenfor finner for eksempel tidsserier

  • som tilhører en tagg med en id som er lik 123
  • der name starter med "Begin"
  • der name ikke slutter med "end"
  • der name ikke er lik "Begin query"
ts{assetIds=[123], name=~"Begin.*", name!~".*end", name!="Begin query"}

Spørringssyntaksen inneholder ulike typer likhetsoperatorer:

  • = – streng likhet. Angir parametere for tidsserieforespørselen til CDF. Bruk med filtreringsattributter.
  • =! – streng ulikhet. Filtrerer ut de hentede tidsseriene etter egenskaper som ikke er lik strengen. Støtter strengverdier, numeriske verdier og boolske verdier.
  • =~ – regex likhet. Filtrerer ut de hentede tidsseriene etter egenskaper som samsvarer med det vanlige uttrykket. Støtter strengverdier.
  • !~ – regex ulikhet. Filtrerer ut de hentede tidsseriene etter egenskaper som ikke samsvarer med det vanlige uttrykket. Støtter strengverdier.

Du kan also filtrere på metadata:

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

Spørringen over ber om tidsserier der

  • externalIdPrefix er lik "test"
  • metadata.key1 er lik "value1"
  • metadata.key2 starter med "value2"

Begrensninger for spørringer

Når du utfører egendefinerte spørringer, er det viktig å forstå de underliggende begrensningene når det gjelder å hente tidsserier:

  • Filtrering på klientsiden Koblingen tar i bruk regex-spørringer (=~ for treff og !~ for eksklusjoner) og unøyaktige ulikhetsfiltre (=!) på klientsiden. Denne prosessen skjer etter at det først er hentet opptil 1000 tidsserieelementer fra Cognite Data Fusion (CDF). På grunn av denne tilnærmingen er det en mulighet for at ikke alle relevante tidsserier blir inkludert i det hentede delsettet hvis det totale antallet overstiger 1000.

  • Filtrering på serversiden Det anbefales å bruke filtrering på serversiden så langt det er mulig, for å redusere denne begrensningen. Dette kan oppnås ved å ta i bruk strenge likhetsfiltre (=) på bestemte filteregenskaper for tidsserier. Når du gjør det, avgrenses settet med tidsserier som hentes fra CDF, effektivt. På den måten blir de påfølgende klientsidefiltrene brukt på et mer målrettet datasett. Dette er spesielt nyttig med tanke på å sikre at alle relevante tidsserier, særlig dem som er interessante, inkluderes i det første datasettet som hentes fra CDF.

Kombiner filtrering på serversiden med bestemte attributter eller metadata for å avgrense omfanget av spørringen før du tar i bruk regex eller andre filtre på klientsiden. Denne tilnærmingen øker sjansen betydelig for at alle interessante tidsserier velges ut i Grafana-dashbordet.

Aggregering, detaljnivå og justering

Du kan angi aggregering og detaljnivå for hver tidsserie ved hjelp av rullegardinmenyen i brukergrensesnittet.

Hvis aggregeringen for eksempel er satt til average og detaljnivået er lik 1h, ber alle spørringene om datapunkter med den valgte aggregeringen og det valgte detaljnivået. Aggregering med syntetiske tidsserier justeres som standard til torsdag 00:00:00 UTC, 1. januar 1970.

Med spørringssyntaksen for syntetiske tidsserier kan du definere aggregering, detaljnivå og justering for hver tidsserie separat:

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

Spørringen ovenfor overstyrer verdiene for aggregering og detaljnivå som er angitt i brukergrensesnittet. Se API-dokumentasjonen for å få en liste over aggregater som støttes.

Aritmetiske operasjoner

Du kan ta i bruk aritmetiske operasjoner for å kombinere tidsserier. Eksempel:

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

Resultatet av spørringen over er ett enkelt plott der datapunktene er summerte verdier av hver tidsserie.

I dette eksempelet kan spørringen ts{name~="test1.*"} returnere mer enn én tidsserie, men la oss anta at den returnerer tre tidsserier med ID 111, 222 og 333:

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

Resultatet av spørringen er tre plott, en kombinasjon av summerte tidsserieverdier returnert etter det første og andre uttrykket i spørringen. De resulterende plottene representerer disse spørringene:

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

Du kan se et eksempel på denne virkemåten (hvert ts{}-uttrykk returnerer to tidsserier) i bildet nedenfor (legg merke til etikettene under diagrammet).

Egendefinert spørringsmatematikk

Funksjoner

Vi støtter en lang rekke funksjoner du kan ta i bruk på syntetiske tidsserier:

  • Trigonometriske: sin(ts{}), cos(ts{}), pi().
  • Funksjoner for variabel lengde: max(ts{}, ...), min(ts{}, ...), avg(ts{}, ...).
  • Algebraiske: ln(ts{}), pow(ts{}, exponent), sqrt(ts{}), exp(ts{}), abs(ts{}).
  • Funksjoner for feilhåndtering: on_error(ts{}, default_value). Se Feilhåndtering for beregninger.
  • Strengtidsserier: map(expression, [list of strings to map from], [list of values to map to], default_value). Se Strengtidsserier.

Feilhåndtering for beregninger

Funksjonen on_error(ts{...}) gjør det mulig å gjengi diagrammer selv om det oppstår unntak. Den håndterer feil som disse:

  • BAD_DOMAIN: hvis det er oppgitt feil inndataverdiområder. For eksempel deling på null, eller kvadratroten av et negativt tall.
  • OVERFLOW: hvis resultatet er mer enn 10^100 i absolutt verdi.

Hvis du møter på noen av disse, returnerer CDF et feilfelt med en feilmelding i stedet for å returnere en verdi for tidsstempelet. Du kan unngå disse ved å pakke inn (del)uttrykket i funksjonen on_error():

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

Strengtidsserier

Funksjonen map() kan håndtere tidsserier med strengverdier for å konvertere strenger til dubletter. Hvis for eksempel en tidsserie for en ventil kan ha verdiene "OPEN" eller "CLOSED", kan du konvertere den til et tall med:

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

"OPEN" er tilordnet til 1, "CLOSED" tilordnet til 0, og alt annet til -1.

Aggregater på strengtidsserier støttes ikke for øyeblikket. Alle strengtidsserier anses for å være trinndelte tidsserier.

Enhetskonvertering

Hvis en tidsserie har en definert unitExternalId, kan du konvertere verdiene for den til en annen enhet innenfor samme mengde/antall når du spørrer data ved bruk av egendefinerte spørringer.

Eksempel:

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

Du kan velge enten targetUnit eller targetUnitSystem for hver tidsserie eller hvert aggregat. Målenheten du velger, må være kompatibel med originalenheten.

Når du spørrer datapunkter ved hjelp av syntetiske tidsserier, beholdes ikke enhetene for verdiene. Dette betyr at det er mulig å legge til verdier fra en temperatur-tidsserie til en avstands-tidsserie, selv om det ikke er fysisk riktig.

Vær oppmerksom på at hvis du prøver å åpne egenskapene unit eller unitExternalId for hver tidsserie på etikettfeltet, returnerer Grafana tidsseriens opprinnelige enhet, ikke datapunktenes enhet.

Vise tidsseriedata fra datamodellforekomster

Du kan vise tidsseriedata fra forekomster av CDF-datamodeller:

  1. På fanen Data models velger du data model og version.

  2. Angi query.

    viktig

    Legg til __typename og externalId under feltene som inneholder tidsserien. Under temperature og pressure i dette eksempelet:

    {
    listPump {
    items {
    temperature {
    __typename
    externalId
    }
    pressure {
    __typename
    externalId
    }
    }
    }
    }
    Egendefinert spørringsdatamodell