Aller au contenu principal

Trevas - Opérateurs temporels

· 4 minutes de lecture
Hadrien Kohl
Hadrien Kohl Consulting - Developer

Opérateurs temporels de Trevas

La version 1.4.0 de Trevas introduit un support préliminaire pour les types de date et d'heure et les opérateurs.

La spécification décrit les types temporels tels que date, time_period, time et duration. Cependant, les auteurs de Trevas trouvent ces descriptions peu satisfaisantes. Cet article de blog décrit nos choix de mise en œuvre et en quoi ils diffèrent des spécifications.

Dans la spécification, time_period (et les types date) est décrit comme un type composé avec un début et une fin (ou un début et une durée). Cela complique la mise en œuvre et apporte peu de valeur au langage car on peut simplement fonctionner directement sur une combinaison de dates ou de date et de durée. Pour cette raison, nous avons défini une algèbre entre les types temporels et n'avons pas encore implémenté le type time_period.

résultat (opérateurs)dateduréenombre
daten/adate (+, -)n/a
duréedate (+, -)durée (+, -)durée (*)
numéron/adurée (*)n/a

La fonction period_indicator s'appuie sur la connaissance des périodes pour les types qui ne sont pas suffisamment définis pour le moment pour être implémentés.

Représentation Java

Le type VTL date est représenté en interne comme le type java.time.Instant, java.time.ZonedDateTime et [java.time.OffsetDateTime](https://docs.oracle.com/en%2Fjava%2Fjavase%2F11%2Fdocs%2Fapi%2F%2F/java.base/java/time/OffsetDateTime.html#: ~:text=OffsetDateTime%20is%20an%20immutable%20representation,be%20stored%20in%20an%20OffsetDateTime%20.)

Instant représente un moment précis dans le temps. Notez que ce type n'inclut pas les informations de fuseau horaire et est donc non utilisable avec tous les opérateurs. On peut utiliser les types ZonedDateTime et OffsetDateTime lorsque la sauvegarde du fuseau horaire est nécessaire.

Le type de VTL durée est représenté en interne comme le type org.troisten.extra.PeriodDuration du package threeten extra. Il représente une durée utilisant à la fois des unités calendaires (années, mois, jours) et une durée temporelle (heures, minutes, secondes et nanosecondes).

Fonction flow_to_stock

La fonction flow_to_stock convertit un ensemble de données avec interprétation par flux en une interprétation par stock. Cette transformation est utile lorsque vous souhaitez agréger des données de flux (par exemple, taux de ventes ou de production) en données de stock cumulées (par exemple, inventaire total).

Syntaxe:

résultat:= flow_to_stock(op)

Paramètres:

  • op - L'ensemble de données d'entrée avec interprétation du flux. L'ensemble de données doit avoir un identifiant de type time, des identifiants additionels, et au moins une mesure de type number.

Résultat:

La fonction renvoie un ensemble de données avec la même structure que celui en entrée, mais avec les valeurs converties en stock.

Fonction stock_to_flow

La fonction stock_to_flow convertit un ensemble de données avec interprétation de stock en une interprétation de flux. Ce La transformation est utile lorsque vous souhaitez dériver des données de flux à partir de données de stock cumulées.

Syntaxe:

résultat:= stock_to_flow(op)

Paramètres:

  • op - L'ensemble de données d'entrée avec interprétation par stock. L'ensemble de données doit avoir un identifiant de type time, des identifiants additionels, et au moins une mesure de type number.

Résultat:

La fonction renvoie un ensemble de données avec la même structure que celui en entrée, mais avec les valeurs converties en flux.

Fonction timeshift

La fonction timeshift décale la composante temporelle d'une plage de temps spécifiée dans l'ensemble de données. Ceci est utile pour analyser des données à différents décalages temporels, par exemple en comparant les valeurs actuelles aux valeurs passées.

Syntaxe:

résultat := timeshift(op, shiftNumber)

Paramètres:

  • op - Ensemble de données contenant des séries chronologiques.
  • shiftNumber - Un entier représentant le nombre de périodes à décaler. Les valeurs positives évoluent dans le temps, tandis que les valeurs négatives reculent.

Résultat:

La fonction renvoie un ensemble de données avec les identifiants temporels décalés du nombre de périodes spécifiées.