Problema con una formula di colonna per assegnare le fasi di produzioneCiao a tutti,
Sto provando a scrivere una formula di colonna che esaminerà la differenza di data tra due righe e se >= di un determinato valore (in questo caso 4 giorni), la colonna dovrebbe diminuire il valore della fase. Se la differenza di data è <4, dovrebbe mantenere il valore della fase precedente. Ho definito due variabili locali nella formula: fase e MinDaysbreak, ovvero i giorni minimi tra le fasi (4). La colonna :"Data/Ora:"n è la colonna della data su cui scorre il ciclo For().

La mia formula è simile alla seguente:

E il codice JSL per la formula è il seguente:
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
Non ricevo errori per la formula, la formula non viene soppressa, ma la colonna è ancora vuota. Non ottengo ancora nulla per l'ultima riga anche se rimuovo la prima istruzione else nel primo If() e l'ultima voce per la colonna dovrebbe essere 9, poiché questa è la variabile locale fase. So che ci sono 9 fasi.
Non sono sicuro di cosa sto facendo di sbagliato, ma non sarei sorpreso se fosse un semplice errore che sto trascurando.
Grazie per qualsiasi aiuto!,
DS
Modellazione statistica avanzataAutomazione e scriptingEsplorazione e visualizzazione dei datiCondivisione e comunicazione dei risultatiRe: Problema con una formula di colonna per assegnare le fasi di produzioneLa colonna è vuota perché la funzione For() non restituisce un valore. Prova a incollare questo codice nell'editor delle formule:
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)Penso che funzionerà come previsto. Tieni presente queste modifiche:
– La fase aggiuntiva che imposta il valore della riga corrente (dopo essere stata calcolata all'interno del ciclo For). Senza questo ottieni una colonna vuota.
– Per funzionare correttamente non dovresti scorrere tutte le righe, ma solo fino alla riga corrente utilizzando Row() . Altrimenti otterrai lo stesso valore per ogni riga.
– È necessario un indice per entrambe le date per essere sicuri di confrontarle sempre con la riga successiva. Senza di esso è difficile prevedere il risultato (dipende dai dati).
Ho anche definito la i iniziale come parametro locale, ma credo che non sia necessario.
Tuttavia, è abbastanza insolito utilizzare un ciclo for nelle formule di colonna. Se si dispone di un set di dati di grandi dimensioni, può essere molto inefficiente eseguire il loop sulla tabella per impostare il valore per ogni riga. Esistono altri modi per risolvere questo problema, con la formula di colonna o JSL.
/SM