/v1 inn i Power BI. Den dekker
tilkoblingsmønsteret i Power Query (M), en semantisk stjerneskjemamodell
bygget på /v1/activities, inkrementell oppdatering, og når man bør bruke reporting-forhåndsvisningsdatasettene for utfall knyttet til phishing per person.
Eksemplene bruker produksjonsverten i USA
(https://api.us-east-1.livingsecurity.ai/v1). For en organisasjon i EU bruker du
https://api.eu-west-1.livingsecurity.ai/v1 i både Fn_FetchAll og
Fn_GetJson, og binder deretter datakildens legitimasjon til den verten. Se
Regioner.
Denne veiledningen bruker lagret Basic-legitimasjon med en API-nøkkel. Du trenger ingen
OAuth-klient. Se Autentisering for
valg av legitimasjon, og Developer Hub
for tilgang og oppsett.
Hva dette eksempelet brukes til
Bruk det når du må:- Laste listeendepunktene i
/v1inn i et Power BI-datasett med korrekt markørbasert paginering og nytt forsøk ved ratebegrensning. - Bygge en semantisk modell der målinger («aktive enheter», «aktiviteter per aktiv enhet») er dimensjonelle i stedet for å telles fra en flat tabell.
- Redusere en planlagt Power BI-oppdatering fra en full gjennomgang av historikken til et lite døgnvindu ved hjelp av inkrementell oppdatering.
- Velge riktig granularitet for phishing: kampanjetotaler (operasjonelt) versus resultater per person og typede hendelser (forhåndsvisning av rapportering).
Forutsetninger
- En API-nøkkel med de tillatelsene spørringene dine trenger:
- Operasjonelt eksempel:
activity:read,entity:readogsimulation:read. - Phishing per person via rapporteringsdatasett:
reporting:read. Se API-nøkler.
- Operasjonelt eksempel:
- Power BI Desktop, eller et Power BI- / Fabric-arbeidsområde der du kan opprette en semantisk modell og planlegge oppdatering.
Velg riktig granularitet
/v1 tilbyr to beslektede flater for phishing. De er ikke utskiftbare.
Eksempelspørringene for Power BI nedenfor kaller de operasjonelle rutene
(
/v1/simulations, /v1/simulations/{id}/results, /v1/activities,
/v1/entities). For rapportering av phishing per person bør du bruke
reporting-forhåndsvisningsfamilien nedenfor. En nøkkel som kun har fått reporting:read kan ikke
kalle operasjonell /v1/simulation_results (API-et returnerer 403).
Vanskelighetsskala
Vanskelighetsgraden for simuleringer er et heltall fra 1 til 5 på/v1/simulations (difficulty_level),
/v1/simulation_results (difficulty_level), /v1/activities-egenskaper
(difficulty_tier) og /v1/reporting/simulation_events (difficulty_tier).
1 er enklest og 5 er vanskeligst. Adaptive og progressive simuleringer har ingen
enkeltverdi på kampanjenivå, så /v1/simulations.difficulty_level er null,
mens difficulty_level per mottaker på resultater fortsatt kan være satt. For å tilordne til
eldre eksporter med lav/middels/høy, behandler du 1–2 som lav, 3 som middels og 4–5 som
høy.
Tilkoblingsmønster (Power Query)
Fire regler ligger til grunn for hver spørring i eksempelet. Hver av dem håndheves av Power BI-tjenesten, og er ikke et spørsmål om stil.Hold basis-URL-en i Web.Contents statisk og la den ende på /v1
Hold basis-URL-en i Web.Contents statisk og la den ende på /v1
Legg alt dynamisk i
RelativePath og Query. Det første argumentet til
Web.Contents må være en bokstavelig streng som ender ved organisasjonens
regionale /v1-rot:- USA:
https://api.us-east-1.livingsecurity.ai/v1 - EU:
https://api.eu-west-1.livingsecurity.ai/v1
"simulations", ikke
"v1/simulations"). Ikke lim inn en amerikansk vert for en organisasjon i EU.Hvis det første argumentet bygges ved strengsammenslåing, kan Power BI-tjenesten
ikke identifisere datakilden statisk, og planlagt oppdatering mislykkes med
en feil om «dynamisk datakilde», selv om spørringen fungerer i Power BI
Desktop.Oppgi API-nøkkelen som lagret Basic-legitimasjon, ikke i spørringsteksten
Oppgi API-nøkkelen som lagret Basic-legitimasjon, ikke i spørringsteksten
Når Power BI ber om legitimasjon for datakilden
/v1, velger du
Basic og limer inn API-nøkkelen som brukernavn. Legg inn en plassholder som
x i feltet passord. Power BI-tjenesten avviser et tomt
passord selv om API-et ignorerer det feltet. Nøkkel som passord med et
plassholder-brukernavn fungerer også.Ikke legg til en Authorization-header i M. Det fungerer på din lokale maskin, men
bakes deretter inn i spørringsfilen med nøkkelen og skaper problemer for planlagt oppdatering.La tilkoblingstesten i legitimasjonsdialogen kjøre
La tilkoblingstesten i legitimasjonsdialogen kjøre
GET /v1 er autentisert: den returnerer 200 med en gyldig nøkkel og 401
uten. Pek datakilden mot …/v1 og ikke hopp over testen –
en gyldig nøkkel lagres, mens en tilbakekalt eller ugyldig nøkkel mislykkes umiddelbart.Eldre eksempler brukte den rene verten som datakilde og ba deg hoppe over
testen fordi GET / alltid er 404. Pek disse modellene om til …/v1.Sett limit=500 eksplisitt på hver listespørring
Sett limit=500 eksplisitt på hver listespørring
Standard sidestørrelse på hvert listeendepunkt i
/v1 er 25. Hvis du beholder
standarden, øker antall forespørsler for de samme dataene. Spørringsverdier må være tekst –
limit = "500" i M, ikke limit = 500.Delt pagineringsfunksjon
Hver spørring i eksempelet kaller én enkeltFn_FetchAll som går gjennom
next_page_token til den er null (se
paginering). Dens viktigste egenskaper:
- Statisk
/v1-basis-URL, dynamiskRelativePathogQuery. Påkrevd for planlagt oppdatering og for legitimasjonstesten. ManualStatusHandling = {429}med begrenset antall nye forsøk. Funksjonen leserRetry-Afternår Power Query eksponerer den, ellers venter den 30 sekunder, og gir opp etter 5 påfølgende429-svar med en eksplisitt feil i stedet for å gå i løkke til oppdateringen går ut på tid.5xxprøves bevisst ikke på nytt – en serverfeil skal komme til syne, ikke i det stille gi et delvis datasett.Timeoutpå 60 sekunder. Sider svarer vanligvis på godt under ett sekund, så ett minutts stillhet betyr at forespørselen er død.Binary.BufferførJson.Document. Uten buffering kan mashup-motoren be om svarstrømmen på nytt hvis den leser den mer enn én gang.baseQuerysendes uendret i hver iterasjon. Sidetokener er ugjennomsiktige, signerte markører bundet til organisasjonen, legitimasjonen, kontraktsversjonen og fingeravtrykket av filtre og sortering. Hvis et filter endres midt i gjennomgangen, avvises det som et ugyldig token i stedet for å starte på nytt fra side én.
Fn_FetchAll.pq — base and call shape
Typede spørringer per endepunkt
Hver forbruker avFn_FetchAll følger samme mønster: kall endepunktet,
projiser en fast kolonneliste, fjern diskriminatoren object, og typ
tidsstempler som datetimezone slik at datomål ikke forskyves i det stille på grunn av
tidssonen til oppdateringskapasiteten.
Excel
Den samme Power Query (M) kjører i Excels Get & Transform – det er samme motor som i Power BI Desktop. Bruk dette når du vil ha en regnearktabell i stedet for en semantisk modell. I Excel for Windows (Microsoft 365, Excel 2024, 2021, 2019 eller 2016):- Data → Get Data → From Other Sources → Blank Query.
- I Power Query Editor velger du Hjem → Avansert Redigerer. Lim inn
Fn_FetchAllførst, og gi deretter spørringen navnetFn_FetchAll(Innstillinger for spørring → Name, eller høyreklikk i Queries-ruten → Rename). - Gjenta for
Fn_GetJson, og deretter for hver rapportspørring. - Hjem → Close & Load → Close & Load To… åpner dialogen Import Data.
Velg Only Create Connection for
Fn_FetchAllogFn_GetJson(de er funksjoner, ikke tabeller). Velg Table for hver rapportspørring du vil ha i et regneark. - Ved første oppdatering velger du Basic: API-nøkkelen som User name, en
plassholder som
xsom passord. Excel lagrer én legitimasjon per datakilde-URL; senere spørringer som treffer samme/v1-vert gjenbruker den.
Close & Load To… kan være nedtonet første gang du oppretter en spørring i
en arbeidsbok. Bruk Close & Load, velg deretter i Excel Data →
Queries & Connections, høyreklikk spørringen og velg Load To.
Denne fremgangsmåten er dokumentert av Microsoft for dette tilfellet.
Living-Security-Version fra Power Query på en
autentisert kilde – samme begrensning som i Power BI. Fest versjonen på tjenestekontoen
eller send api_version i spørringsposten. Se
Kontraktsversjoner og lagret legitimasjon.
Ferdige rapportspørringer (kolonnetilordninger og avvik fra en
tidligere leverandørs eksport):
Samsvar per person
Opplæringspåmeldinger med granularitet person × tildeling.
Phishing-logg for e-post
Phishing-interaksjoner på hendelsesnivå, siste 12 måneder.
Mest utsatte brukere
Oppsummering per person over 12 måneder for klikk, legitimasjon og rapportering.
Forhåndsvisningsdatasett for rapportering (phishing per person)
Forhåndsvisningsfamilien for rapportering tilbyr datasett for phishing per person. Den kreverreporting:read og rapporteringstilgang for organisasjonen din.
Bruk datasettkatalogen nedenfor til å undersøke skjemaene og databehandlingsreglene.
Oppdag den aktive katalogen:
simulation_results
- Sti:
GET /v1/reporting/simulation_results - Granularitet: enhet × simulering
- Filtre:
simulation,entity,updated_after, plusslimit/page_token - Wire-objekt:
reporting.simulation_result - Koblingsnøkler:
entity_id,simulation_id
ReportingSimulationResults.pq (sketch)
updated_after som inkluderende nedre vannmerke når du oppdaterer nylige
partisjoner. Mutable resultatdimensjoner omskrives på stedet under samme id.
simulation_events
- Sti:
GET /v1/reporting/simulation_events - Granularitet: ett typet faktum per observerte interaksjon
- Filtre:
simulation,entity,event_type,occurred_after, plusslimit/page_token - Wire-objekt:
reporting.simulation_event - Hendelsestyper: lukkede offentlige tokens som
simulation.delivered,simulation.opened,simulation.link_clicked,simulation.credentials_submitted,simulation.reported– ikke rå ClickHouse-aktivitetstyper av typenphishing.simulation.* - Enhet:
device_typeer den avledede klassen (observerte tokens inkludererdesktop,mobile,tablet,unknown). Råuser_agentfinnes ikke på/v1. Rå IP finnes aldri på/v1(lagres aldri; kun saltetip_hash).
ReportingSimulationEvents.pq (sketch)
occurred_after for inkrementelle hendelsesinnlastinger. Fakta er kun-tillegg;
sene ankomster er nye rader.
entities
- Sti:
GET /v1/reporting/entities - Granularitet: én gjeldende rad per enhet
- Filtre:
type,updated_after, plusslimit/page_token - Wire-objekt:
reporting.entity - Koblingsnøkkel:
id/entity_id(samme verdi)
reporting.simulation_results.entity_id = reporting.entities.id.
Operasjonell GET /v1/entities forblir på entity:read og er en annen
tillatelse.
ReportingEntities.pq
entity_versions og cohort_memberships
Disse to datasettene har et navngitt unntak som kun gjelder gjeldende tilstand:Det finnes ingen autoritativ tabell for versjons- eller medlemskapshistorikk. Dette datasettet projiserer den gjeldende raden som ett åpent intervall (valid_toer null,is_currenter true).valid_fromercreated_ateller ellersupdated_atfor enhetsversjoner, og forespørselens observasjonstidspunkt for kohortmedlemskap. Lukkede historiske intervaller fabrikkeres ikke.
- entity_versions:
GET /v1/reporting/entity_versions. Samme filtre som entities.valid_fromercreated_ateller ellersupdated_at. En enhet der begge tidsstemplene er null utelates. - cohort_memberships:
GET /v1/reporting/cohort_memberships. Filtre:cohort,entity,updated_after.updated_ater siste oppdatering av kohorten, slik at inkrementell oppdatering forblir pålitelig.valid_fromer forespørselens observasjonstidspunkt. Kobleentity_idtilreporting.entities.id.
ReportingEntityVersions.pq
ReportingCohortMemberships.pq
Semantisk stjerneskjemamodell på /v1/activities
/v1/activities er organisasjonens tidsstemplede hendelsesstrøm. Den har ingen
numeriske mål – hver mengde i en rapport er et radantall – noe som gjør et
stjerneskjema til et naturlig valg.
Activitieser hendelsesfaktaet på reell granularitet. Én rad per aktivitet. Deltakere fjernes her og bygges opp igjen som sin egen tabell.ActivityParticipantsfinnes fordi deltakere faktisk er én-til-mange, med roller somactorogtarget. Flating ut påActivitiesville enten duplisert aktivitetsrader (og blåst opp alle tellinger) eller forkastet ytterligere deltakere. Relasjonen tilActivitieser modellens eneste toveisrelasjon, slik at en enhetsslicer når faktatabellen.Entitieser dimensjonen som navngir deltakere. Deltakerrader på en aktivitet harentity_idog en rolle, men ikke et visningsnavn.Datesgenereres i M (null API-kall) og markeres som modellens datotabell. Det er dette som gjør DAX-funksjoner for tidsetterretning (DATESINPERIOD,DATEADD) tillatt. Kolonner for måneds- og ukedagsnavn deklarerersortByColumnpå de numeriske tvillingkolonnene, slik at visualiseringer ikke sorterer måneder alfabetisk.
discourageImplicitMeasures): totalt antall
aktiviteter, aktive enheter, aktiviteter per aktiv enhet, dager med aktivitet,
og et 7-dagers glidende døgngjennomsnitt.
Utforming av koblingstabellen
ActivityParticipants går gjennom /v1/activities og ekspanderer participants-arrayen
til én rad per deltaker:
ActivityParticipants.pq
ActivityParticipants går gjennom /v1/activities uavhengig i stedet for å
referere til spørringen Activities. I Power BI henter to spørringer som lastes som to
tabeller hver for seg ved oppdatering. Ved å holde dem uavhengige
kan tjenesten oppdatere partisjonene i begge tabellene parallelt.
Inkrementell oppdatering
Begge tabellene på faktanivå (Activities og ActivityParticipants) deklarerer en
inkrementell oppdateringspolicy i Power BI: behold 5 år med årlige partisjoner,
importer de siste 14 dagene på nytt ved hver oppdatering.
Mekanismen er et par DateTime-parametere, RangeStart og RangeEnd,
som Power BI-tjenesten binder på nytt per partisjon ved oppdatering. Hver faktaspørring
bretter disse parameterne inn i API-ets filtre start_date og end_date,
slik at antall forespørsler per partisjon står i forhold til partisjonen,
ikke til total historikk. Spørringen utvider API-vinduet med ett minutt
på hver side og anvender den nøyaktige halvåpne grensen [RangeStart, RangeEnd)
lokalt på nytt, slik at partisjonens korrekthet ikke avhenger av om serveren
behandler grensene sine som inkluderende eller ekskluderende.
Activities.pq — the fold that makes incremental refresh work
Vinduet på 14 dager er bevisst romslig. Aktivitetsinnhenting er ikke
kun-tillegg-på-nåtidspunktet: etterfylling fra koblinger legger inn hendelser med tidsstempler fra fortiden.
Et vindu på 1–2 dager ville gått glipp av dem for alltid.
Utvide oppdateringsvinduet inn i API-et
GET /v1/activities godtar filtrene start_date og end_date som
Power BI-parameterne bretter seg inn i, og filtrerer event_ts mellom grensene.
Entities er en dimensjon, så dette eksempelet oppdaterer den fullstendig hver gang
i stedet for inkrementelt.
Rapporteringsdatasett bruker sine egne vannmerker (updated_after,
occurred_after) i stedet for datovinduet for aktiviteter.
Ratebegrensninger under oppdatering
/v1 håndhever separate budsjetter per nøkkel og per IP (se
ratebegrensninger). Respekter 429 + Retry-After; ikke
hardkod et forespørselsbudsjett inn i modellen. To egenskaper ved Power BI-oppdateringer
er viktige:
- En enkelt tabellgjennomgang er sekvensiell. Hver sideforespørsel trenger forrige sides token, så én tabell er latensbundet uavhengig av sidestørrelse.
- Samtidige tabelloppdateringer multipliseres. Når flere store tabeller oppdateres
parallelt, nås taket, og det er derfor 429-stien for nye forsøk i
Fn_FetchAller viktig. Foretrekk færre parallelle tabeller fremfor å anta ubegrenset samtidighet.
Kontraktsversjoner og lagret legitimasjon
/v1 godtar en forespørselsheader Living-Security-Version for å feste en publisert
kontraktsversjon (se API-hurtigstart). Power
Query kan ikke sende den headeren når datakilden bruker lagret legitimasjon –
bare anonyme datakilder tillater egendefinerte headere. Hvis du legger den til, mislykkes en oppdatering
med:
contract_version, eller den nyeste publiserte versjonen hvis ingen versjon er festet.
Bekreft kontoens kontraktsversjon med API-administratoren før du
publiserer en oppdatering. Se API-endringsloggen for
støttede versjoner.
Hvis en oppdatering begynner å oppføre seg uventet, kan du inspisere API-ets
svarheader Living-Security-Version for å se hvilken kontrakt som faktisk
behandlet forespørselen.
Oppdater og verifiser modellen din
Publiser den semantiske modellen til Power BI-arbeidsområdet ditt, bind den lagrede legitimasjonen til den regionale/v1-kilden, og kjør en oppdatering før du aktiverer en
tidsplan. Gå gjennom oppdateringshistorikken for feil eller ufullstendige lesinger.
Sjekk radantall mot en uavhengig API-lesing med de samme filtrene.
Pagineringsveiledningen inneholder Python- og cURL-eksempler
for å lese et komplett resultatsett. En oppdatering som bare leser den
første siden kan se vellykket ut på et lite datasett; sammenlign antallet før
du stoler på rapporten.
Modellvalg
- Kampanjetotaler og resultater per person har ulik granularitet.
SimulationResultskallerGET /v1/simulations/{id}/results(ett GET per kjøring). For phishing per person legger du til spørringer forGET /v1/reporting/simulation_resultsogGET /v1/reporting/simulation_events(eller operasjonellGET /v1/simulation_resultshvis du allerede harsimulation:read). vectorspå/v1/simulationser flatet ut til en kommaseparert streng. En kolonne av listetype kan ikke brukes som en reell dimensjon i slicere. Hvis en rapportside må filtrere på vektor, legger du til en koblingstabell mellom simulering og vektor.
Neste trinn
Developer Hub
Opprett en tjenestekonto og en API-nøkkel for Power BI.
API-hurtigstart
Autentiser forespørsler til
/v1 med Basic-autentisering.Paginering
Listeomslaget, markørtokener og filterstabilitet gjennom en hel gjennomgang.
Ratebegrensninger
Budsjetter per nøkkel og per IP, 429-kontrakten og veiledning for nye forsøk.

