/v1 læses ind i Power BI. Den omfatter
forbindelsesmønstret i Power Query (M), en semantisk stjerneskemamodel opbygget
på /v1/activities, trinvis opdatering og hvornår man bør bruge reporting-preview-datasættene til phishing-resultater pr. person.
Eksemplerne bruger den amerikanske produktionsvært
(https://api.us-east-1.livingsecurity.ai/v1). For en EU-organisation skal du bruge
https://api.eu-west-1.livingsecurity.ai/v1 i både Fn_FetchAll og
Fn_GetJson og derefter binde datakildens legitimationsoplysninger til denne vært. Se
Regioner.
Denne vejledning bruger lagrede Basic-legitimationsoplysninger med en API-nøgle. Du behøver ikke en
OAuth-klient. Se Godkendelse for valgmulighederne for legitimationsoplysninger, og Developer Hub
for adgang og opsætning.
Hvad dette eksempel bruges til
Brug det, når du har brug for at:- Indlæse listeendepunkter fra
/v1i et Power BI-datasæt med korrekt cursor-paginering og gentagelsesforsøg ved rate limit. - Opbygge en semantisk model, hvor målinger (“aktive entiteter”, “aktiviteter pr. aktiv entitet”) er dimensionelle i stedet for at blive talt op fra en flad tabel.
- Bringe en planlagt Power BI-opdatering ned fra en fuld gennemgang af historikken til et lille dagligt vindue ved hjælp af trinvis opdatering.
- Vælge den rette phishing-granularitet: kampagnetotaler (operationelle) kontra resultater pr. person og typede hændelser (reporting-preview).
Forudsætninger
- En API-nøgle med de tilladelser, dine forespørgsler kræver:
- Operationelt eksempel:
activity:read,entity:readogsimulation:read. - Phishing pr. person via rapporteringsdatasæt:
reporting:read. Se API-nøgler.
- Operationelt eksempel:
- Power BI Desktop eller et Power BI-/Fabric-arbejdsområde, hvor du kan oprette en semantisk model og planlægge opdatering.
Vælg den rette granularitet
/v1 udstiller to beslægtede overflader til phishing. De kan ikke bruges i flæng.
Power BI-eksempelforespørgslerne nedenfor kalder de operationelle ruter
(
/v1/simulations, /v1/simulations/{id}/results, /v1/activities,
/v1/entities). Til phishing-rapportering pr. person anbefales det at bruge
reporting-preview-familien nedenfor. En nøgle, der kun har tildelt reporting:read, kan ikke
kalde operationelle /v1/simulation_results (API’et returnerer 403).
Sværhedsgradsskala
Simuleringens sværhedsgrad er et heltal fra 1 til 5 på/v1/simulations (difficulty_level),
/v1/simulation_results (difficulty_level), /v1/activities-egenskaber
(difficulty_tier) og /v1/reporting/simulation_events (difficulty_tier).
1 er nemmest, og 5 er sværest. Adaptive og progressive simuleringer har ingen
enkelt værdi på kampagneniveau, så /v1/simulations.difficulty_level er null,
mens difficulty_level pr. modtager på resultater stadig kan være angivet. For at afbilde til
ældre eksporter med lav/mellem/høj skal 1–2 behandles som lav, 3 som mellem og 4–5 som
høj.
Forbindelsesmønster (Power Query)
Fire regler ligger til grund for hver forespørgsel i eksemplet. Hver enkelt af dem håndhæves af Power BI-tjenesten og er ikke blot en stilpræference.Hold basis-URL'en i Web.Contents statisk, og lad den slutte ved /v1
Hold basis-URL'en i Web.Contents statisk, og lad den slutte ved /v1
Læg alt dynamisk i
RelativePath og Query. Det første argument til
Web.Contents skal være en bogstavelig streng, der ender ved organisationens
regionale /v1-rod:- US:
https://api.us-east-1.livingsecurity.ai/v1 - EU:
https://api.eu-west-1.livingsecurity.ai/v1
"simulations", ikke
"v1/simulations"). Indsæt ikke en amerikansk vært for en EU-organisation.Hvis det første argument bygges ved strengsammenkædning, kan Power BI-tjenesten
ikke statisk identificere datakilden, og planlagt opdatering mislykkes med
en fejl om “dynamic data source”, selvom forespørgslen virker i Power BI
Desktop.Angiv API-nøglen som en lagret Basic-legitimation, ikke i forespørgselsteksten
Angiv API-nøglen som en lagret Basic-legitimation, ikke i forespørgselsteksten
Når Power BI beder om legitimationsoplysninger til
/v1-datakilden, skal du vælge
Basic og indsætte API-nøglen som brugernavn. Angiv en pladsholder som
x i feltet Adgangskode. Power BI-tjenesten afviser en tom
adgangskode, selvom API’et ignorerer feltet. Nøglen som adgangskode med et
pladsholder-brugernavn virker også.Tilføj ikke en Authorization-header i M. Den virker på din computer, men
bager derefter nøglen ind i forespørgselsfilen og giver problemer med planlagt opdatering.Lad legitimationsdialogens forbindelsestest køre
Lad legitimationsdialogens forbindelsestest køre
GET /v1 er godkendt: det returnerer 200 med en gyldig nøgle og 401
uden. Peg datakilden mod …/v1, og spring ikke testen over —
en gyldig nøgle gemmes, mens en tilbagekaldt eller fejlformet nøgle fejler med det samme.Ældre eksempler brugte den blotte vært som datakilde og fortalte, at du skulle springe
testen over, fordi GET / altid er 404. Peg disse modeller om til …/v1.Angiv eksplicit limit=500 på hver listeforespørgsel
Angiv eksplicit limit=500 på hver listeforespørgsel
Standardsidestørrelsen på hvert
/v1-listeendepunkt er 25. Hvis du lader den stå på standard,
multipliceres antallet af forespørgsler for de samme data. Forespørgselsværdier skal være tekst —
limit = "500" i M, ikke limit = 500.Delt pagineringsfunktion
Hver forespørgsel i eksemplet kalder én enkeltFn_FetchAll, der gennemgår
next_page_token, indtil den er null (se
paginering). Dens væsentligste egenskaber:
- Statisk
/v1-basis-URL, dynamiskRelativePathogQuery. Påkrævet for planlagt opdatering og for legitimationstesten. ManualStatusHandling = {429}med afgrænset gentagelsesforsøg. Funktionen læserRetry-After, når Power Query udstiller den, ellers venter den 30 sekunder og opgiver efter 5 på hinanden følgende429-svar med en eksplicit fejl i stedet for at køre i ring, indtil opdateringen får timeout.5xxforsøges bevidst ikke igen — en serverfejl skal komme til syne og ikke stilfærdigt give et delvist datasæt.Timeoutpå 60 sekunder. Sider svarer typisk på langt under et sekund, så et minuts stilhed betyder, at forespørgslen er død.Binary.BufferførJson.Document. Uden buffering kan mashup-motoren anmode om svarstrømmen igen, hvis den læser den mere end én gang.baseQuerysendes uændret i hver iteration. Sidetokens er uigennemsigtige, signerede cursorer bundet til organisationen, legitimationen, kontraktversionen og fingeraftrykket af filtre og sortering. Hvis et filter ændres midt i en gennemgang, afvises det som et ugyldigt token i stedet for at starte forfra fra side ét.
Fn_FetchAll.pq — base and call shape
Typede forespørgsler pr. endepunkt
Hver forbruger afFn_FetchAll følger samme form: kald endepunktet,
projicer en fast kolonneliste, fjern object-diskriminatoren, og typebestem
tidsstempler som datetimezone, så datomålinger ikke stilfærdigt forskydes af
opdateringskapacitetens tidszone.
Excel
Den samme Power Query (M) kører i Excels Hent og transformér — det er den samme motor som i Power BI Desktop. Brug dette, når du ønsker en regnearkstabel i stedet for en semantisk model. I Excel til Windows (Microsoft 365, Excel 2024, 2021, 2019 eller 2016):- Data → Hent data → Fra andre kilder → Tom forespørgsel.
- I Power Query Editor skal du vælge Hjem → Avanceret Editor. Indsæt
først
Fn_FetchAll, og omdøb derefter forespørgslen tilFn_FetchAll(Forespørgselsindstillinger → Navn, eller højreklik i ruden Forespørgsler → Omdøb). - Gentag for
Fn_GetJsonog derefter for hver rapportforespørgsel. - Hjem → Luk og indlæs → Luk og indlæs til… åbner dialogen Importér data.
Vælg Opret kun forbindelse for
Fn_FetchAllogFn_GetJson(de er funktioner, ikke tabeller). Vælg Tabel for hver rapportforespørgsel, du ønsker i et regneark. - Ved første opdatering skal du vælge Basic: API-nøglen som Brugernavn, en
pladsholder som
xsom Adgangskode. Excel gemmer én legitimation pr. datakilde-URL; senere forespørgsler, der rammer den samme/v1-vært, genbruger den.
Luk og indlæs til… kan være nedtonet, første gang du opretter en forespørgsel i
en projektmappe. Brug Luk og indlæs, vælg derefter i Excel Data →
Forespørgsler og forbindelser, højreklik på forespørgslen, og vælg Indlæs til.
Den fremgangsmåde er dokumenteret af Microsoft til dette tilfælde.
Living-Security-Version fra Power Query på en
godkendt kilde — samme begrænsning som i Power BI. Fastlås servicekontoen eller send
api_version i forespørgselsposten. Se
Kontraktversioner og lagrede legitimationsoplysninger.
Færdige rapportforespørgsler (kolonnemappinger og afvigelser fra en
tidligere udbyders eksport):
Compliance pr. person
Tilmeldinger til Træning på granularitet person × tildeling.
E-mail-phishinglog
Phishing-interaktioner på hændelsesniveau, seneste 12 måneder.
Mest modtagelige brugere
Opsummering pr. person af klik, legitimationsoplysninger og rapporteringer over 12 måneder.
Reporting-preview-datasæt (phishing pr. person)
Reporting-preview-familien leverer datasæt til phishing pr. person. Den kræverreporting:read og rapporteringsadgang for din organisation.
Brug datasætkataloget nedenfor til at undersøge dens skemaer og datapolitikker.
Find det aktuelle katalog:
simulation_results
- Sti:
GET /v1/reporting/simulation_results - Granularitet: entitet × simulering
- filtre:
simulation,entity,updated_aftersamtlimit/page_token - Wire-objekt:
reporting.simulation_result - Join-nøgler:
entity_id,simulation_id
ReportingSimulationResults.pq (sketch)
updated_after som inklusivt nedre vandmærke, når du opdaterer nylige
partitioner. Foranderlige resultatdimensioner gentages på stedet under samme id.
simulation_events
- Sti:
GET /v1/reporting/simulation_events - Granularitet: ét typet faktum pr. observeret interaktion
- filtre:
simulation,entity,event_type,occurred_aftersamtlimit/page_token - Wire-objekt:
reporting.simulation_event - Hændelsestyper: lukkede offentlige tokens som
simulation.delivered,simulation.opened,simulation.link_clicked,simulation.credentials_submitted,simulation.reported— ikke rå ClickHouse-phishing.simulation.*-aktivitetstyper - enhed:
device_typeer den afledte klasse (observerede tokens omfatterdesktop,mobile,tablet,unknown). Råuser_agentfindes ikke på/v1. Rå IP findes aldrig på/v1(gemmes aldrig; kun saltetip_hash).
ReportingSimulationEvents.pq (sketch)
occurred_after til trinvise hændelsesindlæsninger. Fakta er kun-tilføj;
sent ankomne data er nye rækker.
entities
- Sti:
GET /v1/reporting/entities - Granularitet: én aktuel række pr. entitet
- filtre:
type,updated_aftersamtlimit/page_token - Wire-objekt:
reporting.entity - Join-nøgle:
id/entity_id(samme værdi)
reporting.simulation_results.entity_id = reporting.entities.id.
Operationelle GET /v1/entities forbliver på entity:read og er en anden
tilladelse.
ReportingEntities.pq
entity_versions og cohort_memberships
Disse to datasæt har en navngivet undtagelse, hvor kun det aktuelle vises:Der findes ingen autoritativ tabel med versions- eller medlemskabshistorik. Dette datasæt projicerer den aktuelle række som ét åbent interval (valid_toer null,is_currenter true).valid_fromercreated_ateller ellersupdated_atfor entitetsversioner og forespørgslens observationstidspunkt for Kohorte-medlemskaber. Lukkede historiske intervaller opdigtes ikke.
- entity_versions:
GET /v1/reporting/entity_versions. Samme filtre som entities.valid_fromercreated_ateller ellersupdated_at. En entitet med begge tidsstempler null udelades. - cohort_memberships:
GET /v1/reporting/cohort_memberships. filtre:cohort,entity,updated_after.updated_ater Kohortens seneste opdatering, så trinvis opdatering forbliver retvisende.valid_fromer forespørgslens observationstidspunkt. Joinentity_idtilreporting.entities.id.
ReportingEntityVersions.pq
ReportingCohortMemberships.pq
Semantisk stjerneskemamodel på /v1/activities
/v1/activities er organisationens tidsstemplede hændelsesstrøm. Den har ingen
numeriske målinger — enhver størrelse i en rapport er et rækkeantal — hvilket gør et
stjerneskema til et naturligt valg.
Activitieser hændelsesfaktatabellen på den sande granularitet. Én række pr. aktivitet. Deltagere fjernes her og genopbygges som deres egen tabel.ActivityParticipantsfindes, fordi deltagere reelt er en-til-mange med roller somactorogtarget. Hvis de blev fladet ud påActivities, ville det enten duplikere aktivitetsrækker (og dermed oppuste hvert antal) eller kassere yderligere deltagere. Relationen tilActivitieser modellens eneste tovejsrelation, så en entitets-slicer når faktatabellen.Entitieser dimensionen, der navngiver deltagere. Deltagerrækker på en aktivitet indeholderentity_idog en rolle, men ikke et visningsnavn.Datesgenereres i M (nul API-kald) og markeres som modellens datotabel. Det er det, der gør DAX-tidsintelligens (DATESINPERIOD,DATEADD) lovlig. Kolonner med måneds- og ugedagsnavne angiversortByColumnpå deres talpartnere, så visuals ikke sorterer måneder alfabetisk.
discourageImplicitMeasures): samlede
aktiviteter, aktive entiteter, aktiviteter pr. aktiv entitet, dage med aktivitet
og et 7-dages glidende dagligt gennemsnit.
Bridge-tabellens form
ActivityParticipants gennemgår /v1/activities og udfolder participants-arrayet
til én række pr. deltager:
ActivityParticipants.pq
ActivityParticipants gennemgår /v1/activities uafhængigt i stedet for at
referere til Activities-forespørgslen. I Power BI henter to forespørgsler, der er indlæst som to
tabeller, hver især data uafhængigt på opdateringstidspunktet. Når de holdes uafhængige,
kan tjenesten opdatere begge tabellers partitioner parallelt.
Trinvis opdatering
Begge tabeller på faktagranularitet (Activities og ActivityParticipants) angiver en
Power BI-politik for trinvis opdatering: behold 5 års årlige partitioner,
genimportér de seneste 14 dage ved hver opdatering.
Mekanismen er et par DateTime-parametre, RangeStart og RangeEnd,
som Power BI-tjenesten gen-binder pr. partition på opdateringstidspunktet. Hver faktaforespørgsel
indfolder disse parametre i API’ets start_date- og end_date-filtre,
så antallet af forespørgsler pr. partition står i forhold til partitionen og
ikke til den samlede historik. Forespørgslen udvider API-vinduet med et minut på hver
side og genanvender den præcise halvåbne [RangeStart, RangeEnd)-grænse
lokalt, så partitionens korrekthed ikke afhænger af, om serveren
behandler sine grænser som inklusive eller eksklusive.
Activities.pq — the fold that makes incremental refresh work
Vinduet på 14 dage er bevidst generøst. Indlæsning af aktiviteter er ikke
kun-tilføj-ved-nu: connector-efterfyldninger lander hændelser med tidsstempler i fortiden.
Et vindue på 1-2 dage ville permanent gå glip af dem.
Udvidelse af opdateringsvinduet ind i API’et
GET /v1/activities accepterer de start_date- og end_date-filtre, som
Power BI-parametrene indfoldes i, og filtrerer event_ts mellem grænserne.
Entities er en dimension, så dette eksempel opdaterer den fuldt ud hver gang
i stedet for trinvist.
Rapporteringsdatasæt bruger deres egne vandmærker (updated_after,
occurred_after) i stedet for aktiviteternes datovindue.
Rate limits under opdatering
/v1 håndhæver separate budgetter pr. nøgle og pr. IP (se
rate limits). Respektér 429 + Retry-After; hardkod
ikke et forespørgselsbudget i din model. To egenskaber ved Power BI-opdateringer
er vigtige:
- En enkelt tabelgennemgang er sekventiel. Hver sideforespørgsel kræver den forrige sides token, så én tabel er latenstidsbundet uanset sidestørrelse.
- Samtidige tabelopdateringer multiplicerer. Flere store tabeller, der opdateres
parallelt, er det tilfælde, der rammer loftet, og derfor er 429-
genforsøgsstien i
Fn_FetchAllvigtig. Foretræk færre parallelle tabeller frem for at antage ubegrænset samtidighed.
Kontraktversioner og lagrede legitimationsoplysninger
/v1 accepterer en Living-Security-Version-forespørgselsheader til at fastlåse en udgivet
kontraktversion (se API-quickstart). Power
Query kan ikke sende denne header, når datakilden bruger lagrede legitimationsoplysninger —
kun anonyme datakilder tillader brugerdefinerede headers. Hvis den tilføjes, mislykkes en opdatering
med:
contract_version, eller den senest udgivne version, hvis der ikke er angivet nogen fastlåsning.
Bekræft kontoens kontraktversion med din API-administrator, før du
udgiver en opdatering. Se API-ændringsloggen for
understøttede versioner.
Hvis en opdatering begynder at opføre sig uventet, skal du undersøge API’ets
Living-Security-Version-svarheader for at se, hvilken kontrakt der faktisk
betjente forespørgslen.
Opdatér og kontrollér din model
Udgiv den semantiske model til dit Power BI-arbejdsområde, bind dens lagrede legitimation til den regionale/v1-kilde, og kør en opdatering, før du aktiverer en
tidsplan. Gennemgå opdateringshistorikken for fejl eller ufuldstændige læsninger.
Kontrollér rækkeantal mod en uafhængig API-læsning med de samme filtre.
Pagineringsvejledningen indeholder Python- og cURL-eksempler
på, hvordan et komplet resultatsæt læses. En opdatering, der kun læser
den første side, kan se vellykket ud på et lille datasæt; sammenlign antal, før
du stoler på rapporten.
Modelvalg
- Kampagnetotaler og resultater pr. person har forskellig granularitet.
SimulationResultskalderGET /v1/simulations/{id}/results(ét GET pr. kørsel). Til phishing pr. person skal du tilføje forespørgsler forGET /v1/reporting/simulation_resultsogGET /v1/reporting/simulation_events(eller operationelleGET /v1/simulation_results, hvis du allerede harsimulation:read). vectorspå/v1/simulationser fladet ud til en kommasepareret streng. En kolonne af listetype kan ikke bruges som en egentlig dimension i en slicer. Hvis en rapportside skal filtrere på vektor, skal du tilføje en bridge-tabel fra simulering til vektor.
Næste trin
Developer Hub
Opret en servicekonto og en API-nøgle til Power BI.
API-quickstart
Godkend
/v1-forespørgsler med Basic-godkendelse.Paginering
Listekonvolutten, cursor-tokens og filterstabilitet gennem en gennemgang.
Rate limits
Budgetter pr. nøgle og pr. IP, 429-kontrakten og vejledning om gentagelsesforsøg.

