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):
-
Meld u aan bij uw
Grafana-exemplaar en maak een dashboard. -
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.
tipStel 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.
-
-
De tijdreeks die overeenkomt met uw selectie, wordt weergegeven in het grafiekgebied. Pas de periode aan als nodig om relevante gegevens weer te geven.
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.
Voor synthetische tijdreeksen kunt u meerdere eigenschapstypen opgeven:
bool
:ts{isString=true}
ofts{isStep=false}
string
ofnumber
:ts{id=123}
ofts{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 aan123
- 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 bijCDF. 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 datapunten 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).
Functions
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 er onjuiste invoerbereiken zijn 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 veld Label, 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:
-
Selecteer op het tabblad Gegevensmodellen het gegevensmodel en de versie.
-
Geef de query op.
belangrijkVoeg
__typename
enexternalId
toe onder de velden die de tijdreeks bevatten. In dit voorbeeld hierondertemperature
enpressure
:{
listPump {
items {
temperature {
__typename
externalId
}
pressure {
__typename
externalId
}
}
}
}