Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenMein Unternehmen verwendet einen Geschäftskalender, bei dem die Wochen samstags beginnen. Gemäß der JSL-Funktion WEEKOFYEAR() haben wir zwei Optionen: Regel 1 und 2 für Wochen, die sonntags beginnen, und Regel 3 für Wochen, die montags beginnen.
Hat jemand ein JMP-Skript erstellt, um die Woche des Jahres für Wochen zu berechnen, die an einem anderen Tag als Sonntag oder Montag beginnen?
Betreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenEntschuldigen Sie die Verzögerung bei der Antwort. Deine Lösung funktioniert gut. Danke schön.
Nur um sicherzustellen, dass die Lösung klar ist,
@txnelson schrieb:
Guter Fang, hier ist eine einfache Lösung
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
durch Hinzufügen von 1 Tag zum Testdatum mit der Funktion „In Days(1)“, Sonntag = 2, Montag = 3, ... Freitag = 7 und Samstag wird wieder 1, da es in der Woche keinen achten Tag gibt.
Mir gefällt auch, dass man eine Variable innerhalb einer Formel definieren kann. Sehr hilfreich!
Betreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenGuter Fang, hier ist eine einfache Lösung
Names Default To Here( 1 );
testdate = Date MDY( 12, 31, 2017 );
Week Of Year( testdate + If( Year( testdate ) == Year( testdate + In Days( 1 ) ), In Days( 1 ), 0 ) );
Betreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenMir ist gerade aufgefallen, dass die Berechnung am Ende des Jahres scheinbar scheitert.
Im Beispiel für dieses Jahr ist der 30.09.17 der Beginn der Woche 41. Alle anderen Wochen, die am Samstag beginnen, werden ordnungsgemäß bis zum 30.12.17 hochgezählt, dem Beginn der Woche 54.
Anstatt die nächsten 6 Tage mit Woche 54 fortzufahren oder Woche 54 zu überspringen und Woche 1 zu beginnen, bezeichnet JMP aus irgendeinem Grund Samstag, den 30.12., als Woche 54 und Sonntag, den 31.12., als ersten Tag der Woche 1 im Jahr 2018. Scheint ein Fehler zu sein, da Wochen über einen Datensatz nicht an zwei verschiedenen Tagen beginnen sollten?
Ich muss eine if-Schleife hinzufügen, um alle Daten der Woche 54 in Woche 1 zu ändern.
Betreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenDanke, Txnelson!
Deine Antwort gefällt mir besser als die, die ich mir ausgedacht habe. Ihre Antwort ist effizienter ...
Ich habe eine Datumstabelle und habe drei separate Formeln verwendet, um der Geschäftswoche nur dann einen Tag hinzuzufügen, wenn der Tag Samstag ist:
In einer Spalte, Fiscal_Week, verwende ich die Funktion WeekofYear(): Week Of Year(:TIMESTAMP)
In der nächsten Spalte DayOfWeek bestimme ich, welcher Wochentag es ist: Day Of Week(:ET_TIME)
Und in der dritten Spalte, CompanyFiscalWeek, konnte ich mithilfe der Formel den korrekten Wert ermitteln:
If (:Day of Week == 7, :Fiscal_Week + 1, :Fiscal_Week )
Ich werde stattdessen Ihre Lösung verwenden. Danke !
JensBetreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenWenn Sie einen Tag zur Berechnung hinzufügen, erhalten Sie, was Sie wollen
Names Default To Here( 1 );
Week Of Year( Today() + In Days( 1 ) );
Betreff: Berechnung von WEEKOFYEAR() für Wochen, die an einem anderen Tag als Sonntag oder Montag beginnenNeben den unterschiedlichen Tagen für „Wochenanfang“ ist es auch etwas überraschend, wie die Woche des Jahres im Allgemeinen berechnet wird.
Besonders beim Vergleich von „Woche des Jahres“ und „Jahreswoche“ (aus dem neuen Formel-Kontextmenü).
Im Jahr 2023 war Regel Nr. 3 im Vergleich zu Regel Nr. 1 um mehr als eine Woche verzögert:


New Table( "Week",
Add Rows( 30 ),
New Column( "date",
Format( "m/d/y", 12 ),
Formula( Date MDY( 1, 1, 2023 ) + (Row() - 11) * (24 * 3600) )
),
New Column( "\!"Year Week\!"",
Character,
"Nominal",
Formula(
Local(
{w = Week Of Year( :date, 3 ), y = Year( :date ), m = Month( :date )
},
If( Is Missing( :date ),
"",
Char( If( m / w >= 12, y + 1, w / m >= 52, y - 1, y ) ) ||
If( w >= 10, "W", "W0" ) || Char( w )
)
)
)
),
New Column( "Week of Year, rule1",
Formula( Week Of Year( :date ) )
),
New Column( "Week of Year, rule3",
Format( "Best", 12 ),
Formula( Week Of Year( :date, 3 ) ),
Color Cells( {32, {19, 20, 21, 22, 23, 24, 25}} )
),
New Column( "day",
Formula( Day Of Week( :date ) ),
Value Labels( {1 = "Sun", 2 = "Mon"} ),
Use Value Labels( 1 )
)
)