J'essaie de comprendre comment travailler avec des objets qui sont des conteneurs de lignes. Même cette description est peut-être inexacte.
Que signifie « FilteredRows » dans ce contexte ?
dt = Current Data Table();
FilteredRows = dt << get rows where( :Date == 12May2025 );
Show( N Rows( FilteredRows ) );
Pour revenir un peu en arrière, existe-t-il une commande JSL permettant d'appliquer un objet à TOUTES les lignes d'une table de données ? Ou est-ce inutile ?
La solution la plus proche que j'ai trouvée, qui évite d'utiliser « Sélectionner toutes les lignes », est :
AllRows = dt << obtenir les lignes où(1);
J'ai l'impression de tricher.
Plus important encore, j'aimerais pouvoir appliquer des filtres supplémentaires à un sous-ensemble de lignes.
Cela ne fonctionne pas, mais cela transmet l'intention :
XFilteredRows = dt << obtenir les lignes où( :X == 42 );
XYFilteredRows = XFilteredRows << obtenir les lignes où(:Y ==1.21);
Oui, je peux faire les deux en une seule ligne.
XYFiteredRows = dt << obtenir les lignes où(:X==42 & :Y==1.21);
Cependant, je prévois d'utiliser cela dans une boucle For Each Row, où X supprime 99 % des lignes, et je devrai ensuite filtrer d'autres paramètres indépendamment, c'est-à-dire les lignes qui répondent à XY, les lignes qui répondent à XZ et les lignes qui répondent à X mais pas à Y, etc.
Je pense que, sur les grandes tables, il sera plus rapide de conserver les lignes filtrées X.
Dans le même ordre d'idées, le résultat que je cherche à obtenir est très similaire à celui de l'option « Grouper par », mais avec une formule personnalisée.
JSL d'une formule de colonne :
Moyenne de la colonne( :Paramètre, :X )
La fonction « Grouper par » est très pratique pour les formules de colonnes créées à partir de fonctions intégrées, mais lorsque je veux effectuer des calculs plus complexes, je ne sais pas comment obtenir le même effet de regroupement.
Le « conteneur » est une « matrice » (1 dimensionnelle).
Vous pouvez également créer une matrice manuellement :
myRows = Matrice ({1,2,3})
myRows = 1::3
mesLignes = [1, 2, 3]
Il existe 2 façons de réaliser une intersection (et d'autres opérations ensemblistes comme l'union, la différence).
a) en utilisant des tableaux associatifs
aa1 = associative array (myRows1);
aa2 = associative array (myRows2);
aa1 << intersect(aa2);<BR />// aa1 << remove(aa2);
list of rows = aa1 << get keys;
rows= matrix(list of rows);

b) [nouveauté de JMP19] : utilisation de listes
list1 = as list (myRows1);
list2 = as list (myRows2);
<STRIKE>
list of rows = set intersect(list1, list2);
</STRIKE>
list of rows = set intersection(list1, list2);
//list of rows = set difference(list1, list2);
rows= matrix(list of rows);

Intersections de matrices ? Je suppose que non.
hogi,
Vous m'avez encore sauvé la mise. Merci !
Une précision : j’ai utilisé votre syntaxe.
list of rows = set intersect(list1, list2);
Au départ, c'était bleu, alors j'ai pensé que c'était bon, mais bizarre que la majuscule ne soit pas affichée. Ensuite, j'ai cherché dans le guide de programmation et j'ai réalisé que c'était « Définir l'intersection ». Maintenant, c'est bon. À plus !