Giggabytes

Luku 1 · Kalenterin korjaus

Yksi kalenteri, rakennettu kerran, todennettu joka ajossa

Yksi konfiguraatio tuottaa jokaisen kalenterin, jolla liiketoiminta raportoi. Faktat liitetään päivämäärään, ja kolme tarkistusta ajetaan oikealla datalla ennen kuin mikään päätyy raporttiin.

  • 3konfiguroitua kalenteriavähittäiskauppa 4-5-4, vähittäiskauppa 4-4-5, gregoriaaninen
  • 504testattua kalenterikonfiguraatiotajokainen vuosi 2000–2039
  • 3error-tason tarkistusta oikealla datallajoka ajossa, ennen yhtään raporttia
  • 10,4 %oikopolun keskimääräinen kuukausivirhetämä virhe poistuu

Yksi konfiguraatio

Jokainen kalenteri, jolla liiketoiminta raportoi, määritellään kerran tiedostossa config/calendars.toml. Sen muuttaminen on katselmoitava muutos, koska se muuttaa raportoituja jaksoja. Jokainen merkintä kertoo kuvion, viikon aloituspäivän ja sen, miten vuosi päättyy. Mikään kalenteriin liittyvä ei ole raportin sisällä.

Kolme kalenteria, yksi tiedostoconfig/calendars.toml

Yksi konfiguraatiotiedosto määrittelee kolme kalenteria: retail_454, 4-5-4-kalenteri, jonka viikot alkavat sunnuntaina ja vuosi päättyy 31. tammikuuta lähimpään lauantaihin; retail_445, 4-4-5-kalenteri, jonka viikot alkavat maanantaina ja vuosi päättyy joulukuun viimeiseen sunnuntaihin; sekä gregorian, jonka viikot ovat ISO-standardin mukaisia ja alkavat maanantaina.

Päivämääristä jokaiseen kalenteriin

Generaattori kirjoittaa yhden rivin päivää ja kalenteria kohden. Viikot kootaan vähittäiskaupan jaksoiksi; kalenterikuukaudet muodostetaan pelkistä päivämääristä eikä koskaan viikoista. Faktoilla on päivämäärä, ne liitetään päivämäärärunkoon ja kootaan sen kalenterin kautta, jota kysymys edellyttää. Siksi yleiskatsaussivun oikopolku ei voi toteutua tässä: yksikään taulu ei kohdista kokonaista viikkoa kuukaudelle.

Faktat liitetään päivämäärään ja kootaan sen kalenterin kautta, jota kysymys edellyttääGold-taulut kirjoittaa calendar_tables.py; faktat ja mart-taulut rakennetaan dbt:llä

Gold-kalenteritaulut: calendar_date, jossa on yksi rivi päivää ja kalenteria kohden, calendar_week, calendar_period ja gregorian_month. Faktataulut liitetään päivämäärään, joten viikko-, jakso- ja kalenterikuukausiraportit koostavat kaikki samat päivittäiset faktat.

53. viikko

Kokonaisista viikoista koostuva vähittäiskaupan vuosi on 364 päivää, joten muutaman vuoden välein tarvitaan 53. viikko. Sen sijoitus muuttaa vuosivertailuja. Tässä se sijoitetaan yksiselitteisesti: se lisätään jaksoon 12 ja merkitään is_leap_week-lipulla, jotta raportti voi tietoisesti ottaa sen mukaan tai jättää sen pois. Kalenteritestit varmistavat, että 53 viikon vuodet toistuvat viiden tai kuuden vuoden välein jokaisessa konfiguraatiossa.

4-5-4-vuosi, jossa on 53 viikkoaViikko 53 lisätään jaksoon 12 ja merkitään is_leap_week-lipulla, joten muut jaksot säilyttävät muotonsa

Kaksitoista vähittäiskaupan jaksoa noudattaa 4-5-4-kuviota 52 viikon ajan. 53 viikon vuonna ylimääräinen viikko lisätään jaksoon 12, joka pitenee 5 viikon mittaiseksi, ja viikko merkitään karkausviikoksi.

Tarkistetaan joka ajossa

Yksikkötestit varmistavat logiikan; nämä tarkistukset varmistavat datan. Ne ajetaan oikeille tapahtumille aina, kun kalenterivaihe ajetaan. Jokaisen vakavuustaso on error: epäonnistuminen pysäyttää dataputken ennen kuin mikään päätyy raporttiin, ja jokainen tulos kirjoitetaan tauluun ops.dq_results.

Kalenterivaihe oikealla datallacalendar_tables.py · tulokset taulussa ops.dq_results

Kalenterivaihe generoi kalenteritaulut ja ajaa sitten oikealle datalle kolme error-tason tarkistusta: jokainen tapahtumapäivä vastaa täsmälleen yhtä kalenteripäivää, jokainen vähittäiskaupan viikko kuuluu täsmälleen yhteen jaksoon, ja summat säilyvät viikoittain ja jaksoittain jokaisessa konfiguroidussa kalenterissa. Vasta sitten taulut syöttävät raportteja.

  1. GenerointiKalenteritaulutTiedostosta config/calendars.toml, jokaiselle konfiguroidulle kalenterille.
  2. Tarkistus 1Jokainen tapahtumapäivä kohdistettuJokaisella päivällä, jolla on myyntiä, on täsmälleen yksi kalenteririvi.
    • transaction_dates_mapped
  3. Tarkistus 2Yksi jakso viikkoa kohdenYhtäkään vähittäiskaupan viikkoa ei jaeta jaksojen kesken.
    • retail_week_in_one_period
  4. Tarkistus 3Summat säilyvätViikoittain ja jaksoittain laskettu summa on sama kuin päivittäin laskettu.
    • totals_conserved_by_week_and_period
  5. JulkaisuRaportitVain ajo, joka läpäisee jokaisen tarkistuksen, päätyy Gold-mart-tauluihin.

504 kalenteria, 40 vuotta

Kolme konfiguroitua kalenteria ovat vain ne, joita tämä liiketoiminta käyttää. Kalenterimoottori testataan jokaisella vähittäiskaupan kalenterilla, jonka se voi konfiguraatiosta riippuen tuottaa. Jokaisessa 504 konfiguraatiossa jokaisen vuoden 2000–2039 on seurattava edellistä ilman aukkoa tai päällekkäisyyttä, alettava konfiguroituna viikonpäivänä, kestettävä 364 tai 371 päivää ja päätyttävä vuoden päättymissäännön mukaiseen päivään, ja 53 viikon vuosien on toistuttava viiden tai kuuden vuoden välein. Jaksojen pituuksien on noudatettava kuviota, ja karkausviikko voi olla vain jaksossa 12. Sitä, että jokainen päivämäärä vastaa täsmälleen yhtä viikkoa ja jaksoa, testataan edustavalla joukolla kalentereita, ja se tarkistetaan oikealla datalla joka ajossa.

Kaikki vähittäiskaupan kalenterit, jotka kalenterimoottori voi konfiguraatiosta riippuen tuottaatests/unit/test_calendar_boundaries.py · kunkin konfiguraation vuodenvaihteet tarkistetaan jokaiselta vuodelta 2000–2039

3 jaksokuviota kertaa 7 viikon aloituspäivää kertaa 2 vuoden päättymissääntöä kertaa 12 päättymiskuukautta on 504 vähittäiskaupan kalenterikonfiguraatiota, joiden vuodenvaihteet testataan jokaiselta vuodelta 2000–2039.