Hoppa till huvudinnehållet

Plottidsserier

Skapa instrumentpaneler och välj den tidsserie du vill rita. Använd anpassade frågor och avancerade funktioner som filtrering, aggregering, granularitet, aritmetiska operationer och funktioner för att arbeta med tidsserier.

Skapa en instrumentpanel

Gör så här för att skapa en instrumentpanel med tidsseriedata från Cognite Data Fusion (CDF):

  1. Logga in på din Grafana-instans och skapa en instrumentpanel.

  2. Använd frågeflikarna under huvuddiagrammet för att välja tidsserier för kontrollpanelen:

    • Tidsseriesökning – hämta data från en specifik tidsserie. Börja skriva in namnet eller beskrivningen av tidsserien och välj den från rullgardinsmenyn.

      Ange aggregering och granularitet direkt i frågan. Som standard är aggregeringen inställd på average och granulariteten beräknas utifrån det tidsintervall som valts för diagrammet.

      tips

      Alternativt kan du ställa in en anpassad etikett och använda formatet {{property}} för att hämta data från tidsserien. Du kan använda alla tillgängliga tidsserieegenskaper för att definiera en etikett, till exempel, {{name}} - {{description}} eller {{metadata.key1}}.

    • Tidsserier från tillgång – hämta data från tidsserier relaterade till en specifik tillgång. Börja skriva in namnet eller beskrivningen av tillgången och välj den från rullgardinsmenyn. Bestäm eventuellt om du vill inkludera tidsserier från undertillgångar.

    • Tidsseriens anpassade fråga – hämta tidsserier som matchar en fråga.

  3. Tidsserien som matchar ditt val återges i diagramområdet. Justera tidsramen efter behov för att visa relevanta data.

Justera tidsramen

Använd anpassade frågor

Anpassade frågor möjliggör bättre kontroll över valda tidsseriedata. Du kan använda aritmetiska åtgärder, funktioner och en specialsyntax för att hämta syntetiska tidsserier. I det här avsnittet visas begränsningarna som gäller för datafiltrering och hur man på ett effektivt sätt använder regex-filter och filter på serversidan.

Definiera en fråga

För att begära tidsserier, ange en fråga med parametrarna inuti. Om du till exempel vill fråga efter en tidsserie där id är lika med 123, anger du ts{id=123}.

Du kan begära tidsserier med hjälp av id, externalId eller tidsseriefilter.

Anpassad fråga

För syntetiska tidsserier kan du ange flera 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"}}

För att skapa komplexa syntetiska tidsserier kan du kombinera typerna i en enda fråga:

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

Filtrering

Frågor stöder även filtrering baserat på tidsserieegenskaper som gäller som logiska AND. Till exempel hittar frågan nedan tidsserier:

  • som tillhör en tillgång med ett id som är lika med 123
  • där name börjar med "Begin"
  • där name inte slutar med "end"
  • där name inte är lika med "Begin query"
ts{assetIds=[123], name=~"Begin.*", name!~".*end", name!="Begin query"}

Frågesyntaxen innehåller olika typer av likhetsoperatorer:

  • = – strikt jämlikhet. Anger parametrar för tidsseriebegäran till CDF. Använd med filtreringsattribut.
  • =! – strikt ojämlikhet. Filtrerar hämtade tidsserier efter egenskaper som inte är lika med strängen. Stöder sträng-, numeriska och booleska värden.
  • =~ – regex jämlikhet. Filtrerar den hämtade tidsserien efter egenskaper som matchar det reguljära uttrycket. Stöder strängvärden.
  • !~ – regex ojämlikhet. Filtrerar den hämtade tidsserien efter egenskaper som inte matchar det reguljära uttrycket. Stöder strängvärden.

Du kan också filtrera på metadata:

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

Frågan ovan begär tidsserier där:

  • externalIdPrefix är lika med "test"
  • metadata.key1 är lika med "value1"
  • metadata.key2 börjar med "value2"

Frågebegränsningar

När du använder anpassade frågor är det viktigt att förstå de underliggande begränsningarna för hämtning av tidsserier:

  • Filtrering på klientsidan: Kontakten tillämpar regex-frågor (=~ för matchningar och !~ exkluderingar) och filter för inexakt olikhet (=!) på client-side. Den här processen inträffar efter den första hämtningen av upp till 1000 tidsserieobjekt från Cognite Data Fusion (CDF). På grund av den här metoden kan det inträffa att inte alla relevanta tidsserier inkluderas i den hämtade datamängden om det totala antalet överstiger 1000.

  • Filtrering på serversidan: För att minska effekterna av den här begränsningen rekommenderar vi att du använder filtrering på server-side när det är möjligt. Detta görs genom att tillämpa filter för strikt likhet (=) för specifika egenskaper för tidsseriefilter. Genom att göra så här begränsar du på ett effektivt sätt antalet tidsserier som hämtas från CDF, och ser till att efterföljande klientsidefilter tillämpas på en lämplig datamängd. Detta är särskilt användbart för att säkerställa att alla relevanta tidsserier, i synnerhet de som är intressanta, inkluderas inom den första datamängd som hämtas från CDF.

Kombinera filtrering på server-side med specifika attribut eller metadata för att förfina omfattningen av din fråga innan du tillämpar regex eller andra filter på client-side. På det här sättet ökar chanserna att välja alla intressanta tidsserier i din Grafana-kontrollpanel betydligt.

Aggregation, granularitet och anpassning

Du kan ange aggregering och granularitet för varje tidsserie med hjälp av rullgardinsmenyn i användargränssnittet.

Om till exempel aggregeringen är inställd på average och granulariteten är lika med 1h begär alla frågor datapunkter med den valda aggregeringen och granulariteten. Som standard är aggregering med syntetiska tidsserier anpassad till torsdag 00:00:00 UTC, 1 januari 1970.

Med den syntetiska tidsseriefrågesyntaxen kan du definiera aggregering, granularitet och justering för varje tidsserie separat:

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

Frågan ovan åsidosätter de aggregerings- och granularitetsvärden som ställts in i användargränssnittet. Se API-dokumentationen för en lista över aggregat som stöds.

Aritmetiska åtgärder

Du kan använda aritmetiska operationer för att kombinera tidsserier. Till exempel:

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

Resultatet av ovanstående fråga är ett enda diagram där datapunkter är summerade värden för varje tidsserie.

I det här exemplet kan frågan ”ts{name~="test1.*"}” returnera mer än en tidsserie, men låt oss anta att den returnerar tre tidsserier med ID:n 111, 222 och 333:

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

Resultatet av frågan är tre plotter, en kombination av summerade tidsserievärden som returneras av det första och andra uttrycket i frågan. De resulterande plotten representerar dessa frågor:

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

Du kan se ett exempel på detta beteende (varje ts{}-uttryck returnerar två tidsserier) i bilden nedan (lägg märke till etiketterna under diagrammet).

Anpassad fråga, matematik

Functions

Vi stöder ett brett utbud av funktioner som du kan använda för syntetiska tidsserier:

  • Trigonometri: sin(ts{}), cos(ts{}), pi().
  • Funktioner med variabel längd: max(ts{}, ...), min(ts{}, ...), avg(ts{}, ...).
  • Algebra: ln(ts{}), pow(ts{}, exponent), sqrt(ts{}), exp(ts{}), abs(ts{}).
  • Felhantering: on_error(ts{}, default_value). Se Felhantering för beräkningar.
  • Sträng för tidsserier: map(expression, [list of strings to map from], [list of values to map to], default_value). Se Sträng för tidsserier.

Felhantering för beräkningar

Funktionen on_error(ts{...}) tillåter diagramrendering även om något undantag dyker upp. Den hanterar fel som:

  • BAD_DOMAIN – Om dåliga indataområden tillhandahålls. Till exempel division med noll eller kvadratroten ur ett negativt tal.
  • OVERFLOW – Om resultatet är mer än 10^100 i absolut värde.

Om någon av dessa påträffas, istället för att returnera ett värde för tidsstämpeln, returnerar CDF ett felfält med ett felmeddelande. För att undvika dessa kan du linda in (under)uttrycket i funktionen on_error():

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

Sträng för tidsserier

Funktionen map() kan hantera tidsserier med strängvärden för att konvertera strängar till dubblar. Om till exempel en tidsserie för en ventil kan ha värdena "OPEN" eller "CLOSED", kan du konvertera den till ett tal med:

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

"OPEN" mappas till 1, "CLOSED" till 0 och allt annat till -1.

Aggregat för strängtidsserier stöds för närvarande inte. Alla strängtidsserier anses vara stegade tidsserier.

Enhetskonvertering

Om en tidsserie har ett definierat unitExternalId, kan du konvertera dess värden till en annan enhet inom samma kvantitet när du ställer frågor i data med hjälp av anpassade frågor.

Exempel:

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

Du kan välja antingen targetUnit eller targetUnitSystem för varje tidsserie eller aggregering. Den målenhet du väljer måste vara kompatibel med den ursprungliga enheten.

När du ställer frågor om datapunkter med syntetiska tidsserier, behålls inte enheterna för de värdena. Detta innebär att det är möjligt att lägga till värden från en tidsserie som avser temperatur till en tidsserie som avser avstånd, även om det inte är fysiskt korrekt.

Observera att om du försöker komma åt egenskaperna förunit eller unitExternalId för varje tidsserie i fältet etikett, returnerar Grafana den ursprungliga enheten för tidsserien, inte enheten för datapunkterna.

Visa tidsseriedata från datamodellinstanser

Du kan visa tidsseriedata från instanser av CDF-datamodeller:

  1. På fliken Datamodeller väljer du datamodellen och version.

  2. Ange frågan.

    viktigt

    Lägg till __typename och externalId under fälten som innehåller tidsserien. I det här exemplet, under temperature och pressure:

    {
    listPump {
    items {
    temperature {
    __typename
    externalId
    }
    pressure {
    __typename
    externalId
    }
    }
    }
    }
    Anpassad fråga, datamodell