Reguły jakości danych: 12 przykładów z progami
Szukasz gotowych reguł jakości danych z przykładami, które da się uruchomić na własnej tabeli? Poniżej jest 12 reguł w SQL: od kompletności, przez walidację NIP, e-maila i kodu pocztowego, po duplikaty i spójność między tabelami. Każda ma zapytanie, próg akceptacji i sposób naprawy. Na końcu wszystkie wyniki trafiają do jednego zapytania z semaforem, który wstawisz do arkusza Scorecard. Kompletność omówiłem wcześniej w 5 zapytaniach SQL do pomiaru kompletności, więc tutaj idziemy krok dalej.
Dane są w całości syntetyczne. Całość (tabele, 20 rekordów, 12 reguł i zapytanie zbiorcze) pobierzesz jako reguly-jakosci-danych.sql. Skrypt uruchomiłem w PostgreSQL 16. Reguły R03–R06 używają operatora ~ (regex), a R07 działa na INTERVAL, więc w innych bazach wymagają zmian składni.
Jak czytać reguły i progi
Reguły są pogrupowane w pięć kategorii. Dwie z nich dzielą wymiar zgodności formatu (Validity) z wpisu Wymiary jakości danych, żeby łatwiej było zrobić z nich osobne wiersze scorecardu:
| Kategoria w tym wpisie | Reguły | Wymiar z wpisu o wymiarach |
|---|---|---|
| Kompletność | R01–R02 | Kompletność |
| Poprawność (format i algorytmy) | R03–R06 | Zgodność formatu (Validity) |
| Ważność (zakresy, daty, słowniki) | R07–R08 | Zgodność formatu (Validity) |
| Unikalność | R09–R10 | Unikalność |
| Spójność | R11–R12 | Spójność |
„Ważność” oznacza tu poprawność zakresu i słownika, a nie to, czy dane się zestarzały (to wymiar Aktualność).
Progi są dwa i warto ich nie mylić:
- Semafor scorecardu jest jednakowy dla wszystkich reguł: zielony od 95%, żółty 85–95%, czerwony poniżej 85%. Służy do pierwszego pomiaru.
- Docelowe SLA ustawiasz osobno dla każdej reguły, zależnie od wagi biznesowej. Dla identyfikatorów podatkowych (NIP w B2B) to w tym wpisie 99,5%, dla formatu telefonu 95%. Takie same 99,5% pokazałem we wpisie o wymiarach jako próg akceptacji reguły „Każdy klient musi mieć poprawny NIP”.
Przedstawione SLA to przykłady. O prawdziwych progach decyduje właściciel danych, nie autor zapytania.
Dane testowe
Tabela klienci ma 20 rekordów (10 firm B2B i 10 klientów B2C), a do tego jest mały słownik slownik_pna (wycinek 15 kodów) i tabela zamowienia. W danych celowo siedzą błędy, które łapią kolejne reguły:
-
id = 6: NIP1234567890. Suma ważona daje 230, a 230 mod 11 = 10, czyli taki NIP nie może istnieć. -
id = 7: NIP z błędną cyfrą kontrolną oraz kod pocztowy z Warszawy przy mieście Kraków. -
id = 8: firma bez NIP i bez nazwy. -
id = 9: duplikatid = 1(ten sam NIP, ta sama osoba, e-mail wielkimi literami). -
id = 10: NIP z myślnikami i zamówienie w realizacji dla klienta o statusieZAMKNIETY. -
id = 15: e-mail złożony z samych spacji. -
id = 16: e-mail bez@i telefon12345. -
id = 17: kod pocztowy79-100, którego nie ma w słowniku, i telefon+48000000000. -
id = 18: data urodzenia z przyszłości i rejestracja późniejsza niż ostatni zakup. -
id = 19: rok urodzenia 1899, rabat 85% i status spoza słownika. -
id = 20: duplikat rozmytyid = 11i kod pocztowy bez myślnika.
Kompletność
R01: e-mail bez NULL, pustych tekstów i zaślepek
email IS NOT NULL nie wystarczy, bo formularze zapisują też spacje i zaślepki typu brak. Zapytanie przycina wartość i sprawdza listę zaślepek (uzupełnij ją o te z własnej bazy). Wynik: 95,0% (19/20), błędny id = 15. Semafor zielony, ale przy SLA 99% to za mało dla głównego kanału kontaktu. Naprawa: zamień zaślepki na NULL i dodaj walidację po TRIM() przy zapisie.
-- R01: Wykrycie rekordów z brakującym lub pozornie wypełnionym adresem e-mail
SELECT
id,
typ_klienta,
imie_nazwisko,
email
FROM klienci
WHERE email IS NULL
OR TRIM(email) = ''
OR LOWER(TRIM(email)) IN ('brak', 'nie podano', 'n/a', 'null', '-');
R02: kompletność warunkowa, NIP i nazwa firmy dla B2B
Od klientów indywidualnych NIP nie wymagamy, od firm tak. Mianownikiem są więc tylko rekordy B2B (10), a nie cała tabela. Wynik: 90,0% (9/10), błędny id = 8. Semafor żółty, SLA 100%. Naprawa: ograniczenie CHECK (typ_klienta <> 'B2B' OR (nip IS NOT NULL AND TRIM(nip) <> '' AND nazwa_firmy IS NOT NULL AND TRIM(nazwa_firmy) <> '')) i uzupełnienie braków z rejestru (GUS, CEIDG).
-- R02: Kompletność warunkowa — brak NIP lub nazwy firmy u klientów B2B
SELECT
id,
typ_klienta,
imie_nazwisko,
nazwa_firmy,
nip
FROM klienci
WHERE typ_klienta = 'B2B'
AND (
nip IS NULL OR TRIM(nip) = ''
OR nazwa_firmy IS NULL OR TRIM(nazwa_firmy) = ''
);
Poprawność: format i algorytmy
R03: walidacja NIP w SQL
NIP ma 10 cyfr, a ostatnia jest cyfrą kontrolną. Mnożysz pierwsze dziewięć cyfr przez wagi 6, 5, 7, 2, 3, 4, 5, 6, 7, sumujesz i dzielisz z resztą przez 11. Reszta musi równać się dziesiątej cyfrze. Pułapka: jeśli reszta wynosi 10, numer jest nieprawidłowy, bo nie da się jej zapisać jedną cyfrą. W algorytmie REGON reszta 10 zamienia się w 0, ale w NIP-ie tego robić nie wolno. W SQL wystarczy porównanie reszty z dziesiątą cyfrą, które takie numery odrzuci samo. Zapytanie pokazuje też powód błędu.
Wynik: 60,0% (6/10), błędne id = 6, 7, 8, 10. Semafor czerwony przy SLA 99,5%. Naprawa w dwóch krokach: usuń z pola znaki niebędące cyframi (REGEXP_REPLACE(nip, '[^0-9]', '', 'g')), co naprawi id = 10. Rekordy z błędną cyfrą kontrolną (id = 6, 7) sprawdź w rejestrze po nazwie podmiotu.
-- R03: Walidacja NIP (10 cyfr + suma kontrolna, wagi 6-5-7-2-3-4-5-6-7 mod 11)
WITH b2b AS (
SELECT id, nazwa_firmy, nip,
CASE WHEN nip ~ '^[1-9][0-9]{9}$' THEN
(CAST(SUBSTR(nip, 1, 1) AS INTEGER) * 6 +
CAST(SUBSTR(nip, 2, 1) AS INTEGER) * 5 +
CAST(SUBSTR(nip, 3, 1) AS INTEGER) * 7 +
CAST(SUBSTR(nip, 4, 1) AS INTEGER) * 2 +
CAST(SUBSTR(nip, 5, 1) AS INTEGER) * 3 +
CAST(SUBSTR(nip, 6, 1) AS INTEGER) * 4 +
CAST(SUBSTR(nip, 7, 1) AS INTEGER) * 5 +
CAST(SUBSTR(nip, 8, 1) AS INTEGER) * 6 +
CAST(SUBSTR(nip, 9, 1) AS INTEGER) * 7) % 11
END AS kontrola
FROM klienci
WHERE typ_klienta = 'B2B'
)
SELECT id, nazwa_firmy, nip,
CASE
WHEN nip IS NULL OR TRIM(nip) = '' THEN 'Brak NIP'
WHEN nip !~ '^[1-9][0-9]{9}$' THEN 'Błędny format (10 cyfr bez kresek)'
WHEN kontrola = 10 THEN 'Reszta mod 11 = 10: taki NIP nie istnieje'
ELSE 'Błędna cyfra kontrolna'
END AS powod_bledu
FROM b2b
WHERE nip IS NULL OR TRIM(nip) = ''
OR nip !~ '^[1-9][0-9]{9}$'
OR kontrola IS DISTINCT FROM CAST(SUBSTR(nip, 10, 1) AS INTEGER);
R04: składnia adresu e-mail
Reguła łapie brak @, spacje, podwójne kropki i adresy dłuższe niż 254 znaki. Nie próbuj kopiować wielolinijkowego regexa z pełnej gramatyki RFC 5322, bo i tak nie powie Ci, czy skrzynka istnieje. Wynik: 90,0% (18/20), błędne id = 15, 16. Semafor żółty, SLA 98%. Naprawa: LOWER(TRIM(email)), poprawa literówek w popularnych domenach, a istnienie skrzynki potwierdzaj w procesie (double opt-in, o czym niżej).
-- R04: Walidacja składni adresu e-mail wg praktycznych wytycznych RFC 5321 / 5322
SELECT
id,
imie_nazwisko,
email
FROM klienci
WHERE email IS NULL
OR LENGTH(TRIM(email)) > 254
OR email LIKE '%..%'
OR email !~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';
R05: kod pocztowy, format i słownik PNA
Regex NN-NNN przepuszcza 100 000 kombinacji, a w użyciu jest około 20 tysięcy kodów z Oficjalnego Spisu PNA Poczty Polskiej. Dlatego format sprawdzamy razem ze słownikiem. W przykładzie to wycinek 15 kodów, w produkcji załaduj pełny spis. Wynik: 90,0% (18/20), błędne id = 17, 20: 79-100 ma dobry format, ale nie ma go w słowniku, a 90001 nie ma myślnika. Semafor żółty, SLA 98%. Naprawa: wstaw brakujący myślnik (SUBSTR(kod_pocztowy, 1, 2) || '-' || SUBSTR(kod_pocztowy, 3, 3)), a resztę przypisz ponownie po miejscowości i ulicy.
Prefiks 79- jest dobrym przykładem, bo w spisie PNA nie ma żadnego kodu, który by się nim zaczynał. Kusi, żeby załatać regex wykluczeniem ^(?!79)[0-9]{2}-[0-9]{3}$, ale to odrzuci tylko 1000 kombinacji z około 80 tysięcy, które mają dobry format, a nie istnieją. Łatanie wzorca nie ma więc sensu: sprawdzenie składni mówi tylko, że zapis wygląda jak kod pocztowy. Czy taki kod istnieje, rozstrzyga dopiero JOIN albo EXISTS ze słownikiem.
Ciekawostka: kod 02-137 (Warszawa, Włochy, ul. Radarowa, numery od 1 do końca) jest zapisany w Oficjalnym Spisie PNA Poczty Polskiej i składa się z cyfr „2137”, czyli liczby znanej z polskiego internetu. Przejdzie więc i test formatu, i słownik, czego nie da się powiedzieć o 79-100.
-- R05: Walidacja kodu pocztowego — format NN-NNN oraz obecność w słowniku PNA
SELECT
k.id,
k.imie_nazwisko,
k.kod_pocztowy,
k.miasto,
CASE
WHEN k.kod_pocztowy IS NULL OR k.kod_pocztowy !~ '^[0-9]{2}-[0-9]{3}$'
THEN 'Błędny format składniowy (wymagany NN-NNN)'
ELSE 'Kodu nie ma w słowniku PNA'
END AS diagnoza
FROM klienci k
LEFT JOIN slownik_pna p ON k.kod_pocztowy = p.kod_pocztowy
WHERE k.kod_pocztowy IS NULL
OR k.kod_pocztowy !~ '^[0-9]{2}-[0-9]{3}$'
OR p.kod_pocztowy IS NULL;
R06: numer telefonu (E.164, +48)
Polskie numery mają 9 cyfr, pierwsza nie jest zerem. Regex sprawdza też zapis +48 i odrzuca oczywiste numery fikcyjne. Uwaga na kontrast z kodami pocztowymi: w numerach telefonów 79 jest poprawnym początkiem (zakres sieci komórkowych), więc +48791234567 przejdzie regułę, a kod 79-100 nie. Wynik: 90,0% (18/20), błędne id = 16, 17. Semafor żółty, SLA 95% (dane pomocnicze). Naprawa: w ETL usuń spacje i myślniki, zamień 0048 na +48, dopisz +48 do 9-cyfrowych numerów, a numery fikcyjne wyczyść do NULL.
-- R06: Walidacja polskiego numeru telefonu w formacie E.164 (+48 i 9 cyfr planu krajowego)
SELECT
id,
imie_nazwisko,
telefon
FROM klienci
WHERE telefon IS NULL
OR telefon !~ '^\+48[1-9][0-9]{8}$'
OR SUBSTR(telefon, 4, 9) IN ('111111111', '222222222', '555555555', '999999999', '123456789');
Ważność: zakresy, daty, słowniki
R07: data urodzenia
Reguła rozszerza przykład „data urodzenia nie jest z przyszłości” o dolną granicę, 120 lat wstecz. Łapie błąd roku (2030-01-01) i artefakty importu z arkuszy (1899-01-01). Wynik: 90,0% (18/20), błędne id = 18, 19. Semafor żółty, SLA 99%. Naprawa: wyczyść anomalie do NULL, żeby nie psuły analiz kohortowych, albo wylicz datę z PESEL-u, jeśli masz go zweryfikowany.
-- R07: Ważność daty urodzenia (przedział: od 120 lat wstecz do daty dzisiejszej)
SELECT
id,
imie_nazwisko,
data_urodzenia
FROM klienci
WHERE data_urodzenia IS NULL
OR data_urodzenia > CURRENT_DATE
OR data_urodzenia < (CURRENT_DATE - INTERVAL '120 years');
R08: zakres liczbowy i słownik
Rabat ma mieścić się w 0–50%, a status w zamkniętym słowniku. Wynik: 95,0% (19/20), błędny id = 19. Semafor zielony, ale przy SLA 100% to sygnał, że w schemacie brakuje więzów. Naprawa: CHECK (rabat_proc BETWEEN 0 AND 50), klucz obcy do tabeli statusów, a „VIP” przenieś do osobnego atrybutu segmentacji.
-- R08: Ważność zakresu liczbowego (rabat 0-50%) oraz słownika statusów
SELECT
id,
imie_nazwisko,
status_klienta,
rabat_proc
FROM klienci
WHERE rabat_proc IS NULL
OR rabat_proc NOT BETWEEN 0 AND 50
OR status_klienta IS NULL
OR status_klienta NOT IN ('AKTYWNY', 'ZAWIESZONY', 'ZAMKNIETY');
Unikalność
R09: unikalność e-maila po normalizacji
Zwykłe UNIQUE nie widzi różnicy między jan.kowalski@… a JAN.KOWALSKI@…, więc normalizujemy wartość. Pusty e-mail nie może być kluczem, więc liczymy go jako błąd. Wynik: 85,0% (17/20), błędne id = 1, 9, 15. Semafor żółty, na samej granicy, SLA 100%. Naprawa: scal kartoteki id = 1 i id = 9, a potem załóż CREATE UNIQUE INDEX idx_klienci_email_uniq ON klienci (LOWER(TRIM(email)));.
-- R09: Duplikaty e-maila po normalizacji (wielkość liter, spacje) oraz puste e-maile
-- Pusty adres nie może być kluczem, więc w pomiarze liczymy go jako błąd (patrz scorecard).
SELECT
id,
imie_nazwisko,
nazwa_firmy,
email,
LOWER(TRIM(email)) AS email_znormalizowany,
COUNT(*) OVER (PARTITION BY LOWER(TRIM(email))) AS liczba_wystapien
FROM klienci
WHERE email IS NULL
OR TRIM(email) = ''
OR LOWER(TRIM(email)) IN (
SELECT LOWER(TRIM(email))
FROM klienci
WHERE email IS NOT NULL AND TRIM(email) <> ''
GROUP BY LOWER(TRIM(email))
HAVING COUNT(*) > 1
)
ORDER BY id;
R10: duplikaty encji (rozmyte)
Ta sama osoba często ma kilka kont z różnymi e-mailami. Reguła szuka jej po znormalizowanym imieniu i nazwisku oraz dacie urodzenia. Znajduje duplikat firmowy (id = 1, 9) i ukryty duplikat B2C (id = 11, 20). Wynik: 80,0% (16/20), błędne id = 1, 9, 11, 20. Semafor czerwony, SLA 98% (nie 100%, bo w dużej bazie dwie różne osoby mogą mieć to samo imię, nazwisko i datę urodzenia). Naprawa: przekaż pary do procesu łączenia i zbuduj złoty rekord klienta.
-- R10: Wykrycie duplikatów encji (ta sama osoba: znormalizowane imię i nazwisko + data urodzenia)
SELECT
id,
typ_klienta,
imie_nazwisko,
data_urodzenia,
email,
telefon,
COUNT(*) OVER (
PARTITION BY LOWER(TRIM(imie_nazwisko)), data_urodzenia
) AS liczba_kont_osoby
FROM klienci
WHERE (LOWER(TRIM(imie_nazwisko)), data_urodzenia) IN (
SELECT LOWER(TRIM(imie_nazwisko)), data_urodzenia
FROM klienci
WHERE imie_nazwisko IS NOT NULL AND data_urodzenia IS NOT NULL
GROUP BY LOWER(TRIM(imie_nazwisko)), data_urodzenia
HAVING COUNT(*) > 1
)
ORDER BY LOWER(TRIM(imie_nazwisko)), id;
Spójność
R11: spójność w rekordzie (kod a miasto, kolejność dat)
Reguła porównuje miasto z rekordu z miastem przypisanym do kodu w słowniku oraz sprawdza, czy rejestracja nie jest późniejsza niż ostatni zakup. Wynik: 80,0% (16/20), błędne id = 7, 17, 18, 20. Semafor czerwony, SLA 98%. Naprawa: CHECK (data_ostatniego_zakupu >= data_rejestracji) i uzupełnianie miejscowości w formularzu na podstawie wybranego kodu.
-- R11: Spójność wewnątrz rekordu (zgodność Kod pocztowy <-> Miasto wg PNA oraz porządek dat)
SELECT
k.id,
k.imie_nazwisko,
k.kod_pocztowy,
k.miasto AS miasto_w_rekordzie,
p.miasto AS miasto_wg_pna,
k.data_rejestracji,
k.data_ostatniego_zakupu,
CASE
WHEN k.data_rejestracji > k.data_ostatniego_zakupu
THEN 'Niespójność dat: rejestracja późniejsza niż ostatni zakup'
WHEN p.kod_pocztowy IS NULL
THEN 'Brak kodu w słowniku PNA (nie można potwierdzić miasta)'
WHEN LOWER(TRIM(k.miasto)) <> LOWER(TRIM(p.miasto))
THEN 'Niespójność geograficzna: kod pocztowy nie pasuje do miasta'
END AS typ_niespojnosci
FROM klienci k
LEFT JOIN slownik_pna p ON k.kod_pocztowy = p.kod_pocztowy
WHERE k.data_rejestracji > k.data_ostatniego_zakupu
OR p.kod_pocztowy IS NULL
OR LOWER(TRIM(k.miasto)) <> LOWER(TRIM(p.miasto));
R12: spójność między tabelami
Klient ZAMKNIETY nie powinien mieć otwartych zamówień. W danych jest jedno, id_zamowienia = 104 na 9 900 zł. Wynik: 95,0% (19/20), błędny id = 10. Semafor zielony, ale przy SLA 100% to pokazuje, że przy procesach finansowych jeden niespójny rekord wymaga reakcji mimo zielonego koloru. Naprawa: blokada na styku CRM–ERP i wyjaśnienie, czy to błąd statusu, czy zamówienia.
-- R12: Spójność między tabelami — nieaktywny klient (ZAMKNIETY) z otwartym zamówieniem
SELECT
k.id AS klient_id,
k.nazwa_firmy,
k.status_klienta,
z.id_zamowienia,
z.data_zamowienia,
z.status_zamowienia,
z.kwota_brutto
FROM klienci k
INNER JOIN zamowienia z ON k.id = z.klient_id
WHERE k.status_klienta = 'ZAMKNIETY'
AND z.status_zamowienia IN ('NOWE', 'W_REALIZACJI');
Wszystkie reguły w jednym zapytaniu: scorecard z semaforem
Zapytanie zbiorcze liczy każdą regułę na rekord (1 albo 0), a potem zamienia wyniki w tabelę z semaforem i porównaniem z SLA. Cały kod jest w pobranym skrypcie. Na danych testowych wynik wygląda tak:
| Reguła | Wymiar | Wynik | Semafor | SLA | Błędne id |
|---|---|---|---|---|---|
| R01 e-mail niepusty | Kompletność | 95,0% (19/20) | zielony | 99,0% | 15 |
| R02 NIP i nazwa dla B2B | Kompletność | 90,0% (9/10) | żółty | 100% | 8 |
| R03 NIP, suma kontrolna | Poprawność | 60,0% (6/10) | czerwony | 99,5% | 6, 7, 8, 10 |
| R04 format e-mail | Poprawność | 90,0% (18/20) | żółty | 98,0% | 15, 16 |
| R05 kod pocztowy + PNA | Poprawność | 90,0% (18/20) | żółty | 98,0% | 17, 20 |
| R06 telefon E.164 | Poprawność | 90,0% (18/20) | żółty | 95,0% | 16, 17 |
| R07 data urodzenia | Ważność | 90,0% (18/20) | żółty | 99,0% | 18, 19 |
| R08 rabat i status | Ważność | 95,0% (19/20) | zielony | 100% | 19 |
| R09 unikalny e-mail | Unikalność | 85,0% (17/20) | żółty | 100% | 1, 9, 15 |
| R10 duplikaty encji | Unikalność | 80,0% (16/20) | czerwony | 98,0% | 1, 9, 11, 20 |
| R11 spójność rekordu | Spójność | 80,0% (16/20) | czerwony | 98,0% | 7, 17, 18, 20 |
| R12 spójność tabel | Spójność | 95,0% (19/20) | zielony | 100% | 10 |
Łącznie 193 poprawne wyniki na 220 sprawdzeń to 87,7%, czyli semafor żółty. Trzy reguły są zielone, sześć żółtych i trzy czerwone. Zwróć uwagę, że żadna reguła nie spełnia swojego SLA, nawet te zielone. Semafor mówi, jak jest źle, a SLA mówi, czy to wystarcza.
Od czego zacząć naprawy? Od czerwonych: R03 (błędne NIP-y blokują faktury w KSeF), R10 (duplikaty zawyżają przychody i dublują kampanie) i R11 (niespójny adres to zwroty korespondencji).
Gdzie kończy się SQL
Wszystkie 12 reguł sprawdza poprawność formalną. Mówią Ci, że dane wyglądają dobrze, a nie że są prawdziwe:
- NIP z poprawną sumą kontrolną może nigdy nie zostać nadany albo należeć do innej firmy. Istnienie podmiotu potwierdzisz w rejestrach (Biała Lista VAT, GUS, CEIDG, KRS, VIES).
- Kod pocztowy z dobrego słownika może nie pasować do ulicy. To już dane adresowe z pełnego spisu PNA.
- E-mail
[email protected]przejdzie każdy regex. Domenę sprawdzisz zapytaniem DNS o rekord MX, a skrzynkę potwierdzi dopiero kliknięcie linku w procesie double opt-in. Sondowanie serwera SMTP (RCPT TO) bywa zawodne, bo serwery typu catch-all potwierdzają każdy adres.
To granica między wymiarem poprawności a dokładności (Accuracy). SQL zrobi pierwszą selekcję, a resztę musi zrobić proces.
Czego te reguły nie rozstrzygną
- Progi i SLA to decyzja biznesowa. Kto je zatwierdza, kto naprawia i w jakim terminie, to pytania o Data Governance. Bez właściciela danych wynik 87,7% jest tylko liczbą.
- Reguła bez naprawy niczego nie zmienia. Każdy z powyższych wyników powinien mieć właściciela i termin poprawy.
- Reguły starzeją się. Słownik PNA, lista zaślepek i próg SLA wymagają przeglądu, najlepiej razem z wersjonowaniem reguł w repozytorium.
Co dalej
- Wpisz wyniki do arkusza Scorecard i ustaw SLA dla własnych reguł.
- Masz tylko plik CSV zamiast bazy? Policz kompletność, unikalność i zakresy w narzędziu DQ Profiler. Działa w przeglądarce, a plik nie jest nigdzie wysyłany.
- Sprawdź w teście dojrzałości Data Quality (12 pytań, 5 minut), czy ktoś w firmie odpowiada za takie pomiary.
- Potrzebujesz pełnego pomiaru w sześciu wymiarach z listą reguł, progami i planem naprawy? To rezultat audytu jakości danych.
Enjoy Reading This Article?
Here are some more articles you might like to read next:
- Kompletność danych w SQL: 5 zapytań do uruchomienia dziś
- DNS z zapasem: replika Pi-hole, synchronizacja jednokierunkowa i test awarii w homelabie
- Backup, który sam mówi, czy działa: Kopia + n8n jako data observability w homelabie
- Wymiary jakości danych: praktyczny przewodnik po Data Quality
- AI w Data Governance: szanse, wyzwania i praktyczne zastosowania
- Ataccama ONE: przegląd platformy do Data Governance z perspektywy użytkownika
- Informatica jako narzędzie Data Governance: przegląd dla praktyków
- Standardy danych: czym są i dlaczego bez nich nie zbudujesz programu DG?
- Które normy ISO stosować w Data Governance? Praktyczny przegląd
- Wstęp do Data Governance
Subscribe to be notified of future articles: