Closed areedv closed 6 years ago
Reproduksjon av feilen er vist under. Alle kommandoer er kjørt på Rapporteket TEST. Av hensyn til forenkling er det bare benyttet en øvre (datoTil
) og ingen nedre (datoFra
) begrensning av dato.
Angi register, databasemotor og sluttdato:
registryName <- "norgast"
dbType <- "mysql"
datoTil <- "2017-07-31"
Lag databasespørring:
query <- paste0("SELECT
a.OpDato
FROM
AlleVariablerNum a
INNER JOIN
ForlopsOversikt f
ON
a.ForlopsID = f.ForlopsID
WHERE
f.HovedDato <= \'", datoTil, "'")
Hent data:
RegData <- rapbase::LoadRegData(registryName, query, dbType)
Lag ny variabel OperasjonsDato slik det er gjort i NorgastPreprosesser.R. Sjekk på maxverdi og klasse på opprinnelig og ny variabel er også vist:
RegData$OperasjonsDato <- as.POSIXlt(RegData$OpDato, format="%Y-%m-%d")
max(RegData$OpDato)
[1] "2017-07-31"
class(RegData$OpDato)
[1] "Date"
max(RegData$OperasjonsDato)
[1] "2017-07-31 UTC"
class(RegData$OperasjonsDato)
[1] "POSIXlt" "POSIXt"
Maksimumsverdi stemmer med den som er oppgitt i spørringen. Legg merke til at opprinnelig variabel er av klassen Date og at tidssone ikke er angitt. Ved konvertering til klassen POSIXlt benyttes default tidssone UTC.
Det neste er en (ekstra) filtrering på angitt datobegrensning hentet fra NorgastLibUtvalg.R:
indDato <- which(RegData$OperasjonsDato <= as.POSIXlt(datoTil))
length(RegData$OperasjonsDato)
[1] 14574
length(indDato)
[1] 14554
max(RegData$OperasjonsDato[indDato])
[1] "2017-07-30 UTC"
Selv om datobegrensningen er den samme som i opprinnelig spørring mot databasen (og at man da forventer at ingen verdier filtreres ut) så tas det i dette tilfellet likevel vekk 20 observasjoner (som alle har Operasjonsdato 2017-07-31, ikke vist). Årsaken ligger i ulik tidssone for de verdier som sammenholdes i filteret over:
as.POSIXlt(datoTil)
[1] "2017-07-31 CEST"
Har faset ut posixlt og erstattet med Date i NoRGast i commit 180de771
Etter at data er hentet fra databasen, ved filtrering på dato blir ikke endepunktet (siste dag) med videre. Årsaken er at de data som matches i filteret (utilsiktet) blir gitt ulik tidssone. Faktisk feil er større i sommerhalvåret enn i vinterhalvåret :-)