Datenqualitätsfunktionen – Optimierung der Datenqualität im DWH

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.

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)

Wie hat dir der Artikel gefallen?

Vielen Dank für dein Feedback!
About Frank 83 Articles

Ich bin Frank, Data Warehouse und BI-Entwickler mit langjähriger Expertise in diesem Bereich. Ich verfüge über mehr als 20 Jahre Berufserfahrung im DWH Umfeld. Das Analysieren und Interpretieren von Zahlen, Daten und Fakten ist meine große Leidenschaft, aus diesem Grunde ist auch diese Seite hier entstanden.

Be the first to comment

Leave a Reply

Your email address will not be published.


*