Option ou fonction pour évaluer une formule de colonne personnalisée en même temps ou mettre en cache les valeurs entre les lignesCertaines formules de colonnes intégrées comme Col Mean() sont très rapides car elles ne calculent qu'une seule fois les valeurs coûteuses et les renvoient ou les modifient pour chaque ligne.Avec des formules personnalisées, cela est plus difficile à réaliser car chaque ligne est évaluée séparément.Parfois, utiliser une colonne séparée pour stocker les valeurs intermédiaires peut accélérer les choses (par exemple stocker les lignes de nombres qui répondent à certains critères, au lieu de les recalculer chaque ligne), mais cela devient compliqué et difficile à suivre. S'il existait un concept de contexte de colonne tel que l'évaluation d'une ligne puisse accéder aux valeurs intermédiaires calculées dans la ligne précédente, alors un script pourrait calculer les résultats pour toutes les lignes à la fois, puis les renvoyer rapidement et transmettre les résultats intermédiaires à la ligne suivante. rangée. La formule aurait également besoin d'accéder à la colonne entière au lieu de simplement à la ligne actuelle, de sorte que la référence de colonne doit être transmise sans être évaluée.
Automatisation et scriptsRe : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesCette option ou fonction simplifierait la création d'une transformation de colonne personnalisée pour résoudre le problème décrit par @hogi dans l'une des réponses ultérieures à compte unique
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesL'enquête sur ce problème est en cours et vous tiendrons au courant si nous parvenons à une solution.
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesAutre exemple : l'écriture d'une fonction personnalisée plus fluide comme un filtre Savitzky-Golay qui ignore les lignes exclues.Cela peut être calculé efficacement pour toute la colonne à la fois lorsque la première ligne est évaluée. Je voudrais mettre en cache les valeurs de toute la colonne lors de la première évaluation, puis renvoyer simplement le résultat pré-calculé dans chaque ligne au lieu de le recalculer. à chaque fois.
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesOui, je l'ai remarqué aussi, mais je suis sûr que vous l'utilisiez de cette façon. Il semble prendre la partie "constante" trop au sérieux pour ce que je voudrais. Nous devrons enquêter, mais cela nécessite probablement de nouvelles fonctionnalités pour la sensibilisation aux dépendances/réexécutions.
Pour des cas comme le vôtre, je fais normalement dépendre la formule d'une variable de table et je mets à jour la variable de table à chaque fois dans la boucle pour avoir une nouvelle valeur aléatoire.
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesSalut @XanGregg ,
Il se peut qu'il me manque quelque chose, mais je n'arrive pas à faire en sorte qu'As Constant réévalue lorsque les formules du tableau sont à nouveau exécutées.Il semble (probablement correctement) mettre en cache sa valeur tant que la table est ouverte. Voici un exemple plus complet qui résout ce problème en utilisant une variable globale.
Voir plus...
here:dt = New Table( "Single Evaluation in Column Formula Example",
Add Rows( 1000 ),
New Column( "Timestamp",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Formula( Today() - (1000 + In Days( Row() )) )
),
New Column( "Local With As Constant",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Local( {startofweek},
startofweek = As Constant(
Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
);
If(
:Timestamp > startofweek & :Timestamp < startofweek
+In Days( 7 ),
1,
0
);
)
)
),
New Column( "Global With Evaluation in Row 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
::: startofweek = Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
);
If(
:Timestamp > ::: startofweek & :Timestamp < ::: startofweek
+In Days( 7 ),
1,
0
);
)
)
);
here:dt << Graph Builder(
Size( 833, 456 ),
Show Control Panel( 0 ),
Variables(
X( :Timestamp ),
Y( :Local With As Constant ),
Y( :Global With Evaluation in Row 1 )
),
Elements( Position( 1, 1 ), Line( X, Y, Legend( 7 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y, Legend( 6 ) ) )
);
for each( {i}, 1::10,
wait(1);
here:dt << Rerun Formulas;
);
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesAvez-vous vu la fonction As Constant(x) ? Cela devrait gérer la seule partie de la demande.
Local(
{startofweek = As Constant(
Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
)},
If( :timestamp > startofweek & :timestamp < startofweek + In Days( 7 ),
1,
0
)
)Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesMerci pour l'exemple et les informations complémentaires @ih . Changement du statut en enquête.
Re : Option ou fonction permettant d'évaluer une formule de colonne personnalisée en même temps, ou de mettre en cache les valeurs entre les lignes - Statut modifié en : EnquêteRe : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesVoici quelques cas d'utilisation potentiels, je sais qu'il y en a d'autres que j'oublie en ce moment.Beaucoup de ces problèmes peuvent être résolus facilement pour de petites tables, ou en utilisant plusieurs colonnes ou variables de table, mais fournir une variable de contexte de colonne les rendrait plus faciles.
- Utilisez une valeur aléatoire dans la formule de colonne afin qu'elle puisse être remplacée dans une simulation
// this value should be cached and re-used for all rows,
// but it should change each time the column is recalculated
startofweek = Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
);
If( :Timestamp > startofweek & :Timestamp < startofweek + In Days( 7 ),
1,
0
);
- Nombre de lignes depuis le début du dernier échantillon hors spécifications.
- Le temps jusqu'à la fin de cette campagne
- Moyenne mobile des 10 derniers échantillons pour ce code produit
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignesJe pense que cet article pourrait démontrer le problème Création d'une fonction statistique personnalisée (formule) qui a byVar
Re : Option ou fonction pour évaluer une formule de colonne personnalisée en même temps, ou mettre en cache les valeurs entre les lignes - Statut modifié en : Besoin d'informations@ih Seriez-vous en mesure de partager un exemple de tableau de données qui illustre le problème que vous décrivez ?