/v1 do Power BI. Obejmuje
wzorzec łączności w Power Query (M), model semantyczny w schemacie gwiazdy
zbudowany na /v1/activities, odświeżanie przyrostowe oraz informacje o tym, kiedy używać
zbiorów danych w wersji zapoznawczej reporting do wyników phishingu na poziomie poszczególnych osób.
W przykładach użyto hosta produkcyjnego w USA
(https://api.us-east-1.livingsecurity.ai/v1). W przypadku organizacji z UE użyj
https://api.eu-west-1.livingsecurity.ai/v1 zarówno w Fn_FetchAll, jak i
w Fn_GetJson, a następnie powiąż poświadczenia źródła danych z tym hostem. Zobacz
Regiony.
W tym przewodniku używane są zapisane poświadczenia Basic z kluczem API. Klient OAuth nie jest potrzebny. Informacje o dostępnych opcjach poświadczeń znajdziesz w sekcji Uwierzytelnianie,
a informacje o dostępie i konfiguracji w sekcji Developer Hub.
Do czego służy ten przykład
Skorzystaj z niego, gdy musisz:- Załadować punkty końcowe list
/v1do zbioru danych Power BI z poprawnym stronicowaniem kursorowym i ponawianiem przy przekroczeniu limitu żądań. - Zbudować model semantyczny, w którym miary („aktywne encje”, „aktywności na aktywną encję”) są wymiarowe, a nie zliczane z płaskiej tabeli.
- Skrócić zaplanowane odświeżanie Power BI z pełnego przejścia całej historii do niewielkiego okna dziennego za pomocą odświeżania przyrostowego.
- Wybrać właściwy poziom szczegółowości dla phishingu: sumy kampanii (operacyjne) albo wyniki na poziomie osób i zdarzenia typowane (raportowanie w wersji zapoznawczej).
Wymagania wstępne
- Klucz API z uprawnieniami wymaganymi przez Twoje zapytania:
- Przykład operacyjny:
activity:read,entity:readisimulation:read. - Phishing na poziomie osób za pomocą zbiorów danych raportowych:
reporting:read. Zobacz Klucze API.
- Przykład operacyjny:
- Power BI Desktop lub obszar roboczy Power BI / Fabric, w którym można utworzyć model semantyczny i zaplanować odświeżanie.
Wybierz właściwy poziom szczegółowości
/v1 udostępnia dwie powiązane powierzchnie dla phishingu. Nie są one wymienne.
Poniższe przykładowe zapytania Power BI wywołują trasy operacyjne
(
/v1/simulations, /v1/simulations/{id}/results, /v1/activities,
/v1/entities). W przypadku raportowania phishingu na poziomie osób zalecamy
skorzystanie z poniższej rodziny reporting w wersji zapoznawczej. Klucz z uprawnieniem wyłącznie reporting:read nie może
wywoływać operacyjnego /v1/simulation_results (API zwraca 403).
Skala trudności
Trudność symulacji jest liczbą całkowitą od 1 do 5 we właściwościach/v1/simulations (difficulty_level),
/v1/simulation_results (difficulty_level), /v1/activities
(difficulty_tier) oraz /v1/reporting/simulation_events (difficulty_tier).
1 oznacza poziom najłatwiejszy, a 5 najtrudniejszy. Symulacje adaptacyjne i progresywne nie mają
jednej wartości na poziomie kampanii, dlatego /v1/simulations.difficulty_level ma wartość null,
natomiast difficulty_level dla poszczególnych odbiorców w wynikach nadal może być ustawione. Aby odwzorować
dawne eksporty z poziomami niski/średni/wysoki, potraktuj 1–2 jako niski, 3 jako średni, a 4–5 jako
wysoki.
Wzorzec łączności (Power Query)
Każde zapytanie w przykładzie opiera się na czterech regułach. Każda z nich jest wymuszana przez usługę Power BI, a nie wynika z preferencji stylistycznych.Zachowaj statyczny bazowy adres URL Web.Contents i zakończ go na /v1
Zachowaj statyczny bazowy adres URL Web.Contents i zakończ go na /v1
Wszystko, co dynamiczne, umieść w
RelativePath i Query. Pierwszym argumentem
Web.Contents musi być literał tekstowy kończący się na głównym adresie
regionalnego hosta /v1 organizacji:- USA:
https://api.us-east-1.livingsecurity.ai/v1 - UE:
https://api.eu-west-1.livingsecurity.ai/v1
"simulations", a nie
"v1/simulations"). Nie wklejaj hosta amerykańskiego dla organizacji z UE.Jeśli pierwszy argument jest budowany przez konkatenację ciągów, usługa Power BI
nie może statycznie zidentyfikować źródła danych, a zaplanowane odświeżanie kończy się błędem
„dynamic data source”, mimo że zapytanie działa w Power BI Desktop.Podaj klucz API jako zapisane poświadczenie Basic, a nie w treści zapytania
Podaj klucz API jako zapisane poświadczenie Basic, a nie w treści zapytania
Gdy Power BI poprosi o poświadczenia dla źródła danych
/v1, wybierz
Basic i wklej klucz API jako nazwę użytkownika. W polu Hasło wpisz symbol zastępczy, na przykład
x. Usługa Power BI odrzuca puste
hasło, mimo że API ignoruje to pole. Klucz jako hasło z symbolem zastępczym w nazwie użytkownika również działa.Nie dodawaj nagłówka Authorization w M. Działa on na Twoim komputerze, ale
osadza klucz w pliku zapytania i koliduje z zaplanowanym odświeżaniem.Pozwól na wykonanie testu połączenia w oknie poświadczeń
Pozwól na wykonanie testu połączenia w oknie poświadczeń
GET /v1 wymaga uwierzytelnienia: zwraca 200 z prawidłowym kluczem i 401
bez niego. Wskaż źródło danych na …/v1 i nie pomijaj testu —
poprawny klucz zostanie zapisany, a unieważniony lub nieprawidłowy zakończy się natychmiastowym błędem.Starsze przykłady używały samego hosta jako źródła danych i zalecały pominięcie
testu, ponieważ GET / zawsze zwraca 404. Zmień w tych modelach źródło na …/v1.Jawnie ustaw limit=500 w każdym zapytaniu listy
Jawnie ustaw limit=500 w każdym zapytaniu listy
Domyślny rozmiar strony w każdym punkcie końcowym listy
/v1 wynosi 25. Pozostawienie wartości domyślnej
zwiększa liczbę żądań dla tych samych danych. Wartości zapytania muszą być tekstem —
limit = "500" w M, a nie limit = 500.Współdzielona funkcja stronicowania
Każde zapytanie w przykładzie wywołuje jedną funkcjęFn_FetchAll, która przechodzi po
next_page_token, aż będzie null (zobacz
stronicowanie). Jej najważniejsze cechy:
- Statyczny bazowy adres URL
/v1, dynamiczneRelativePathiQuery. Wymagane dla zaplanowanego odświeżania i testu poświadczeń. ManualStatusHandling = {429}z ograniczonym ponawianiem. Funkcja odczytujeRetry-After, gdy Power Query je udostępnia, w przeciwnym razie czeka 30 sekund i rezygnuje po 5 kolejnych odpowiedziach429, zgłaszając jawny błąd zamiast działać w pętli aż do przekroczenia czasu odświeżania.5xxcelowo nie jest ponawiane — błąd serwera powinien być widoczny, a nie po cichu prowadzić do niepełnego zbioru danych.- 60-sekundowy
Timeout. Strony zwykle odpowiadają w czasie znacznie krótszym niż sekunda, więc minuta ciszy oznacza, że żądanie jest martwe. Binary.BufferprzedJson.Document. Bez buforowania silnik mashup może ponownie zażądać strumienia odpowiedzi, jeśli odczyta go więcej niż raz.baseQueryjest przekazywany bez zmian w każdej iteracji. Tokeny stron to nieprzejrzyste, podpisane kursory powiązane z organizacją, poświadczeniem, wersją kontraktu oraz odciskiem filtrów i sortowania. Zmiana filtra w trakcie przechodzenia jest odrzucana jako nieprawidłowy token, a nie restartowana od pierwszej strony.
Fn_FetchAll.pq — base and call shape
Typowane zapytania dla każdego punktu końcowego
Każdy konsumentFn_FetchAll stosuje ten sam schemat: wywołuje punkt końcowy,
rzutuje stałą listę kolumn, usuwa dyskryminator object i typuje
znaczniki czasu jako datetimezone, aby miary dat nie przesuwały się po cichu o strefę czasową
pojemności odświeżania.
Excel
To samo zapytanie Power Query (M) działa w funkcji Pobieranie i przekształcanie w Excelu — to ten sam silnik co w Power BI Desktop. Użyj tego, gdy zamiast modelu semantycznego potrzebujesz tabeli w arkuszu. W Excelu dla systemu Windows (Microsoft 365, Excel 2024, 2021, 2019 lub 2016):- Data → Get Data → From Other Sources → Blank Query.
- W Power Query Editor wybierz Strona główna → Zaawansowany edytor. Najpierw wklej
Fn_FetchAll, a następnie zmień nazwę tego zapytania naFn_FetchAll(Query Settings → Name lub kliknij prawym przyciskiem myszy w okienku Queries → Rename). - Powtórz dla
Fn_GetJson, a następnie dla każdego zapytania raportu. - Strona główna → Close & Load → Close & Load To… otwiera okno Import Data.
Wybierz Only Create Connection dla
Fn_FetchAlliFn_GetJson(są to funkcje, a nie tabele). Wybierz Table dla każdego zapytania raportu, które ma trafić do arkusza. - Przy pierwszym odświeżeniu wybierz Basic: klucz API jako User name, a
symbol zastępczy, na przykład
x, jako Hasło. Excel zapisuje jedno poświadczenie na adres URL źródła danych; kolejne zapytania korzystające z tego samego hosta/v1ponownie go używają.
Opcja Close & Load To… może być wyszarzona przy pierwszym utworzeniu zapytania w
skoroszycie. Użyj Close & Load, a następnie w Excelu wybierz Data →
Queries & Connections, kliknij zapytanie prawym przyciskiem myszy i wybierz Load To.
Ta ścieżka jest opisana przez firmę Microsoft dla tego przypadku.
Living-Security-Version z Power Query w
uwierzytelnionym źródle — obowiązuje to samo ograniczenie co w Power BI. Przypnij konto usługi
lub przekaż api_version w rekordzie zapytania. Zobacz
Wersje kontraktu i zapisane poświadczenia.
Gotowe zapytania raportów (mapowania kolumn i różnice względem eksportu
poprzedniego dostawcy):
Zgodność na poziomie osoby
Zapisy na Szkolenie na poziomie osoba × przypisanie.
Dziennik phishingu e-mail
Interakcje phishingowe na poziomie zdarzeń, ostatnie 12 miesięcy.
Najbardziej podatni użytkownicy
Zestawienie 12-miesięczne kliknięć, poświadczeń i zgłoszeń na poziomie osoby.
Zbiory danych raportowych w wersji zapoznawczej (phishing na poziomie osób)
Rodzina raportowa w wersji zapoznawczej udostępnia zbiory danych dla phishingu na poziomie osób. Wymagareporting:read oraz dostępu do raportowania dla Twojej organizacji.
Skorzystaj z poniższego katalogu zbiorów danych, aby sprawdzić ich schematy i zasady dotyczące danych.
Wyświetl aktualny katalog:
simulation_results
- Ścieżka:
GET /v1/reporting/simulation_results - Poziom szczegółowości: encja × symulacja
- Filtry:
simulation,entity,updated_afterorazlimit/page_token - Obiekt w komunikacji:
reporting.simulation_result - Klucze złączeń:
entity_id,simulation_id
ReportingSimulationResults.pq (sketch)
updated_after jako włącznej dolnej granicy znacznika podczas odświeżania ostatnich
partycji. Zmienne wymiary wyników są aktualizowane w miejscu pod tym samym id.
simulation_events
- Ścieżka:
GET /v1/reporting/simulation_events - Poziom szczegółowości: jeden typowany fakt na zaobserwowaną interakcję
- Filtry:
simulation,entity,event_type,occurred_afterorazlimit/page_token - Obiekt w komunikacji:
reporting.simulation_event - Typy zdarzeń: zamknięty zbiór tokenów publicznych, takich jak
simulation.delivered,simulation.opened,simulation.link_clicked,simulation.credentials_submitted,simulation.reported— nie surowe typy aktywności ClickHousephishing.simulation.* - Urządzenie:
device_typeto klasa pochodna (obserwowane tokeny to m.in.desktop,mobile,tablet,unknown). Surowyuser_agentnie występuje w/v1. Surowy adres IP nigdy nie występuje w/v1(nie jest przechowywany; tylko solonyip_hash).
ReportingSimulationEvents.pq (sketch)
occurred_after do przyrostowego ładowania zdarzeń. Fakty są wyłącznie dopisywane;
spóźnione dane trafiają jako nowe wiersze.
entities
- Ścieżka:
GET /v1/reporting/entities - Poziom szczegółowości: jeden bieżący wiersz na encję
- Filtry:
type,updated_afterorazlimit/page_token - Obiekt w komunikacji:
reporting.entity - Klucz złączenia:
id/entity_id(ta sama wartość)
reporting.simulation_results.entity_id = reporting.entities.id.
Operacyjny GET /v1/entities pozostaje w entity:read i wymaga innego
uprawnienia.
ReportingEntities.pq
entity_versions i cohort_memberships
Te dwa zbiory danych mają nazwany wyjątek dotyczący wyłącznie stanu bieżącego:Nie istnieje autorytatywna tabela historii wersji ani członkostw. Ten zbiór danych przedstawia bieżący wiersz jako jeden otwarty przedział (valid_toma wartość null,is_currentma wartość true).valid_fromtocreated_at, a w przeciwnym razieupdated_atdla wersji encji oraz czas obserwacji żądania dla członkostw w kohortach. Zamknięte przedziały historyczne nie są tworzone sztucznie.
- entity_versions:
GET /v1/reporting/entity_versions. Te same filtry co w entities.valid_fromtocreated_at, a w przeciwnym razieupdated_at. Encja, w której oba znaczniki czasu mają wartość null, jest pomijana. - cohort_memberships:
GET /v1/reporting/cohort_memberships. Filtry:cohort,entity,updated_after.updated_atto ostatnia aktualizacja Kohorty, dzięki czemu odświeżanie przyrostowe pozostaje wiarygodne.valid_fromto czas obserwacji żądania. Połączentity_idzreporting.entities.id.
ReportingEntityVersions.pq
ReportingCohortMemberships.pq
Model semantyczny w schemacie gwiazdy na /v1/activities
/v1/activities to opatrzony znacznikami czasu strumień zdarzeń organizacji. Nie zawiera
miar liczbowych — każda wielkość w raporcie jest liczbą wierszy — co sprawia, że schemat gwiazdy
jest naturalnym wyborem.
Activitiesto tabela faktów zdarzeń na rzeczywistym poziomie szczegółowości. Jeden wiersz na aktywność. Uczestnicy są tu usuwani i odtwarzani jako osobna tabela.ActivityParticipantsistnieje, ponieważ uczestnicy faktycznie występują w relacji jeden-do-wielu, z rolami takimi jakactoritarget. Spłaszczenie doActivitiesalbo zduplikowałoby wiersze aktywności (zawyżając każdą liczbę), albo pominęłoby dodatkowych uczestników. Relacja zActivitiesjest jedyną relacją dwukierunkową w modelu, dzięki czemu fragmentator encji sięga do tabeli faktów.Entitiesto wymiar nazywający uczestników. Wiersze uczestników w aktywności zawierająentity_idi rolę, ale nie nazwę wyświetlaną.Datesjest generowana w M (zero wywołań API) i oznaczona jako tabela dat modelu. Dzięki temu funkcje DAX time intelligence (DATESINPERIOD,DATEADD) są dozwolone. Kolumny z nazwami miesięcy i dni tygodnia deklarująsortByColumnna swoich odpowiednikach liczbowych, aby wizualizacje nie sortowały miesięcy alfabetycznie.
discourageImplicitMeasures): łączna liczba
aktywności, aktywne encje, aktywności na aktywną encję, dni z aktywnością
oraz 7-dniowa krocząca średnia dzienna.
Kształt tabeli pomostowej
ActivityParticipants przechodzi po /v1/activities i rozwija tablicę participants
do jednego wiersza na uczestnika:
ActivityParticipants.pq
ActivityParticipants przechodzi po /v1/activities niezależnie, zamiast
odwoływać się do zapytania Activities. W Power BI dwa zapytania załadowane jako dwie
tabele pobierają dane niezależnie w czasie odświeżania. Zachowanie ich niezależności
pozwala usłudze odświeżać partycje obu tabel równolegle.
Odświeżanie przyrostowe
Obie tabele na poziomie faktów (Activities i ActivityParticipants) deklarują
zasadę odświeżania przyrostowego Power BI: przechowuj 5 lat partycji rocznych,
ponownie importuj ostatnie 14 dni przy każdym odświeżeniu.
Mechanizm opiera się na parze parametrów DateTime, RangeStart i RangeEnd,
które usługa Power BI ponownie wiąże dla każdej partycji w czasie odświeżania. Każde zapytanie faktów
przekłada te parametry na filtry API start_date i end_date,
więc liczba żądań na partycję jest proporcjonalna do partycji, a nie do całej historii. Zapytanie poszerza okno API o minutę
z każdej strony i lokalnie ponownie stosuje dokładną półotwartą granicę [RangeStart, RangeEnd),
dzięki czemu poprawność partycji nie zależy od tego, czy serwer
traktuje swoje granice jako włączne, czy wyłączne.
Activities.pq — the fold that makes incremental refresh work
14-dniowe okno jest celowo szerokie. Pobieranie aktywności nie polega wyłącznie na dopisywaniu bieżących danych:
uzupełnienia z konektorów wprowadzają zdarzenia ze znacznikami czasu z przeszłości.
Okno 1–2 dni trwale by je pominęło.
Poszerzanie okna odświeżania w API
GET /v1/activities akceptuje filtry start_date i end_date, na które przekładane są
parametry Power BI, filtrując event_ts pomiędzy granicami.
Entities jest wymiarem, dlatego w tym przykładzie jest odświeżany w całości za każdym razem,
a nie przyrostowo.
Zbiory danych raportowych używają własnych znaczników (updated_after,
occurred_after) zamiast okna dat aktywności.
Limity żądań podczas odświeżania
/v1 egzekwuje oddzielne budżety dla klucza i adresu IP (zobacz
limity żądań). Przestrzegaj 429 + Retry-After; nie
zapisuj na stałe budżetu żądań w modelu. Istotne są dwie właściwości odświeżania
w Power BI:
- Przejście pojedynczej tabeli jest sekwencyjne. Każde żądanie strony wymaga tokenu poprzedniej strony, więc pojedyncza tabela jest ograniczona opóźnieniem niezależnie od rozmiaru strony.
- Równoległe odświeżanie tabel mnoży obciążenie. Przypadek, w którym dochodzi do osiągnięcia limitu, to równoczesne odświeżanie kilku dużych tabel,
dlatego ścieżka ponawiania 429 w
Fn_FetchAllma znaczenie. Lepiej ograniczyć liczbę równoległych tabel, niż zakładać nieograniczoną współbieżność.
Wersje kontraktu i zapisane poświadczenia
/v1 akceptuje nagłówek żądania Living-Security-Version służący do przypięcia opublikowanej
wersji kontraktu (zobacz Szybki start API). Power
Query nie może wysłać tego nagłówka, gdy źródło danych używa zapisanych poświadczeń —
tylko anonimowe źródła danych dopuszczają nagłówki niestandardowe. Dodanie go powoduje błąd odświeżania:
contract_version lub najnowszej opublikowanej wersji, jeśli nie ustawiono przypięcia.
Przed publikacją odświeżania potwierdź wersję kontraktu konta u administratora API. Obsługiwane wersje znajdziesz w dzienniku zmian API.
Jeśli odświeżanie zacznie zachowywać się nieoczekiwanie, sprawdź nagłówek odpowiedzi API
Living-Security-Version, aby zobaczyć, który kontrakt faktycznie
obsłużył żądanie.
Odśwież i zweryfikuj model
Opublikuj model semantyczny w obszarze roboczym Power BI, powiąż jego zapisane poświadczenie z regionalnym źródłem/v1 i uruchom odświeżenie przed włączeniem
harmonogramu. Przejrzyj historię odświeżania pod kątem błędów lub niepełnych odczytów.
Porównaj liczby wierszy z niezależnym odczytem API przy użyciu tych samych filtrów.
Przewodnik po stronicowaniu zawiera przykłady w Pythonie i cURL
dotyczące odczytu kompletnego zbioru wyników. Odświeżenie, które odczytuje tylko
pierwszą stronę, może wyglądać na udane w małym zbiorze danych; porównaj liczby, zanim zaczniesz polegać na raporcie.
Wybory dotyczące modelu
- Sumy kampanii i wyniki na poziomie osób mają różny poziom szczegółowości.
SimulationResultswywołujeGET /v1/simulations/{id}/results(jedno GET na uruchomienie). W przypadku phishingu na poziomie osób dodaj zapytania doGET /v1/reporting/simulation_resultsiGET /v1/reporting/simulation_events(lub operacyjnegoGET /v1/simulation_results, jeśli masz jużsimulation:read). vectorsw/v1/simulationsjest spłaszczone do ciągu połączonego przecinkami. Kolumny typu lista nie można używać do fragmentowania jako prawdziwego wymiaru. Jeśli strona raportu wymaga filtrowania według wektora, dodaj tabelę pomostową symulacja–wektor.
Dalsze kroki
Developer Hub
Utwórz konto usługi i klucz API dla Power BI.
Szybki start API
Uwierzytelniaj żądania
/v1 za pomocą uwierzytelniania Basic.Stronicowanie
Koperta listy, tokeny kursora i stabilność filtrów w trakcie przechodzenia.
Limity żądań
Budżety dla klucza i adresu IP, kontrakt 429 oraz wskazówki dotyczące ponawiania.

