Ricerca equivalente a colonna singola VCiao a tutti,
Ho utilizzato una formula che funziona allo stesso modo di VLOOKUP in Excel, ma ora ho scoperto che non funziona su tabelle di dati più grandi, perché sostanzialmente rallenta e distrugge JMP.
In allegato è presente un esempio di tabella dati in cui ho suddiviso le due funzioni che avevo combinato, che funzionano come previsto:

Articolo VLU

Risultato VLU

Se prendessi la formula dalla colonna "Voce VLU" e la inserissi nella formula Risultati VLU, si creerebbe una spirale mortale. Avere due colonne separate non è un problema, ma sarebbe più chiaro se potessi farlo in un'unica formula.
Grazie per qualsiasi idea!!
Steve
Combinazione e pulizia dei datiRe: Ricerca equivalente a colonna singola VCon l'introduzione della nuova e sofisticata Col Aggregation, alcuni problemi di velocità sono stati risolti in JMP19:
Novità di Graph Builder per JMP 19
anche questo 
Re: Ricerca equivalente a colonna singola VUn altro modo per eseguire una ricerca verticale in JMP è utilizzare la piattaforma Update. Questa è una soluzione molto efficiente. Richiede che i valori di ricerca siano in una tabella separata, tuttavia, per la tabella dati, questa è un'operazione semplice. Ecco uno script che esegue la ricerca molto rapidamente.
Names Default To Here( 1 );
dt = Current Data Table();
// Select matching cells
dt << Select Where( :VALUE_STR == "" );
// Invert current selection
dt << Invert Row Selection;
// Subset data table
// → Data Table( "Subset of Vlookup example" )
dt << Select Where( :VALUE_STR == "" );
dt << Invert Row Selection;
dtSum = dt << Subset(
Selected Rows( 1 ),
columns( :HEADER_ID, :VALUE_STR ),
output table( "Lookup" )
);
// Change column name: VALUE_STR → VLU Result from UPdate
dtSum:VALUE_STR << Set Name( "VLU Result from UPdate" );
// Update data table
dt << Update(
With( Data Table( dtSum ) ),
Match Columns( :HEADER_ID = :HEADER_ID )
);
// Remove Lookup table
Close( dtSum, nosave );
Re: Ricerca equivalente a colonna singola V
@shampton82 ha scritto:
Se prendessi la formula dalla colonna "Voce VLU" e la inserissi nella formula Risultati VLU, ciò causerebbe la spirale mortale.
In realtà sembra una spirale di morte, ma a ben guardare si scopre che è una spirale di consumo estremo di caffè.
E ti mostrerà con quale frequenza JMP ricalcola le formule delle colonne!
Il problema è causato dal
Col Maximum(if (String comparison ))
Oltre ad abbandonare l'idea di una formula di colonna, altre soluzioni alternative per JMP < 19 sono:
- DON'T use a string comparison, convert the string to a number:
:VALUE_STR[Col Maximum( If( :X__3 == 3.1, Row(), . ), :HEADER_ID )]
Suggerimenti e trucchi: le migliori pratiche con JMP/JSL
- ... or use Contiene()
:VALUE_STR[Col Maximum( If( contains(:X__3 , "V3_1"), Row(), . ), :HEADER_ID )]
- DON'T use massimo() to "distribute" a single value in groups
... col mediana() is much faster:
:VALUE_STR[Col Median( If( :X__3 == "V3_1", Row(), . ), :HEADER_ID )]
Re: Ricerca equivalente a colonna singola VGrazie @txnelson !
Volevo mantenerlo come colonna di formule, ma lo terrò comunque nella tasca posteriore.
Re: Ricerca equivalente a colonna singola VGrazie @hogi !
Mi piace di più la tua analogia. Inoltre, il tuo suggerimento di usare COLMEDIAN() ha funzionato perfettamente. È incredibile che le due funzioni abbiano prestazioni così diverse. Un motivo in più per non vedere l'ora di installare la versione 19.
Re: Ricerca equivalente a colonna singola VHo anche trovato una soluzione basata su un array associativo
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
Parse( Eval( Parse( "aa[\!"" || Char( :HEADER_ID[Row()] ) || "\!"]" ) ) );
Re: Ricerca equivalente a colonna singola VOh!
- Riassumere con un gruppo bidimensionale *)
- ... immessi in un array associativo per eliminare le voci mancanti:
Riepiloga ordina le voci, le mancanti vengono prima e vengono sovrascritte con la seconda coppia
- aumentare la velocità utilizzando Come costante
ancora più breve:
As Constant(
Summarize( bygp = by( :HEADER_ID, :VALUE_STR ) );
aa = Associative Array( bygp[1], bygp[2] );
);
aa[Char( :HEADER_ID[Row()] )];
*) importante: Summaize memorizza le stringhe (anche per le colonne numeriche)
-> aa[char(numero)]