Samouczek: wizualizowanie anomalii przy użyciu wykrywania wsadowego i Power BI (jednowymiarowy)

Ważne

Od 20 września 2023 r. nie będzie można tworzyć nowych zasobów usługi Anomaly Detector. Usługa narzędzia do wykrywania anomalii jest wycofywana 1 października 2026 r. Zalecamy migrację do Microsoft Fabric, który integruje projekt open-source microsoft/anomaly-detector, lub bezpośrednio do projektu open-source narzędzia do wykrywania anomalii.

Ten samouczek umożliwia znajdowanie anomalii w zestawie danych szeregów czasowych w trybie wsadowym. Korzystając z Power BI desktop, użyjesz pliku Excel, przygotujesz dane do Anomaly Detector API i zwizualizujesz w nim anomalie statystyczne.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Importowanie i przekształcanie zestawu danych szeregów czasowych przy użyciu programu Power BI Desktop
  • Zintegruj program Power BI Desktop z API wykrywającym anomalie do wykrywania anomalii wsadowych
  • Wizualizuj anomalie znalezione w danych, w tym oczekiwane i widoczne wartości oraz granice wykrywania anomalii.

Wymagania wstępne

  • Subskrypcja Azure
  • Microsoft Power BI Desktop dostępny bezpłatnie.
  • Plik programu Excel (.xlsx) zawierający punkty danych szeregów czasowych.
  • Po utworzeniu subskrypcji Azure utwórz zasób narzędzia do wykrywania anomalii w portalu Azure, aby uzyskać klucz i punkt końcowy.
    • Potrzebny będzie klucz i punkt końcowy z utworzonego zasobu, aby połączyć aplikację z Anomaly Detector API. Tę czynność wykonasz w dalszej części przewodnika Szybki start.

Uwaga

Aby uzyskać najlepsze wyniki, korzystając z Anomaly Detector API, dane szeregów czasowych w formacie JSON powinny zawierać:

  • punkty danych oddzielone tym samym interwałem, bez większej niż 10% oczekiwanej liczby brakujących punktów.
  • co najmniej 12 punktów danych, jeśli dane nie mają wyraźnego wzorca sezonowego.
  • co najmniej 4 wystąpienia wzorca, jeśli dane mają jasny wzorzec sezonowy.

Ładowanie i formatowanie danych szeregów czasowych

Aby rozpocząć, otwórz program Power BI Desktop i załaduj dane szeregów czasowych pobranych z wymagań wstępnych. Ten plik programu Excel zawiera szereg par sygnatur czasowych i wartości czasu koordynowanego (UTC).

Uwaga

Power BI może używać danych z wielu różnych źródeł, takich jak pliki .csv, bazy danych SQL, Azure Blob Storage i inne.

W głównym oknie Power BI Desktop wybierz wstążkę Home. W grupie danych External na wstążce otwórz grupę Pobierz dane i wybierz Excel.

 Obraz przedstawiający przycisk

Po wyświetleniu okna dialogowego przejdź do folderu, w którym pobrano przykładowy plik .xlsx i wybierz go. Po pojawieniu się okna dialogowego Nawigator wybierz pozycję Arkusz1, a następnie pozycję Edytuj.

Obraz ekranu źródła danych „Nawigator” w Power BI

Power BI przekonwertuje znaczniki czasu w pierwszej kolumnie na typ danych Date/Time. Te znaczniki czasu należy przekonwertować na tekst w celu wysłania ich do Anomaly Detector API. Jeśli edytor Power Query nie otwiera się automatycznie, wybierz pozycję Edytuj zapytania na karcie Narzędzia główne.

Wybierz wstążkę Transform na Edytor Power Query. W grupie Dowolna kolumna otwórz menu rozwijane Typ danych: i wybierz pozycję Tekst.

Obraz listy rozwijanej typu danych

Po otrzymaniu powiadomienia o zmianie typu kolumny wybierz Zastąp bieżący. Następnie wybierz Zamknij i zastosuj lub Zastosuj na wstążce Strona główna.

Tworzenie funkcji w celu wysyłania danych i formatowania odpowiedzi

Aby sformatować i wysłać plik danych do Anomaly Detector API, możesz wywołać zapytanie w tabeli utworzonej powyżej. W Edytorze Power Query, na wstążce Home, otwórz menu rozwijane Nowe źródło i wybierz pozycję Pusta kwerenda.

Upewnij się, że wybrano nowe zapytanie, a następnie wybierz pozycję Edytor zaawansowany.

 Obraz przedstawiający ekran

W Edytor zaawansowany użyj następującego fragmentu kodu Power Query M, aby wyodrębnić kolumny z tabeli i wysłać ją do interfejsu API. Następnie zapytanie utworzy tabelę na podstawie odpowiedzi JSON i zwróci ją. Zastąp zmienną apiKey swoim prawidłowym kluczem API Anomaly Detector, a zmienną endpoint adresem końcowym. Po wprowadzeniu zapytania do Edytor zaawansowany wybierz pozycję Done.

(table as table) => let

    apikey      = "[Placeholder: Your Anomaly Detector resource access key]",
    endpoint    = "[Placeholder: Your Anomaly Detector resource endpoint]/anomalydetector/v1.0/timeseries/entire/detect",
    inputTable = Table.TransformColumnTypes(table,{{"Timestamp", type text},{"Value", type number}}),
    jsontext    = Text.FromBinary(Json.FromValue(inputTable)),
    jsonbody    = "{ ""Granularity"": ""daily"", ""Sensitivity"": 95, ""Series"": "& jsontext &" }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Content-Type" = "application/json", #"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody, ManualStatusHandling={400}]),
    jsonresp    = Json.Document(bytesresp),

    respTable = Table.FromColumns({

                     Table.Column(inputTable, "Timestamp")
                     ,Table.Column(inputTable, "Value")
                     , Record.Field(jsonresp, "IsAnomaly") as list
                     , Record.Field(jsonresp, "ExpectedValues") as list
                     , Record.Field(jsonresp, "UpperMargins")as list
                     , Record.Field(jsonresp, "LowerMargins") as list
                     , Record.Field(jsonresp, "IsPositiveAnomaly") as list
                     , Record.Field(jsonresp, "IsNegativeAnomaly") as list

                  }, {"Timestamp", "Value", "IsAnomaly", "ExpectedValues", "UpperMargin", "LowerMargin", "IsPositiveAnomaly", "IsNegativeAnomaly"}
               ),

    respTable1 = Table.AddColumn(respTable , "UpperMargins", (row) => row[ExpectedValues] + row[UpperMargin]),
    respTable2 = Table.AddColumn(respTable1 , "LowerMargins", (row) => row[ExpectedValues] -  row[LowerMargin]),
    respTable3 = Table.RemoveColumns(respTable2, "UpperMargin"),
    respTable4 = Table.RemoveColumns(respTable3, "LowerMargin"),

    results = Table.TransformColumnTypes(

                respTable4,
                {{"Timestamp", type datetime}, {"Value", type number}, {"IsAnomaly", type logical}, {"IsPositiveAnomaly", type logical}, {"IsNegativeAnomaly", type logical},
                 {"ExpectedValues", type number}, {"UpperMargins", type number}, {"LowerMargins", type number}}
              )

 in results

Wywołaj zapytanie w arkuszu danych, wybierając Sheet1 poniższe polecenie Wprowadź parametr, a następnie wybierz pozycję Wywołaj.

Ilustracja funkcji wywołania

Ważne

Pamiętaj, aby usunąć klucz z kodu po zakończeniu i nigdy nie publikować go publicznie. W środowisku produkcyjnym użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak Azure Key Vault. Aby uzyskać więcej informacji, zobacz artykuł Zabezpieczenia usługi Azure AI.

Prywatność i uwierzytelnianie źródła danych

Uwaga

Należy pamiętać o zasadach organizacji dotyczących prywatności i dostępu do danych. Aby uzyskać więcej informacji, zobacz Power BI Poziomy prywatności aplikacji Desktop.

Podczas próby uruchomienia zapytania może zostać wyświetlony komunikat ostrzegawczy, ponieważ korzysta z zewnętrznego źródła danych.

Obraz przedstawiający ostrzeżenie utworzone przez Power BI

Aby rozwiązać ten problem, wybierz pozycję Plik i Opcje i ustawienia. Następnie wybierz pozycję Opcje. Poniżej bieżącego pliku wybierz pozycję Prywatność i Zignoruj poziomy prywatności i potencjalnie zwiększ wydajność.

Ponadto może zostać wyświetlony komunikat z prośbą o określenie sposobu nawiązywania połączenia z interfejsem API.

Obraz przedstawiający żądanie określania poświadczeń dostępu

Aby rozwiązać ten problem, wybierz pozycję Edytuj poświadczenia w komunikacie. Po pojawieniu się okna dialogowego wybierz pozycję Anonimowe , aby anonimowo nawiązać połączenie z interfejsem API. Następnie wybierz pozycję Połącz.

Następnie wybierz pozycję Zamknij i zastosuj na wstążce Narzędzia główne , aby zastosować zmiany.

Wizualizowanie odpowiedzi Anomaly Detector API

Na głównym ekranie Power BI zacznij używać zapytań utworzonych powyżej w celu wizualizacji danych. Najpierw wybierz pozycję Wykres liniowy w obszarze Wizualizacje. Następnie dodaj znacznik czasu z wywoływanej funkcji do osi wykresu liniowego. Kliknij go prawym przyciskiem myszy i wybierz Sygnaturę czasu.

Kliknięcie prawym przyciskiem myszy wartości znacznika czasu

Dodaj następujące pola z wywołanej funkcji do pola Wartości wykresu. Użyj poniższego zrzutu ekranu, aby ułatwić tworzenie wykresu.

  • Wartość
  • Górne marginesy
  • Dolne marginesy
  • OczekiwaneWartości

Obraz ustawień wykresu

Po dodaniu pól wybierz wykres i zmień jego rozmiar, aby wyświetlić wszystkie punkty danych. Wykres będzie wyglądać podobnie do poniższego zrzutu ekranu:

Obraz wizualizacji wykresu

Wyświetlanie punktów danych anomalii

Po prawej stronie okna Power BI, poniżej okienka FIELDS kliknij prawym przyciskiem myszy Value w obszarze Wwołana kwerenda funkcji i wybierz Nowa szybka miara.

Obraz nowego ekranu szybkiej miary

Na wyświetlonym ekranie wybierz pozycję Filtrowana wartość jako obliczenie. Ustaw wartość podstawową na Sum of Value. Następnie przeciągnij IsAnomaly z pól Wywołana funkcja do filtru. Wybierz True z menu rozwijanego Filtr .

Drugi obraz nowego ekranu szybkiej miary

Po wybraniu pozycji Ok będziesz mieć Value for True pole w dolnej części listy pól. Kliknij go prawym przyciskiem myszy i zmień jego nazwę na Anomaly. Dodaj go do wartości wykresu. Następnie wybierz narzędzie Format i ustaw typ osi X na kategorialny.

Obraz przedstawiający oś x formatu

Zastosuj kolory do wykresu, wybierając narzędzie Format i Kolory danych. Wykres powinien wyglądać podobnie do następującego:

Obraz końcowego wykresu