Salut tout le monde,
J'essaie d'écrire une formule de colonne qui examinera la différence de date entre deux lignes et si >= à une certaine valeur (dans ce cas 4 jours), alors la colonne doit décrémenter la valeur de phase. Si la différence de date est <4, elle doit conserver la valeur de phase précédente. J'ai défini deux variables locales dans la formule : phase et MinDaysbreak, qui correspond au nombre minimum de jours entre les phases (4). La colonne :"Date/Time:"n est la colonne de date sur laquelle la boucle For() parcourt.

Ma formule ressemble à la suivante :

Et le code JSL de la formule est le suivant :
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
Je ne reçois aucune erreur pour la formule, la formule n'est pas supprimée, mais la colonne est toujours vide. Je n'obtiens toujours rien pour la dernière ligne même si je supprime la première instruction else dans le premier If(), et la dernière entrée de la colonne devrait être 9, car c'est la phase de la variable locale. Je sais qu'il y a 9 phases.
Je ne suis pas sûr de ce que je fais de mal, mais je ne serais pas surpris si c'est une simple erreur que j'oublie.
Merci pour toute aide!,
DS
La colonne est vide car la fonction For() ne renvoie pas de valeur. Essayez de coller ce code dans l'éditeur de formule :
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)Je pense que cela fonctionnera comme prévu. Notez ces changements :
– La phase supplémentaire qui définit la valeur de la ligne actuelle (après avoir été calculée dans la boucle For). Sans cela, vous obtenez une colonne vide.
– Pour fonctionner correctement, vous ne devez pas parcourir toutes les lignes, mais uniquement jusqu'à la ligne actuelle en utilisant Row() . Sinon, vous obtiendrez la même valeur pour chaque ligne.
– Vous avez besoin d’un index pour les deux dates pour vous assurer de toujours comparer avec la ligne suivante. Sans cela, il est difficile de prédire le résultat (cela dépend des données).
J'ai également défini initial i comme paramètre local, mais ce n'est pas nécessaire je pense.
Cependant, il est assez inhabituel d'utiliser une boucle for dans les formules de colonnes. Si vous disposez d'un grand ensemble de données, il peut être très inefficace de parcourir la table afin de définir la valeur de chaque ligne. Il existe d'autres façons de résoudre ce problème, avec la formule de colonne ou JSL.
/MS