Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeAlcune formule di colonna integrate come Col Mean() sono molto veloci perché calcolano valori costosi solo una volta e li restituiscono o modificano per ogni riga.Con le formule personalizzate questo è più difficile da ottenere perché ogni riga viene valutata separatamente.A volte l'utilizzo di una colonna separata per memorizzare valori intermedi può velocizzare le cose (ad esempio memorizzare la riga di numeri che soddisfa un determinato criterio, invece di ricalcolarli su ogni riga), ma ciò diventa complicato e difficile da seguire. Se esistesse un concetto di contesto di colonna tale che la valutazione di una riga possa accedere ai valori intermedi calcolati nella riga precedente, allora uno script potrebbe calcolare i risultati per tutte le righe contemporaneamente e quindi restituirli rapidamente e passare i risultati intermedi a quella successiva riga. La formula richiederebbe inoltre l'accesso all'intera colonna anziché solo alla riga corrente, quindi il riferimento alla colonna dovrebbe essere passato senza essere valutato.
Automazione e scriptingRi: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeQuesta opzione o funzione semplificherebbe la creazione di una trasformazione di colonna personalizzata per risolvere il problema descritto da @hogi in una delle risposte successive a conta unico
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeL'indagine su questo problema è in corso e ti aggiorneremo se arriviamo a una soluzione.
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeUn altro esempio: scrivere una funzione più fluida personalizzata come un filtro Savitzky-Golay che ignora le righe escluse.Questo può essere calcolato in modo efficiente per l'intera colonna contemporaneamente quando viene valutata la prima riga, vorrei memorizzare nella cache i valori dell'intera colonna durante la prima valutazione e quindi restituire semplicemente il risultato precalcolato in ciascuna riga invece di ricalcolarlo ogni volta.
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeSì, l'ho notato anch'io, ma certo che lo stavi usando in quel modo. Sembra prendere troppo sul serio la parte "costante" per quello che vorrei. Dovremo indagare, ma probabilmente sono necessarie nuove funzionalità per il riconoscimento delle dipendenze/riesecuzione.
Per casi come il tuo, normalmente faccio dipendere la formula da una variabile di tabella e aggiorno la variabile di tabella ogni volta durante il ciclo per avere un nuovo valore casuale.
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeCIAO @XanGregg ,
Potrebbe mancarmi qualcosa, ma non riesco a far rivalutare As Constant quando le formule della tabella vengono eseguite di nuovo.Sembra (probabilmente correttamente) memorizzare nella cache il suo valore finché la tabella è aperta. Ecco un esempio più completo che risolve questo problema utilizzando una variabile globale.
Visualizza altro...
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;
);
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeHai visto la funzione As Constant(x)? Questo dovrebbe gestire la parte unica della richiesta.
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
)
)Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeGrazie per l'esempio e le informazioni aggiuntive @ih . Modificato lo stato in investigazione.
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache valori tra righe - Stato modificato in: Analisi in corsoRi: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righeEcco un paio di potenziali casi d'uso, so che ce ne sono altri che sto dimenticando in questo momento.Molti di questi possono essere risolti facilmente per tabelle di piccole dimensioni o utilizzando più colonne o variabili di tabella, ma fornire una variabile di contesto di colonna li renderebbe più semplici.
- Utilizza un valore casuale nella formula della colonna in modo che possa essere scambiato in una simulazione
// 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
);
- Il numero di righe dall'inizio dell'ultimo campione fuori specifica.
- C'è tempo fino alla fine di questa campagna
- Media mobile degli ultimi 10 campioni per questo codice prodotto
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righePenso che questo post potrebbe dimostrare il problema Creazione di una funzione statistica personalizzata (formula) con byVar
Ri: Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righe - Stato modificato in: Richiede informazioni@ih potresti condividere un esempio di tabella dati che illustri il problema che descrivi?