Ein Data Warehouse sammelt, speichert und verwaltet riesige Mengen an Daten aus verschiedenen Quellen. Die Qualität dieser Daten beeinflusst direkt die Genauigkeit und Zuverlässigkeit von Berichten und Analysen. Ein hoher Datenqualitätsstandard ist daher unerlässlich, um fundierte geschäftliche Entscheidungen treffen zu können.
Inhalt dieser Seite
Herausforderungen bei der Sicherstellung der Datenqualität
Daten können aus vielen Gründen fehlerhaft oder inkonsistent sein. Sie können während der Erfassung, Übertragung, Transformation oder Speicherung verfälscht werden. Es ist eine ständige Herausforderung, sicherzustellen, dass die Daten im DWH korrekt, aktuell und relevant sind. Hier kommen SQL-Funktionen ins Spiel, die speziell entwickelt wurden, um die Datenqualität zu überwachen und zu verbessern.
SQL-Funktionen als Schlüsselwerkzeug
SQL, als mächtige Abfragesprache, bietet eine Vielzahl von Funktionen, um die Datenqualität zu überprüfen und sicherzustellen. Von der Identifizierung von Duplikaten über die Validierung von Datenformaten bis hin zur Überprüfung von Referenzintegritäten – SQL stellt die notwendigen Werkzeuge bereit, um die Datenqualität in einem DWH systematisch zu gewährleisten.
Überprüfen, ob ein String eine gültige E-Mail-Adresse ist:
CREATE FUNCTION IsValidEmail(@Email NVARCHAR(256))
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF @Email LIKE '%@%.%'
AND CHARINDEX(' ', @Email) = 0
AND CHARINDEX('..', @Email) = 0
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Angenommen, Sie haben eine Tabelle namens Benutzer
mit einer Spalte Email
. Sie möchten alle Datensätze abrufen, bei denen die E-Mail-Adresse ungültig ist:
(Für dieses Beispiel können Sie unser Test ERP nehmen, was Sie hier finden)
SELECT BenutzerID, Email FROM dbo.Benutzer WHERE dbo.IsValidEmail(Email) = 0;
Dies gibt Ihnen alle Zeilen zurück, bei denen die E-Mail-Adresse nicht dem einfachen Muster der IsValidEmail
-Funktion entspricht.
Funktion zur Umwandlung eines String-Datums in ein standardisiertes Format:
CREATE FUNCTION StandardizeDateFormat(@InputDate NVARCHAR(50))
RETURNS DATE
AS
BEGIN
RETURN TRY_CONVERT(DATE, @InputDate, 103) -- 103 ist der Stil für das Datum im Format dd/mm/yyyy
END
Aufrufbeispiel:
SELECT dbo.StandardizeDateFormat('01/11/2023') AS StandardDate; -- Ergebnis: 2023-11-01
Funktion zur Überprüfung, ob ein Wert in einem vorgegebenen Satz von Werten liegt:
CREATE FUNCTION IsValueInSet(@Value NVARCHAR(255), @Set NVARCHAR(MAX))
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF CHARINDEX(@Value, @Set) > 0
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsValueInSet('apple', 'apple,banana,orange') AS InSet; -- Ergebnis: 1 (True)
Funktion zur Überprüfung der Datenqualität eines Geschlechtswerts:
CREATE FUNCTION IsValidGender(@Gender CHAR(1))
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF @Gender IN ('M', 'F', 'O') -- M für männlich, F für weiblich, O für andere
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsValidGender('M') AS IsValid; -- Ergebnis: 1 (True)
Funktion zur Überprüfung, ob ein String nur Leerzeichen enthält:
CREATE FUNCTION IsStringWhitespace(@Input NVARCHAR(MAX))
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF LTRIM(RTRIM(@Input)) = ''
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsStringWhitespace(' ') AS CheckWhitespace; -- Ergebnis: 1 (True)
Funktion zur Überprüfung, ob ein Datum in einem gültigen Bereich liegt:
CREATE FUNCTION IsDateInRange(@Date DATE, @StartDate DATE, @EndDate DATE)
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF @Date BETWEEN @StartDate AND @EndDate
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsDateInRange('01.11.2023', '10.10.2023', '24.12.2023') AS CheckDate; -- Ergebnis: 1 (True)
Funktion zur Überprüfung, ob ein numerischer Wert innerhalb eines bestimmten Bereichs liegt:
CREATE FUNCTION IsNumberInRange(@Number FLOAT, @MinValue FLOAT, @MaxValue FLOAT)
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF @Number BETWEEN @MinValue AND @MaxValue
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsNumberInRange(5, 1, 10) AS CheckNumber; -- Ergebnis: 1 (True)
Funktion zur Bereinigung von Telefonnummern:
CREATE FUNCTION CleanPhoneNumber(@PhoneNumber NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @CleanedNumber NVARCHAR(50) = ''
DECLARE @Index INT = 1
WHILE @Index <= LEN(@PhoneNumber)
BEGIN
IF SUBSTRING(@PhoneNumber, @Index, 1) LIKE '[0-9]'
SET @CleanedNumber = @CleanedNumber + SUBSTRING(@PhoneNumber, @Index, 1)
SET @Index = @Index + 1
END
RETURN @CleanedNumber
END
Aufrufbeispiel:
SELECT dbo.CleanPhoneNumber('0511 123456789') AS CleanedNumber; -- Ergebnis: "0511123456789"
Funktion zur Entfernung von doppelten Leerzeichen:
CREATE FUNCTION RemoveExtraSpaces(@Input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
WHILE CHARINDEX(' ', @Input) > 0 -- Beachten Sie die zwei Leerzeichen in der Bedingung
SET @Input = REPLACE(@Input, ' ', ' ') -- Ersetzt zwei Leerzeichen durch ein einzelnes Leerzeichen
RETURN LTRIM(RTRIM(@Input))
END
Aufrufbeispiel:
SELECT dbo.RemoveExtraSpaces('Dies ist ein Test ') AS CleanedText; -- Ergebnis: "Dies ist ein Test"
Funktion zur Validierung einer Postleitzahl:
CREATE FUNCTION IsValidZipCode(@ZipCode NVARCHAR(10))
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
IF @ZipCode LIKE '[0-9][0-9][0-9][0-9][0-9]' -- Beispiel für eine US-Postleitzahl
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsValidZipCode('31275') AS IsValid; -- Ergebnis: 1 (True)
Funktion zur Umwandlung eines Strings in Title Case:
CREATE FUNCTION ToTitleCase(@Input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Output NVARCHAR(MAX) = ''
DECLARE @IsNextCharUpper BIT = 1
DECLARE @i INT = 1
WHILE @i <= LEN(@Input)
BEGIN
IF @IsNextCharUpper = 1
SET @Output = @Output + UPPER(SUBSTRING(@Input, @i, 1))
ELSE
SET @Output = @Output + LOWER(SUBSTRING(@Input, @i, 1))
IF SUBSTRING(@Input, @i, 1) = ' '
SET @IsNextCharUpper = 1
ELSE
SET @IsNextCharUpper = 0
SET @i = @i + 1
END
RETURN @Output
END
Aufrufbeispiel:
SELECT dbo.ToTitleCase('dies ist ein test') AS TitleCaseText; -- Ergebnis: "Dies Ist Ein Test"
Funktion zur Überprüfung der Länge eines Strings:
CREATE FUNCTION IsLengthValid(@Input NVARCHAR(MAX), @MinLength INT, @MaxLength INT)
RETURNS BIT
AS
BEGIN
DECLARE @Result BIT
DECLARE @Length INT = LEN(@Input)
IF @Length BETWEEN @MinLength AND @MaxLength
SET @Result = 1
ELSE
SET @Result = 0
RETURN @Result
END
Aufrufbeispiel:
SELECT dbo.IsLengthValid('Test', 3, 5) AS IsValid; -- Ergebnis: 1 (True)
Be the first to comment