Giggabytes

Luku 2 · Asiakashistoria

Asiakasmäärät, jotka eivät muutu huomaamatta

Asiakkaan attribuutit versioidaan, tila johdetaan ostopäivistä ja konfiguraatiossa pidetyistä raja-arvoista, ja testi epäonnistuu, jos myyntirivi osuu kahteen asiakasversioon.

  • 90päivää aktiivinen oston jälkeenactive_window_days
  • 180päivää ilman ostoa ennen poistumaachurn_after_days
  • 4error-tason tarkistusta historiallejoka ajossa
  • 1asiakasversio myyntiriviä kohdenmuuten dbt-testi epäonnistuu

Versiot, ei päällekirjoitusta

Jos kysytte ”viime vuosineljänneksen aktiivisia asiakkaita” kahdesti kuukauden välein, alusta, joka kirjoittaa asiakkaan attribuutit suoraan yli, voi antaa kaksi eri vastausta. Tässä attribuutti sen sijaan versioidaan (SCD-tyyppi 2). Tässä aineistossa muuttuva attribuutti on asiakkaan maa.

Uusi versio alkaa vain, kun arvo todella eroaa edellisestä. Saman arvon näkeminen uudelleen ei muuta mitään, eikä puuttuvaa arvoa koskaan tulkita muutokseksi. Jokainen versio on voimassa havaintohetkestä seuraavan version alkuun; nykyisellä versiolla ei ole loppua.

Yksi asiakas, kaksi versiotaKuvitteellinen asiakas · säännöt: customer_history.py ja docs/architecture/customer-history.md

Neljä havaintoa yhden asiakkaan maasta: United Kingdom, uudelleen United Kingdom, tyhjä arvo ja sitten France. Vain muutos arvoon France aloittaa uuden version. Versio 1 on voimassa ensimmäisestä havainnosta siihen asti, kun France havaitaan; versio 2 on voimassa siitä eteenpäin ja on nykyinen versio.

Jokainen myynti liitetään versioon, joka oli voimassa myynnin hetkellä, joten viime vuosineljänneksen raportti säilyttää viime vuosineljänneksen maan senkin jälkeen, kun asiakas muuttaa.

Tila ostopäivistä

Aktiivinen, passiivinen ja poistunut eivät ole lippuja, joita joku asettaa raportissa. Ne johdetaan ostopäivistä ja kahdesta raja-arvosta, jotka ovat tiedostossa config/customer_status.toml. Osto aktiivisen jakson sisällä vain pidentää sitä; osto poistuman jälkeen aloittaa uuden aktiivisen jakson, joka merkitään uudelleenaktivoitumiseksi, ja aiemmat tilat säilytetään, jotta uudelleenaktivoitumiset voidaan laskea ajan mittaan.

Tila määräytyy ostopäivistä ja kahdesta raja-arvostaactive_window_days = 90 · churn_after_days = 180 · config/customer_status.toml

Kun asiakas ostaa päivänä d, hän on aktiivinen päivään d plus 90 asti, passiivinen päivään d plus 180 asti ja poistunut siitä eteenpäin seuraavaan ostoon asti. Poistuneen asiakkaan osto merkitään uudelleenaktivoitumiseksi. Aktiivisen tai passiivisen asiakkaan osto vain aloittaa uuden aktiivisen jakson.

Kun raja-arvoa muutetaan ja ajo toistetaan, koko historia rakennetaan uudelleen samalla tavalla. Tila lasketaan jokaiselle asiakkaalle uudelleen joka ajossa, joten myöhässä saapuva osto käsitellään ilman erikoistapauksia, ja tiloja ilmoitetaan vain datan viimeiseen päivään asti: malli ei koskaan väitä asiakkaan poistuneen datan päättymisen jälkeen.

Historian tarkistusportit

Historiataulut tarkistetaan ennen kuin mikään lukee niitä. Kaikkien neljän tarkistuksen vakavuustaso on error: epäonnistuminen pysäyttää ajon. Sen jälkeen dbt-testi varmistaa liitoksen, josta jokainen raportti riippuu.

Havainnoista myyntiin, joka on liitetty oikeaan asiakasversiooncustomer_history.py · dbt/tests/assert_one_customer_version_per_line.sql

Silver-kerroksen asiakashavainnoista rakennetaan versioitu historia. Sille ajetaan neljä error-tason tarkistusta: yksilöllinen avain asiakasta ja voimassaolon alkupäivää kohden, täsmälleen yksi nykyinen versio asiakasta kohden, yhtenäiset aikavälit ilman aukkoja tai päällekkäisyyksiä sekä positiivinen aikavälin pituus. Sen jälkeen dbt-testi liittää jokaisen myyntirivin asiakasversioon, joka oli voimassa myynnin hetkellä, ja epäonnistuu, jos jokin rivi osuu muuhun kuin täsmälleen yhteen versioon.

  1. SilverAsiakashavainnotJokainen kerta, kun asiakas nähdään, ja tuolloin nähdyt attribuutit.
    • silver.customer_observation
  2. RakennusVersioitu historiaVersio alkaa vain todellisesta muutoksesta.
    • valid_from
    • valid_to
    • is_current
  3. TarkistusAikavälien portitYksilöllinen avain · yksi nykyinen versio · yhtenäinen · positiivinen pituus.
  4. GoldMyynti ↔ versioJokainen myyntirivi liitetään täsmälleen yhteen versioon myynnin hetkellä.
    • dim_customer
    • fct_transaction_line