Ich habe eine Haupttabelle mit Zeitstempel für 2021 in einer Minutenauflösung ("Timestamp-1min"). Sie müssen die Haupttabelle mit Daten aus der zweiten Tabelle mit einer Tagesauflösung ("Start-End-TS1") füllen, abhängig von einem Paar von Bedingungen für jeden Tag in einem Jahr (Sonnenaufgang, Sonnenuntergang: Beginn und Ende der Dämmerung), während Sie die Tag, Monat und [Zeit (Std:Min) in den Bedingungen].
Ich habe es für das Datum 14.06.2021 getan, das in der Tabelle "Timestamp-1min-Result" steht.
Ich habe eine Spalte "S Start-S End" hinzugefügt, die Sunrise-Start, Sunrise-End und eine weitere Spalte für Twilight (Start und Ende) ist. Ich möchte auch die Tageslänge, Mid T, Twilight-Zeit und einen Code ausfüllen Spalte (DT/TT) – Tageszeit/Dämmerungszeit, die bei der Durchführung von Statistiken mit einer anderen Tabelle hilft, der ich später beitreten würde. Wie kann ich einfach Formeln verwenden, um die Gesamttageszeit und die Dämmerungszeit (in der Ergebnistabelle) auszufüllen, anstatt Werte aus der zweiten Tabelle zu nehmen. Wie kann ich den Code nur für Daytime (als DT) und Twilight time (als TT) erstellen?
Wie geht das interaktiv? ODER Ist JSL der einzige Weg?
Die einzige effiziente Möglichkeit, das zu tun, was Sie wollen, ist die Verwendung eines Stücks JSL.Die Verwendung mehrerer Formelspalten würde das mehrmalige Lesen einer halben Million Datensätze erzwingen.Die folgende JSL liest die Haupttabelle nur einmal durch.
Sie könnten dies auch alles in einer Tabelle tun, aber dann müssten Sie so tun, als würden Sie Excel verwenden und alle Daten aus der Nachschlagedatentabelle in die Haupttabelle verschieben und dann die Spalten ausblenden.Es wäre nicht schön.Hier ist das Skript, von dem ich denke, dass es Sie einen langen Weg zur Lösung Ihres Problems bringen sollte.Bei einer halben Million Datensätze dauert es einige Minuten, um alle erforderlichen Vergleiche durchzuführen.Bitte beachten Sie, dass das Skript nach 2 Datentabellen mit bestimmten Namen sucht.
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,
Tolle! Vielen Dank!!!
Sie müssen wissen, wo Sie anfangen sollen, um das Skripting zu üben. Gibt es grundlegende Scripting-Beispiele, denen wir folgen und die wir selbst basteln könnten?