Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?J'ai une table de données avec environ 100 000 lignes et 2 000 colonnes.Des dizaines de ces colonnes contiennent des formules.Lorsque j'apporte une modification quelque part, je remarque que la barre d'état indique "évaluation de ##column_xyz" et elle procède à l'évaluation de chaque formule de la table de données.Comme il s’agit d’un tableau assez grand et qu’il existe de nombreuses formules, il faut jusqu’à 60 secondes pour toutes les évaluer.Par conséquent, je suis très sensible à l'exécution d'actions qui déclenchent l'évaluation d'une formule, car l'interface utilisateur ne répondra plus jusqu'à la fin, ce qui peut être assez ennuyeux lorsque cela se produit de manière inattendue.D'un autre côté, je ne veux pas "Supprimer Formula Eval" tout le temps car parfois je l'oublierai et les données ne seront pas mises à jour alors qu'elles auraient dû l'être.
Ainsi, sur cette grande table de données, j'ai un script JSL qui génère un ensemble de graphiques à l'aide de la plateforme Graph Builder, applique des filtres de données locaux et effectue une mise en évidence sélective des données.L'objectif essentiel du script est de générer dynamiquement des graphiques et de les préparer pour un copier-coller dans un e-mail ou un rapport.
J'ai remarqué que ce script semble prendre beaucoup de temps à s'exécuter.Plus longtemps que prévu.L'interface utilisateur ne répond plus pendant près de 60 secondes avant que les graphiques n'apparaissent enfin.J'ai passé du temps à essayer de comprendre ce qui se passait pendant ces 60 secondes.Puis je me suis rendu compte que d'une manière ou d'une autre, l'évaluation de la formule était déclenchée par ce script.Cela n'était pas immédiatement évident car la barre d'état de la table de données n'affiche pas le message normal « évaluation... » ; il reste vide, probablement parce que l'évaluation est déclenchée par un script plutôt que par une action de l'utilisateur.Lorsque j'ai exécuté le script alors que la fenêtre du journal de script était ouverte, la barre d'état du journal indiquait "évaluation de ##column_with_formula".La barre d'état du journal a été gelée sur ce message même si la durée du délai me porte à croire qu'il s'agissait en fait d'évaluer chaque colonne de formule du tableau.Et puis j'ai confirmé que l'évaluation de la formule était le coupable en activant "Supprimer l'évaluation de la formule" pour l'ensemble du tableau et en exécutant à nouveau le script - les graphiques sont apparus presque instantanément.
Par essais et erreurs, je l'ai réduit à une seule ligne dans le script - un "Sélectionner où" est utilisé pour mettre en évidence certaines des données sur les graphiques générés.Cela ressemble à ceci :
myDT << Select Where( :Name("##column_with_formula") == "value" );J'ai trouvé cela étrange ; peut-être que cela avait quelque chose à voir avec la partie « où ».J'ai donc remplacé cette ligne par quelque chose de plus simple :
myDT << Select Rows( {1,3,5,7} );Même cette ligne semble toujours déclencher l’évaluation des formules en coulisses.Ensuite, j'ai fait quelques expériences supplémentaires :
- Avec le gestionnaire de tâches ouvert, j'ai déclenché les évaluations de formules de la manière normale (modifier une valeur dans une colonne).La barre d'état indiquait les formules en cours d'évaluation et instantanément, mon utilisation du processeur a grimpé jusqu'à 30 % (un cœur de processeur maximisé).
- J'ai attendu que l'activité s'arrête et j'ai essayé de sélectionner une ligne sur la table de données à l'aide de l'interface utilisateur.La barre d'état n'a pas changé ; il indiquait toujours "évaluations effectuées".Mais le gestionnaire de tâches a montré exactement la même activité du processeur que si une évaluation de formule avait lieu.
- J'ai activé "Suppress Formula Eval" pour la table de données et sélectionné une ligne différente sur la table de données.L'utilisation du processeur n'a pas augmenté.
Pour résumer, grâce à l'expérimentation, j'ai démontré ce qui suit :
- JMP effectue une évaluation des formules de colonnes de manière superflue ; les interactions de base avec l'interface utilisateur entraînent le calcul en arrière-plan même si aucune des données d'entrée n'a été réellement modifiée.
- JMP n'est pas transparent quant au moment où il effectue ces évaluations de formules.La barre d'état affiche parfois un message mais la plupart du temps ne donne aucune indication sur ce qui se passe.Cela se manifeste souvent par un décalage, un bégaiement ou une absence de réponse de l'interface utilisateur sans raison apparente.
- Il semble que si une colonne est déclenchée pour l'évaluation, TOUTES les colonnes sont évaluées, qu'elles en aient ou non besoin.
Avec des ensembles de données plus petits et des formules moins nombreuses et moins complexes, l'évaluation excessive des formules ne semble pas être un problème.Mais avec des formules suffisamment complexes et un vaste ensemble de données, cela devient vraiment un obstacle.Dans mon cas, je suppose que je devrai m'adapter en laissant l'évaluation des formules supprimée tout le temps et en évaluant uniquement les formules manuellement.Mais cela est sujet à des erreurs, tout comme dans Excel lorsque le recalcul du classeur est défini sur manuel.Au moins Excel dispose d'un arbre de dépendances qui lui permet d'évaluer uniquement les formules nécessaires pour les données qui ont changé, et si l'utilisateur conçoit les formules de manière appropriée, le calcul peut être laissé en mode automatique tout le temps avec une surcharge minimale.Certes, je ne suis pas aussi familier avec JMP qu'avec Excel, il peut donc y avoir des moyens de gérer cela dans JMP que je n'ai pas encore appris.
Quelqu'un a-t-il des suggestions sur la façon de gérer un grand nombre de formules complexes SANS supprimer constamment eval ?
De plus, comme indiqué dans le titre de mon article, je serais intéressé de savoir POURQUOI un changement dans l'évaluation de la formule de déclenchement de la sélection de ligne.Et aussi, pourquoi JMP vous dit-il parfois qu'il évalue des formules, et parfois le cache ?
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?@Chris_Rodrigues a écrit:
Aussi, ce qui m'a le plus surpris, c'est que le simple sélection d'une ligne a déclenché une réévaluation complète de la table (comme en témoigne l'utilisation du processeur et la réactivité de l'interface utilisateur).Si une formule peut être affectée par l'exclusion d'une ligne, pourquoi ne pas déclencher l'évaluation lorsque l'utilisateur exclut une ligne ?Je suppose qu'il est théoriquement possible qu'un utilisateur puisse écrire une formule de colonne qui dépend de l'état actuel de la sélection de ligne, mais cela me semble être un cas rare.
Cela me rend également confus. Pourquoi Jmp ne fait-il pas la distinction entre les états des lignes : exclu et choisi ?
Même si le État de ligne a été modifié - il pourrait y avoir une vérification ultérieure pour voir si le exclu() les états ont changé.
je suis d'accord avec @Chris_Rodrigues - la plupart des formules de colonnes utiliseront Exclu() et pas Choisi() .
[Cependant, ceux avec Choisi() sont les plus cool
]
Cela ne ressemble pas à un problème de niche. Pour des exemples de données comportant 5 à 1 000 lignes de données, ce n'est pas un gros problème.
Mais pour des ensembles de données plus volumineux, un utilisateur qui utilise Exclu() dans les formules en colonnes doit payer une énorme pénalité !
Names Default to Here(1);
dt = new table("test", add rows(5),
New Column( "again"),
New Column( "excluded",
Formula(
:again[1] = 1;
Excluded();
),
));
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Eh bien, c'est agréable d'apprendre enfin que je ne suis pas le seul à avoir eu du mal avec ça.Près de quatre ans plus tard, la situation ne s’est toujours pas améliorée.Il existe toutes sortes de situations étranges qui déclenchent l'évaluation de formules sur l'ensemble de la table de données, même lorsque l'évaluation de formules est censée être supprimée à l'échelle de la table.La suppression de l'évaluation de formule sur des colonnes individuelles est irréalisable car il n'existe aucun moyen de gérer les dépendances.Toutes les colonnes doivent être rétablies pour que JMP puisse les évaluer dans le bon ordre.De plus, dans JMP16, le moteur d'évaluation de formule semble même être devenu encore plus lent.Il faut maintenant un temps déraisonnable pour évaluer ma table complète.
Entre cela et les suggestions constantes dans ces forums de simplement supprimer toutes les formules et de stocker uniquement les valeurs fixes, j'en suis venu à la conclusion que JMP n'est tout simplement pas destiné à gérer des formules dynamiques, uniquement des données statiques.Les formules sont agréables au début, lorsque votre table est petite et qu'elles fonctionnent toujours correctement, mais lorsque le nombre de formules, la complexité de la formule ou le nombre de lignes dépassent une certaine limite, vous vous heurterez à un mur de briques.Je vais devoir retravailler complètement ce projet en utilisant un autre outil et utiliser JMP uniquement pour les graphiques/présentations/statistiques.
Je vais marquer cela comme résolu.La solution est qu’il n’y a pas de solution.Si vous rencontrez ce problème, JMP n'est pas l'outil idéal pour cette tâche.Supprimez vos formules dynamiques et stockez uniquement les données statiques.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?J'ai eu des problèmes similaires avec une grande table de données.
Des évaluations de formules ont été déclenchées à maintes reprises.
Après avoir sauvegardé la table et rouvert, tout allait bien.
Il est donc possible que la réévaluation ait été déclenchée par un conflit de noms de variables. UEt le problème a disparu après la réinitialisation du nom de la variable.
Si d'autres utilisateurs rencontrent des problèmes similaires, voici un souhait pour activer et désactiver rapidement des formules individuelles :
moyen rapide d'activer/désactiver les calculs de formule
Une autre idée : désactiver les évaluations de formules par défaut - pour avoir un Jmp fluide sans de telles réévaluations de formules parasites.
Si vous ajoutez des données au tableau de données, déclenchez simplement une évaluation de formule unique. Voici le souhait :
moyen rapide de déclencher une évaluation de formule unique pour une formule spécifique
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Ce tableau n'a pas été créé dans une ancienne version de JMP.Il a peut-être un an, donc c'était soit JMP 13, soit 14.
J'ai utilisé le menu du triangle rouge pour cocher la case Supprimer l'évaluation de la table, puis je l'ai enregistrée et fermée.Lors de la réouverture de la table, la case Supprimer l'évaluation n'est plus cochée, donc le paramètre à l'échelle de la table n'a apparemment pas été préservé lors de l'enregistrement de la table.Lorsque le tableau s'ouvre, la barre d'état affiche immédiatement "évaluation de xyz...".Je ne suis pas sûr de ce qui déclenche cela.
J'avais un script OnOpen qui était utilisé pour remplir des données dans certains tableaux associatifs utilisés dans certaines fonctions de recherche de données.J'ai renommé OnOpen en quelque chose d'autre pour le désactiver afin qu'il ne se déclenche pas lorsque j'ouvre la table, mais les évaluations ont toujours lieu.
J'ai écrit un script JSL pour accéder aux propriétés de la plupart des colonnes de formule et y supprimer eval, car je sais que cette option est conservée lorsque la table est enregistrée. Alors maintenant, l’évaluation de la table complète ne prend plus autant de temps.Je suppose que c'est ainsi que je vais le gérer à partir de maintenant : supprimez l'évaluation sur des colonnes individuelles, et lorsque j'importe de nouvelles données nécessitant l'exécution des formules, annulez-les temporairement à l'aide d'un script.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Je n'ai pas pu créer un tableau contenant des formules évaluant son ouverture.@chungwei
La préférence peut avoir un effet sur les tables JMP créées dans JMP 5 environ.Je ne vois pas que cela fasse quoi que ce soit actuellement.
Il est possible d'utiliser les options du triangle rouge du tableau de données pour supprimer l'évaluation des formules et enregistrer un tableau dans cet état (avec des colonnes partiellement évaluées). Vous pouvez utiliser rerunFormulas depuis le même triangle rouge pour forcer la mise à jour (ou depuis JSL). (C'est peut-être ce que vous demandez.)
La raison pour laquelle le préf dit non recommandé est-ce que cela devient très déroutant lorsque les tables obtiennent le bit de suppression défini... ou cela l'a fait à un moment donné.
Si vous consultez le support technique, ils saisiront et suivront un défaut (ou découvriront pourquoi la préférence existe et ce qu'elle a fait/fait pour les tableaux de format plus ancien.)
Il n'y a pas de cadre de débogage/journalisation.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Craige, c'est une bonne idée d'écrire dans le journal lorsqu'une formule est en cours d'évaluation.J'utiliserai cette technique pour résoudre davantage les problèmes de décalage de l'interface utilisateur et les retards de mon projet liés à l'évaluation des formules.Ma méthode n'était pas aussi précise.Mais j'ai une question : existe-t-il un mode « débogage » ou une fonctionnalité de « journalisation détaillée » dans JMP que je pourrais activer ?Ce serait bien si je n'avais pas à mettre autant d'instructions Write dans mon code juste pour comprendre ce que fait JMP à un moment donné.
Cependant, pour l'instant, je dois toujours utiliser ce projet tel quel pour mon travail actuel.Je souhaite simplement supprimer complètement l'évaluation des formules et réexécuter les formules manuellement si nécessaire.Même si j'ai activé « Supprimer l'évaluation à l'ouverture » dans le menu des préférences, JMP évalue toujours les formules immédiatement lorsque j'ouvre la table.Existe-t-il un moyen d'empêcher complètement toute évaluation automatique de formules sur cette table ?Si cette préférence est censée faire cela mais qu'elle ne fonctionne pas, existe-t-il un moyen de soumettre un rapport de bug ?
Pour information, j'utilise JMP PRO 14.1 sous Windows 10 x64.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Quelle version de JMP utilisez-vous ?
Pour autant que je sache, 14 fait ce à quoi je m'attends ; voici mon test JSL
New Table( "Untitled", add rows(3),
// EVERYTHINGCOL depends on everything. it evaluates last.
New Column( "EVERYTHINGCOL", Formula( Write( "\!nEVERYTHINGCOL,row" || Char( Row() ) ); :ROWSTATECOL + :INDEPCOL + :DEPONINDEP; ) ),
// DEPONINDEP depends on INDEPCOL, but not ROWSTATECOL.
New Column( "DEPONINDEP", Formula( Write( "\!nDEPONINDEP,row" || Char( Row() ) ); :INDEPCOL + 1; ) ),
// INDEPCOL is independent. It evaluates early, maybe first.
New Column( "INDEPCOL", Formula( Write( "\!nINDEPCOL,row" || Char( Row() ) ); 17; ) ),
// ROWSTATECOL is directly dependent on row state information. It evaluates early, maybe first.
New Column( "ROWSTATECOL", Formula( Write( "\!nROWSTATECOL,row" || Char( Row() ) ); Selected( Row State() ); ) ),
)
Regardez le journal ; les colonnes rapportent au fur et à mesure de leur évaluation. La sélection de lignes entraîne l’évaluation de deux des colonnes, mais pas des deux autres.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Dans le menu Préférences sous « Tableaux », il existe une option pour « Supprimer l'évaluation de la formule à l'ouverture (non recommandé) ».J'ai activé cette option mais cela ne semble pas fonctionner.Lorsque j'ouvre une table de données, elle commence avec une évaluation de formule non supprimée et je dois toujours la supprimer manuellement.Cette option est-elle cassée ou est-ce que je comprends mal ce qu'elle est censée faire ?
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Craige, ce que je voulais dire, c'est que toutes les formules recalculent qu'ils dépendent ou non de l'état de la ligne .La grande majorité des formules n'ont rien à voir avec l'état des lignes, mais un changement dans l'état des lignes les amène de toute façon à recalculer.Je suppose que JMP calcule tout, tout le temps, si quelque chose se produit qui peut affecter n'importe quel type de formule qui pourrait exister.À mon avis, c'est inutile et inefficace.C’est comme utiliser une hache de combat alors qu’un scalpel suffirait.Je suis sûr qu'il est plus facile de coder le programme de cette façon ; cela semble être une approche peu sophistiquée et cela m'a surpris lorsque j'ai appris que c'était ainsi que JMP gérait l'évaluation des formules.
Maintenant que je comprends mieux comment les formules sont calculées, je peux certainement contourner ce problème en gardant la formule eval supprimée et en insérant dt << runFormulas; et Attendez(0); déclaration tout au long de mes scripts.Ce ne sera pas joli, mais ça fonctionnera, je suppose.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Oui, si une formule dépend des informations sur l'état de la ligne, la modification de la sélection de ligne réévaluera cette colonne et toutes les colonnes qui en dépendent.
Vous pourrez peut-être accélérer considérablement l'évaluation en utilisant dt<
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?Jim, merci pour la réponse.Ce tableau contient des données de séries chronologiques et j'importe régulièrement les données les plus récentes.Je voudrais conserver les formules afin qu'elles soient calculées sur les nouvelles données après leur ajout au tableau.
Pour la majorité de ces formules, la valeur ne dépendrait que des autres données de cette même ligne.L'exclusion des données plus tôt dans le tableau n'aurait aucun effet sur les valeurs ci-dessous, le recalcul de la colonne entière n'est donc pas nécessaire, mais cela se produit quand même.Ce serait bien si cela ne se produisait que si la formule contenait un Col Maximum() ou un Lag() ou une autre fonction similaire qui ferait en sorte que la formule soit affectée par les valeurs des autres lignes.
Aussi, ce qui m'a le plus surpris, c'est que le simple sélection d'une ligne a déclenché une réévaluation complète de la table (comme en témoigne l'utilisation du processeur et la réactivité de l'interface utilisateur).Si une formule peut être affectée par l'exclusion d'une ligne, pourquoi ne pas déclencher l'évaluation lorsque l'utilisateur exclut une ligne ?Je suppose qu'il est théoriquement possible qu'un utilisateur puisse écrire une formule de colonne qui dépend de l'état actuel de la sélection de ligne, mais cela me semble être un cas rare.
Re : Pourquoi la sélection/désélection de lignes déclenche-t-elle la réévaluation des formules de colonnes ?La recalculation est effectuée, car une formule pourrait être effectuée par un changement dans la sélection/exclusion d'une cellule pour une colonne donnée.Compte tenu de la taille de votre table de données, j'envisagerais de modifier toutes les colonnes dans lesquelles les valeurs de formule ne changeront pas, puis je supprimerais la propriété "Formule", les transformant en une simple colonne numérique typique.