Udostępnij za pośrednictwem


Jak implementować wolno zmieniający się typ wymiaru 1 przy użyciu dodatku Power Query

Powolne zmienianie wymiarów, często określanych jako SCD, jest strukturą do aktualizowania i utrzymywania danych przechowywanych w tabelach wymiarów w miarę zmiany wymiarów. Istnieje kilka różnych metod obsługi zmieniających się wymiarów, a te techniki są często określane jako wolno zmieniające się wymiary "typy".

Wolno zmieniając typ wymiaru 1

Użycie wolno zmieniającego się typu wymiaru 1, jeśli rekord w tabeli wymiarów ulegnie zmianie, istniejący rekord zostanie zaktualizowany lub zastąpiony. W przeciwnym razie nowy rekord zostanie wstawiony do tabeli wymiarów. Oznacza to, że rekordy w tabeli wymiarów zawsze odzwierciedlają bieżący stan i nie są przechowywane żadne dane historyczne. Takie podejście projektowe jest typowe w przypadku kolumn, które przechowują dodatkowe wartości, takie jak adres e-mail lub numer telefonu klienta. Gdy zmienia się adres e-mail lub numer telefonu klienta, tabela wymiarów aktualizuje wiersz klienta nowymi wartościami. To tak, jakby klient zawsze miał te informacje kontaktowe. Odświeżanie niekrementalne tabeli wymiarów modelu usługi Power BI osiąga wynik typu 1 powoli zmieniającego się wymiaru. Odświeża dane tabeli, aby upewnić się, że są ładowane najnowsze wartości.

Na przykład:

item_id name price przejście
83201 Krakersy 4,99 6
17879 Napój gazowany 7.99 13

Jeśli crackery są przenoszone do przejścia 11, przy użyciu wolno zmieniającego się typu wymiaru 1 w celu przechwycenia tej zmiany w tabeli wymiarów daje następujący wynik:

item_id name price przejście
83201 Krakersy 4,99 11
17879 Napój gazowany 7.99 13

Zakłada się, że tabela faktów magazynu danych lub magazynu lake house ma klucz obcy do tabeli wymiarów. W związku z tym zaktualizowane wiersze w tabelach wymiarów są poprawnie odzwierciedlane w tabeli faktów na potrzeby raportowania.

Powolne zmienianie typu wymiaru 1 gwarantuje, że w tabeli nie ma zduplikowanych rekordów i że dane odzwierciedlają najnowszy bieżący wymiar. Brak duplikacji jest szczególnie przydatny w przypadku pulpitów nawigacyjnych w czasie rzeczywistym i modelowania predykcyjnego, gdzie interesuje tylko bieżący stan. Ponieważ w tabeli są przechowywane tylko najbardziej aktualne informacje, użytkownicy nie mogą porównywać zmian wymiarów w czasie. Na przykład analityk danych miałby problemy z identyfikacją wzrostu przychodów dla crackerów po przeniesieniu ich do przejścia na 11 bez innych informacji.

Powolne zmienianie typu wymiaru 1 sprawia, że bieżące raportowanie stanu i analiza są łatwe, ale ma ograniczenia podczas przeprowadzania analiz historycznych.

W dodatku Power Query można osiągnąć wcześniej opisane zachowanie przy użyciu operacji scalania. Przyjrzyj się następującej generacji przepływu danych.

Zrzut ekranu przedstawiający przepływ danych widoczny w widoku diagramu dodatku Power Query.

Jak widać w widoku diagramu, uruchamiamy porównanie źródłowych rekordów wymiarów i istniejących rekordów wymiarów. Następnie znajdziemy rekordy do zastąpienia. Kod języka M, który zdaje sobie sprawę z tego wzorca, jest następujący:

let
    Source = Source,

    #"Added custom" = Table.TransformColumnTypes(
        Table.AddColumn(Source, "Hash", each Binary.ToText( 
            Text.ToBinary( 
                Text.Combine(
                    List.Transform({[FirstName],[LastName],[Region]}, each if _ = null then "" else _),
                "|")),
            BinaryEncoding.Hex)
        ),
        {{"Hash", type text}}
    ),

    #"Marked key columns" = Table.AddKey(#"Added custom", {"Hash"}, false),

    #"Merged queries" = Table.NestedJoin(
        #"Marked key columns",
        {"Hash"},
        ExistingDimRecords,
        {"Hash"},
        "ExistingDimRecords",
        JoinKind.LeftOuter
    ),

    #"Expanded ExistingDimRecords" = Table.ExpandTableColumn(
        #"Merged queries",
        "ExistingDimRecords",
        {"Count"},
        {"Count"}
    ),

    #"Filtered rows" = Table.SelectRows(#"Expanded ExistingDimRecords", each ([Count] = null)),

    #"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"Count"})
in
    #"Removed columns"

Możesz również użyć tabel scalania jako innego przykładu, aby dopasować je do potrzeb. Przedstawiamy kilka przykładów opartych na scalaniu, aby osiągnąć powoli zmieniające się cele wymiaru 1.

Wolno zmieniając typ wymiaru 2

W przypadku wolno zmieniającego się typu wymiaru 2 dane historyczne są utrzymywane przez dodanie nowego wiersza, gdy wymiar zmienia się i poprawnie oznacza ten nowy wiersz jako bieżący, określając odpowiednio nowo historyczny rekord. Ta technika umożliwia zaimplementowanie wolno zmieniającego się typu wymiaru 1 nie tylko zachowuje dane historyczne, ale także udostępnia informacje o zmianach danych. Utrzymywanie danych historycznych umożliwia analitykom danych i analitykom danych eksplorowanie zmian operacyjnych, przeprowadzanie testów A/B i zwiększanie możliwości świadomego podejmowania decyzji.

Usługa Dataflow Gen2 w usłudze Fabric Data Factory sprawia, że jest ona wizualna i łatwa do zaimplementowania wolno zmieniających się wzorców wymiarów Type 1. Można również powoli zmieniać wzorzec wymiarów Typ 2 zgodnie z opisem w temacie Slowly changing dimension type 2 (Wolno zmieniając typ wymiaru 2).