J'ai une table principale avec horodatage pour 2021 dans une résolution d'une minute ("Timestamp-1min"). Besoin de remplir le tableau principal avec les données du second tableau avec une résolution d'un jour ("Start-End-TS1") en fonction d'une paire de conditions pour chaque jour de l'année (Sunrise, Sunset : Twilight Start and End) tout en faisant correspondre les jour, mois et [time(Hr:min) dans les conditions].
Je l'ai fait pour la date 14/06/2021 - qui se trouve dans le tableau "Timestamp-1min-Result".
J'ai ajouté une colonne - "S Start-S End" - qui est Sunrise-Start, Sunrise-End et une autre colonne pour Twilight (Start and End). Je souhaite également remplir la durée du jour, Mid T, Twilight time et un code colonne (DT/TT) - Heure de jour/crépuscule qui aidera à effectuer des statistiques avec une autre table que je rejoindrais plus tard. Comment puis-je simplement utiliser des formules pour remplir l'heure totale de la journée et l'heure du crépuscule (dans le tableau des résultats) au lieu de prendre les valeurs du deuxième tableau. Comment puis-je créer le code pour la journée seule (en tant que DT) et l'heure du crépuscule (en tant que TT) seule ?
Comment le faire de manière interactive ? OU Est-ce que JSL est le seul moyen ?
Le seul moyen efficace de faire ce que vous voulez est d'utiliser un morceau de JSL.Le faire en utilisant plusieurs colonnes de formules forcerait la lecture d'un demi-million d'enregistrements plusieurs fois.Le JSL ci-dessous lit la table principale une seule fois.
En outre, vous pouvez tout faire dans une seule table, mais vous devrez alors prétendre que vous utilisez Excel et déplacer toutes les données de la table de données de recherche dans la table principale, puis masquer les colonnes.Ce ne serait pas joli.Voici le script qui, je pense, devrait vous aider à résoudre votre problème.Avec un demi-million d'enregistrements, il faut quelques minutes pour effectuer toutes les comparaisons requises.Veuillez noter que le script recherche 2 tables de données avec des noms spécifiques.
Names Default To Here( 1 );
dtMain = Data Table( "Timestamp-1min" );
dtLookUP = Data Table( "Start-End-TS1" );
// Add the required new colummns
dtMain << New Column( "S Start-S End", format("h:m:s"));
dtMain << New Column( "T Start-T End", format("h:m:s"));
dtMain << New Column( "Day Length", format("h:m:s"));
dtMain << New Column( "Mid T", format("h:m:s"));
dtMain << New Column( "Twilight time", format("h:m:s"));
dtMain << New Column( "DT/TT", character);
// Loop through Main table and set values
DT = "";
dl = twTime = .;
For( i = 1, i <= N Rows( dtMain ), i++,
If( i == 1 | Day( dtMain:Timestamp[i] ) != Day( dtMain:Timestamp[i - 1] ),
theRow = Try(
(dtLookUp << get rows where(
dtLookUp:Month 2 == Month( dtMain:Timestamp[i] ) & dtLookUp:Date == Day( dtMain:Timestamp[i] )
))[1],
.
)
);
// Get the time for the current row
theTime = Date MDY( 12, 31, 1899 ) + 3600 * Hour( dtMain:Timestamp[i] ) + 60 * Minute( dtMain:Timestamp[i] )
+Second( dtMain:Timestamp[i] );
theNextTime = Date MDY( 12, 31, 1899 ) + 3600 * Hour( dtMain:Timestamp[i + 1] ) + 60 *
Minute( dtMain:Timestamp[i + 1] ) + Second( dtMain:Timestamp[i + 1] );
// If this is a Twilight Start, record the time, and set the value for Twilight time
If( dtLookUp:Twilight start[theRow] >= theTime & dtLookUp:TwilightStart[theRow] <= theNextTime,
dtMain:"T Start-T End"n[i] = dtLookUp:Twilight start[theRow];
DT = "TT";
twTime = dtLookUp:Twilight Length[theRow];
);
// If this is Sunrise, recorde the time and set the value for Day Length
If( dtLookUp:Sunrise[theRow] >= theTime & dtLookUp:Sunrise[theRow] <= theNextTime,
dtMain:"S Start-S End"n[i] = dtLookUp:Sunrise[theRow];
DT = "DT";
dl = dtLookUp:Day Length[theRow];
);
// If sunset has ended record the value and blank out the day length time
If( dtLookUp:Sunset[theRow] >= theTime & dtLookUp:Sunset[theRow] <= theNextTime,
dtMain:"S Start-S End"n[i] = dtLookUp:Sunset[theRow];
DT = "TT";
dl = .;
);
// If twighlight has ended record the value and blank out the Twilight time
If( dtLookUp:Twilight End[theRow] >= theTime & dtLookUp:Twilight End[theRow] <= theNextTime,
dtMain:"T Start-T End"n[i] = dtLookUp:Twilight End[theRow];
DT = "";
twTime = .;
);
// If this is the Mid T time, record the value
If( dtLookUp:Mid T[theRow] >= theTime & dtLookUp:Mid T[theRow] <= theNextTime,
dtMain:Mid T[i] = dtLookUp:Mid T[theRow]
);
// Write the repeating values
dtMain:"DT/TT"n[i] = DT;
dtMain:Twilight time[i] = twTime;
dtMain:Day Length[i] = dl;
// Do some cleanup on ending records
If( Is Missing( dtMain:"S Start-S End"n[i] ) == 0 & Is Missing( dtMain:Day Length[i - 1] ) == 0,
dtMain:Day Length[i] = dtMain:Day Length[i - 1]
);
If( Is Missing( dtMain:"T Start-T End"n[i] ) == 0 & Is Missing( dtMain:Twilight time[i - 1] ) == 0,
dtMain:Twilight time[i] = dtMain:Twilight time[i - 1]
);
If( Is Missing( dtMain:Twilight time[i] ) == 0 & dtMain:"DT/TT"n[i] == "",
dtMain:"DT/TT"n[i] = dtMain:"DT/TT"n[i - 1]
);
);
Nelson,
Incroyable! Merci beaucoup!!!
Besoin de savoir par où commencer pour pratiquer la rédaction de scripts. Existe-t-il des exemples de scripts de base que nous pourrions suivre et bricoler ?