Få tilgang til Power BI-aktivitetsloggen

Denne artikkelen er rettet mot Power BI-administratorer som trenger tilgang til og analyserer data som er hentet fra aktivitetsloggen for Power BI. Den fokuserer på programmatisk henting av Power BI-aktiviteter ved hjelp av Get-PowerBIActivityEvent-cmdleten fra Power BI Management-modulen. Opptil 30 dagers logg er tilgjengelig. Denne cmdleten bruker Rest-API-operasjonen Hent aktivitetshendelser i Power BI, som er en administrator-API. PowerShell-cmdleter legger til et lag med abstraksjon oppå de underliggende API-ene. PowerShell-cmdleten forenkler derfor tilgangen til Power BI-aktivitetsloggen.

Det finnes andre manuelle og programmatiske måter å hente Power BI-aktiviteter på. Hvis du vil ha mer informasjon, kan du se access-brukeraktivitetsdataene.

Analyse av Power BI-aktivitetsloggen er avgjørende for styring, samsvar og for å spore innføringstiltak . Hvis du vil ha mer informasjon om Power BI-aktivitetsloggen, kan du se Spore brukeraktiviteter i Power BI.

Tips

Vi anbefaler at du ser gjennom overvåkingsartikkelen på leiernivå fullt ut. Denne artikkelen omhandler planlegging, viktige beslutninger, forutsetninger og viktige løsningsutviklingsaktiviteter som skal vurderes når du bygger en ende-til-ende-revisjonsløsning.

Eksempler er tilgjengelige

Målet med denne artikkelen er å gi deg eksempler for å komme i gang. Eksemplene inkluderer skript som henter data fra aktivitetsloggen ved hjelp av PowerShell-modulen for Power BI Management.

Advarsel!

Skriptene er ikke produksjonsklare fordi de bare er ment for utdanningsformål. Du kan imidlertid tilpasse skriptene til produksjonsformål ved å legge til logikk for logging, feilhåndtering, varsling og refaktorering for gjenbruk av kode og modulærisering.

Fordi de er ment for læring, eksemplene er forenklede, men de er virkelige verden. Vi anbefaler at du går gjennom alle eksempler for å forstå hvordan de bruker litt forskjellige teknikker. Når du identifiserer hvilken type aktivitetsdata du trenger, kan du blande og sammenligne teknikkene for å produsere et skript som passer best til dine krav.

Denne artikkelen inneholder følgende eksempler.

Eksempelnavn Type aktivitetsdata
Godkjenne med Power Bi-tjeneste Ikke tilgjengelig
Vis alle aktiviteter for en bruker for én dag Alle
Vis en aktivitet for N-dager Del rapport (kobling eller direkte tilgang)
Vis tre aktiviteter for N-dager Opprett app, oppdater app og installer app
Vis alle aktiviteter for et arbeidsområde for én dag Alle
Eksporter alle aktiviteter for de foregående N-dagene Alle

For enkelhetsmåte gir de fleste eksemplene resultatet til skjermen. I Visual Studio Code sendes for eksempel dataene til terminalpanelet, som inneholder et buffersett med data i minnet.

De fleste eksemplene henter rå JSON-data. Arbeid med rå JSON-data har mange fordeler.

  • All informasjon som er tilgjengelig for hver aktivitetshendelse, returneres. Det er nyttig for deg å finne ut hvilke data som er tilgjengelige. Husk at innholdet i et API-svar varierer avhengig av den faktiske aktivitetshendelsen. Dataene som er tilgjengelige for en CreateApp-hendelse , er for eksempel forskjellige fra ViewReport-hendelsen .
  • Siden data som er tilgjengelige i aktivitetsloggen endres etter hvert som Power BI utvikler seg over tid, kan du forvente at API-svarene også endres. På den måten vil ikke nye data som introduseres gå glipp av. Prosessen er også mer motstandsdyktig mot endring og mindre sannsynlig å mislykkes.
  • Detaljene for et API-svar kan variere for den kommersielle Power BI-skyen og de nasjonale/regionale skyene.
  • Hvis du har forskjellige teammedlemmer (for eksempel datateknikere) som blir involvert i denne prosessen, gjør det enklere for flere team å samarbeide ved å forenkle den første prosessen for å trekke ut dataene.

Tips

Vi anbefaler at du beholder skriptene som trekker ut data så enkelt som mulig. Unngå derfor analysering, filtrering eller formatering av aktivitetsloggdataene etter hvert som de trekkes ut. Denne tilnærmingen bruker en ELT-metodikk , som har separate trinn for å trekke ut, laste inn og transformere data. Denne artikkelen fokuserer bare på det første trinnet, som er opptatt av å trekke ut dataene.

Forutsetninger

Hvis du vil bruke eksempelskriptene, må du oppfylle følgende krav.

  • PowerShell-klientverktøy: Bruk det foretrukne verktøyet for å kjøre PowerShell-kommandoer. Alle eksempler ble testet ved hjelp av PowerShell-utvidelsen for Visual Studio Code med PowerShell 7. Hvis du vil ha informasjon om klientverktøy og PowerShell-versjoner, kan du se Overvåking på leiernivå.
  • Power BI Management-modul: Installer alle Power BI PowerShell-moduler. Hvis du tidligere har installert dem, anbefaler vi at du oppdaterer modulene for å sikre at du bruker den nyeste publiserte versjonen.
  • Stoffadministratorrolle: Eksempelskriptene er utformet for å bruke en interaktiv godkjenningsflyt. Derfor må brukeren som kjører PowerShell-eksempelskriptene logge på for å bruke REST-API-ene for Power BI. Hvis du vil hente aktivitetsloggdata, må godkjenningsbrukeren tilhøre rollen som Power BI-administrator (fordi henting av aktivitetshendelser utføres med en administrator-API). Tjenestekontohavergodkjenning er utenfor omfanget for disse læringseksempler.

Resten av denne artikkelen inneholder eksempelskript som viser deg ulike måter å hente aktivitetsloggdata på.

Eksempel 1: Godkjenne med Power Bi-tjeneste

Alle REST-API-operasjoner for Power BI krever at du logger på. Godkjenning (som gjør forespørselen) og godkjenning (hva brukeren har tillatelse til å gjøre) administreres av Microsofts identitetsplattform. Følgende eksempel bruker Koble til-PowerBIServiceAccount-cmdletenfra Power BI Management-modulen. Denne cmdleten støtter en enkel metode for å logge på.

Eksempelforespørsel 1

Det første skriptet omdirigerer deg til en nettleser for å fullføre påloggingsprosessen. Brukerkontoer som har godkjenning med flere faktorer (MFA) aktivert, kan bruke denne interaktive godkjenningsflyten til å logge på.

Connect-PowerBIServiceAccount

Viktig

Brukere uten administratorrettigheter for Power BI kan ikke kjøre noen av eksempelskriptene som følger i denne artikkelen. Power BI-administratorer har tillatelse til å administrere Power Bi-tjeneste og hente metadata for hele tenanten (for eksempel aktivitetsloggdata). Selv om bruk av tjenestekontohavergodkjenning er utenfor omfanget for disse eksemplene, anbefaler vi på det sterkeste at du konfigurerer en tjenestekontohaver for produksjonsklare, uovervåkede skript som kjører etter en tidsplan.

Pass på å logge på før du kjører et av følgende skript.

Eksempel 2: Vise alle aktiviteter for en bruker for én dag

Noen ganger må du kontrollere alle aktivitetene som en bestemt bruker utførte på en bestemt dag.

Tips

Når du trekker ut data fra aktivitetsloggen ved hjelp av PowerShell-cmdleten, kan hver forespørsel trekke ut data i én dag (maksimalt 24 timer). Derfor er målet med dette eksemplet å starte ganske enkelt ved å sjekke én bruker for én dag. Det finnes andre eksempler senere i denne artikkelen som viser deg hvordan du bruker en løkke til å eksportere data i flere dager.

Eksempelforespørsel 2

Dette skriptet erklærer to PowerShell-variabler for å gjøre det enklere å bruke skriptet på nytt:

  • $UserEmailAddr: E-postadressen til brukeren du er interessert i.
  • $ActivityDate: Datoen du er interessert i. Formatet er YYYY-MM-DD (ISO 8601-format). Du kan ikke be om en dato tidligere enn 30 dager før gjeldende dato.
#Input values before running the script:
$UserEmailAddr = 'jordan@contoso.com'
$ActivityDate = '2023-03-15'
#----------------------------------------------------------------------
#View activity events:
Get-PowerBIActivityEvent `
    -StartDateTime ($ActivityDate + 'T00:00:00.000') `
    -EndDateTime ($ActivityDate + 'T23:59:59.999') `
    -User $UserEmailAddr

Merk

Du legger kanskje merke til et backtick (')-tegn på slutten av noen av linjene i PowerShell-skriptene. I PowerShell er én måte du kan bruke backtick-tegnet på, som et fortsettelsestegn for linje. Vi har brukt den til å forbedre lesbarheten til skriptene i denne artikkelen.

Tips

I skriptet korrelerer hver av PowerShell-variablene med en nødvendig eller valgfri parameterverdi i Cmdleten Get-PowerBIActivityEvent . Verdien du tilordner til variabelen $UserEmailAddr , sendes for eksempel til parameteren -User . Å deklarere PowerShell-variabler på denne måten er en lett tilnærming for å unngå hardkodingsverdier som kan endres i skriptet. Det er en god vane å ta i bruk, og det vil være nyttig etter hvert som skriptene blir mer komplekse. PowerShell-parametere er mer robuste enn variabler, men de er utenfor omfanget for denne artikkelen.

Eksempel på svar 2

Her er et eksempel på JSON-svar. Den inneholder to aktiviteter som brukeren utførte:

  • Den første aktiviteten viser at en bruker viste en rapport.
  • Den andre aktiviteten viser at en administrator eksporterte data fra Power BI-aktivitetsloggen.
[
  {
    "Id": "10af656b-b5a2-444c-bf67-509699896daf",
    "RecordType": 20,
    "CreationTime": "2023-03-15T15:18:30Z",
    "Operation": "ViewReport",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "100FFF92C7717B",
    "Workload": "PowerBI",
    "UserId": "jordan@contoso.com",
    "ClientIP": "192.168.1.1",
    "Activity": "ViewReport",
    "ItemName": "Gross Margin Analysis",
    "WorkSpaceName": "Sales Analytics",
    "DatasetName": "Sales Data",
    "ReportName": "Gross Margin Analysis",
    "WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
    "ObjectId": "Gross Margin Analysis",
    "DatasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
    "ReportId": "94e57e92-Cee2-486d-8cc8-218c97200579",
    "ArtifactId": "94e57e92-Cee2-486d-8cc8-218c97200579",
    "ArtifactName": "Gross Margin Analysis",
    "IsSuccess": true,
    "ReportType": "PowerBIReport",
    "RequestId": "53451b83-932b-f0b0-5328-197133f46fa4",
    "ActivityId": "beb41a5d-45d4-99ee-0e1c-b99c451e9953",
    "DistributionMethod": "Workspace",
    "ConsumptionMethod": "Power BI Web",
    "SensitivityLabelId": "e3dd4e72-5a5d-4a95-b8b0-a0b52b827793",
    "ArtifactKind": "Report"
  },
  {
    "Id": "5c913f29-502b-4a1a-a089-232edaf176f7",
    "RecordType": 20,
    "CreationTime": "2023-03-15T17:22:00Z",
    "Operation": "ExportActivityEvents",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 2,
    "UserKey": "100FFF92C7717B",
    "Workload": "PowerBI",
    "UserId": "jordan@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "MicrosoftPowerBIMgmt/1.2.1111.0",
    "Activity": "ExportActivityEvents",
    "IsSuccess": true,
    "RequestId": "2af6a22d-6f24-4dc4-a26a-5c234ab3afad",
    "ActivityId": "00000000-0000-0000-0000-000000000000",
    "ExportEventStartDateTimeParameter": "2023-03-17T00:00:00Z",
    "ExportEventEndDateTimeParameter": "2023-03-17T23:59:59.999Z"
  }
]

Tips

Utpakking av aktivitetsloggdataene for Power BI er også en loggført operasjon, som vist i forrige svar. Når du analyserer brukeraktiviteter, bør du utelate administratoraktiviteter eller analysere dem separat.

Eksempel 3: Vise en aktivitet for N-dager

Noen ganger vil du kanskje undersøke én bestemt type aktivitet for en serie dager. Dette eksemplet viser hvordan du henter rapportdelingsaktiviteter per element. Den bruker en løkke til å hente aktiviteter fra de foregående sju dagene.

Eksempelforespørsel 3

Skriptet erklærer to variabler:

  • $ActivityType: Operasjonsnavnet for aktiviteten du undersøker.
  • $NbrOfDaysToCheck: Hvor mange dager du er interessert i å sjekke. Den utfører en løkke som arbeider bakover fra gjeldende dag. Den tillatte maksimumsverdien er 30 dager (fordi den tidligste datoen du kan hente, er 30 dager før gjeldende dag).
#Input values before running the script:
$ActivityType = 'ShareReport' 
$NbrOfDaysToCheck = 7 
#-----------------------------------------------------------------------

#Use today to start counting back the number of days to check:
$DayUTC = (([datetime]::Today.ToUniversalTime()).Date)

#Iteratively loop through each of the last N days to view events:
For($LoopNbr=0; $LoopNbr -le $NbrOfDaysToCheck; $LoopNbr++)
{
    $PeriodStart=$DayUTC.AddDays(-$LoopNbr)
    $ActivityDate=$PeriodStart.ToString("yyyy-MM-dd")
    Write-Verbose "Checking $ActivityDate" -Verbose 

    #Check activity events once per loop (once per day):
    Get-PowerBIActivityEvent `
        -StartDateTime ($ActivityDate + 'T00:00:00.000') `
        -EndDateTime ($ActivityDate + 'T23:59:59.999') `
        -ActivityType $ActivityType 
}

Tips

Du kan bruke denne løkketeknikken til å kontrollere hvilken som helst av operasjonene som er registrert i aktivitetsloggen.

Eksempel på svar 3

Her er et eksempel på JSON-svar. Den inneholder to aktiviteter som brukeren utførte:

  • Den første aktiviteten viser at en delingskobling for en bruker ble opprettet. Vær oppmerksom på at SharingAction-verdien varierer avhengig av om brukeren opprettet en kobling, redigerte en kobling eller slettet en kobling. For kortfattethet vises bare én type delingskoblingsaktivitet i svaret.
  • Den andre aktiviteten viser at deling av direkte tilgang for en gruppe ble opprettet. Vær oppmerksom på at SharingInformation-verdien varierer avhengig av handlingen som utføres. For kortfattethet vises bare én type delingsaktivitet for direkte tilgang i svaret.
[
  {
    "Id": "be7506e1-2bde-4a4a-a210-bc9b156142c0",
    "RecordType": 20,
    "CreationTime": "2023-03-15T19:52:42Z",
    "Operation": "ShareReport",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "900GGG12D2242A",
    "Workload": "PowerBI",
    "UserId": "morgan@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0",
    "Activity": "ShareReport",
    "ItemName": "Call Center Stats",
    "WorkSpaceName": "Sales Analytics",
    "SharingInformation": [
      {
        "RecipientEmail": "ellis@contoso.com",
        "RecipientName": "Turner",
        "ObjectId": "fc9bbc6c-e39b-44cb-9c8a-d37d5665ec57",
        "ResharePermission": "ReadReshare",
        "UserPrincipalName": "ellis@contoso.com"
      }
    ],
    "WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
    "ObjectId": "Call Center Stats",
    "Datasets": [
      {
        "DatasetId": "fgagrwa3-9044-3e1e-228f-k24bf72gg995",
        "DatasetName": "Call Center Data"
      }
    ],
    "ArtifactId": "81g22w11-vyy3-281h-1mn3-822a99921541",
    "ArtifactName": "Call Center Stats",
    "IsSuccess": true,
    "RequestId": "7d55cdd3-ca3d-a911-5e2e-465ac84f7aa7",
    "ActivityId": "4b8b53f1-b1f1-4e08-acdf-65f7d3c1f240",
    "SharingAction": "CreateShareLink",
    "ShareLinkId": "J_5UZg-36m",
    "ArtifactKind": "Report",
    "SharingScope": "Specific People"
  },
  {
    "Id": "b4d567ac-7ec7-40e4-a048-25c98d9bc304",
    "RecordType": 20,
    "CreationTime": "2023-03-15T11:57:26Z",
    "Operation": "ShareReport",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "900GGG12D2242A",
    "Workload": "PowerBI",
    "UserId": "morgan@contoso.com",
    "ClientIP": "69.132.26.0",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
    "Activity": "ShareReport",
    "ItemName": "Gross Margin Analysis",
    "WorkSpaceName": "Sales Analytics",
    "SharingInformation": [
      {
        "RecipientName": "SalesAndMarketingGroup-NorthAmerica",
        "ObjectId": "ba21f28b-6226-4296-d341-f059257a06a7",
        "ResharePermission": "Read"
      }
    ],
    "CapacityId": "1DB44EEW-6505-4A45-B215-101HBDAE6A3F",
    "CapacityName": "Shared On Premium - Reserved",
    "WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
    "ObjectId": "Gross Margin Analysis",
    "Datasets": [
      {
        "DatasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
        "DatasetName": "Sales Data"
      }
    ],
    "ArtifactId": "94e57e92-Cee2-486d-8cc8-218c97200579",
    "ArtifactName": "Gross Margin Analysis",
    "IsSuccess": true,
    "RequestId": "82219e60-6af0-0fa9-8599-c77ed44fff9c",
    "ActivityId": "1d21535a-257e-47b2-b9b2-4f875b19855e",
    "SensitivityLabelId": "16c065f5-ba91-425e-8693-261e40ccdbef",
    "SharingAction": "Direct",
    "ArtifactKind": "Report",
    "SharingScope": "Specific People"
  }
]

Merk

Dette JSON-svaret viser at datastrukturen er forskjellig basert på hendelsestypen. Selv den samme typen hendelse kan ha forskjellige egenskaper som gir en litt annen utdata. Som anbefalt tidligere i denne artikkelen, bør du bli vant til å hente rådata.

Eksempel 4: Vise tre aktiviteter for N-dager

Noen ganger vil du kanskje undersøke flere relaterte aktiviteter. Dette eksemplet viser hvordan du henter tre spesifikke aktiviteter for de siste sju dagene. Den fokuserer på aktiviteter relatert til Power BI-apper , inkludert oppretting av en app, oppdatering av en app og installasjon av en app.

Eksempelforespørsel 4

Skriptet erklærer følgende variabler:

  • $NbrOfDaysToCheck: Hvor mange dager du er interessert i å sjekke. Den utfører en løkke som fungerer bakover fra gjeldende dag. Den tillatte maksimumsverdien er 30 dager (fordi den tidligste datoen du kan hente, er 30 dager før gjeldende dag).
  • $Activity1: Operasjonsnavnet for den første aktiviteten du undersøker. I dette eksemplet søker den etter opprettingsaktiviteter for Power BI-apper.
  • $Activity2: Det andre operasjonsnavnet. I dette eksemplet søker den etter oppdateringsaktiviteter for Power BI-apper.
  • $Activity3: Det tredje operasjonsnavnet. I dette eksemplet søker den etter installasjonsaktiviteter for Power BI-apper.

Du kan bare hente aktivitetshendelser for én aktivitet om gangen. Så skriptet søker etter hver operasjon separat. Det kombinerer søkeresultatene til en variabel kalt $FullResults, som den deretter sender til skjermen.

Forsiktig!

Å kjøre mange løkker mange ganger øker sannsynligheten for API-begrensning. Begrensning kan skje når du overskrider antall forespørsler du har lov til å gjøre i en gitt tidsperiode. Operasjonen Hent aktivitetshendelser er begrenset til 200 forespørsler per time. Når du utformer skriptene, må du passe på å ikke hente de opprinnelige dataene flere ganger enn du trenger. Vanligvis er det en bedre fremgangsmåte å trekke ut alle rådataene én gang per dag, og deretter spørre, transformere, filtrere eller formatere dataene separat.

Skriptet viser resultater for gjeldende dag.

Merk

Hvis du vil hente resultater bare for forrige dag , unngå resultater av deldager, kan du se eksemplet Eksporter alle aktiviteter for tidligere N-dager .)

#Input values before running the script:
$NbrOfDaysToCheck = 7
$Activity1 = 'CreateApp'
$Activity2 = 'UpdateApp'
$Activity3 = 'InstallApp'
#-----------------------------------------------------------------------
#Initialize array which will contain the full resultset:
$FullResults = @() 

#Use today to start counting back the number of days to check:
$DayUTC = (([datetime]::Today.ToUniversalTime()).Date)

#Iteratively loop through each day (<Initilize> ; <Condition> ; <Repeat>)
#Append each type of activity to an array:
For($LoopNbr=0; $LoopNbr -le $NbrOfDaysToCheck; $LoopNbr++)
{
    $PeriodStart=$DayUTC.AddDays(-$LoopNbr)
    $ActivityDate=$PeriodStart.ToString("yyyy-MM-dd")
    Write-Verbose "Checking $ActivityDate" -Verbose 

    #Get activity 1 and append its results into the full resultset:
    $Activity1Results = @()
    $Activity1Results += Get-PowerBIActivityEvent `
        -StartDateTime ($ActivityDate+'T00:00:00.000') `
        -EndDateTime ($ActivityDate+'T23:59:59.999') `
        -ActivityType $Activity1 | ConvertFrom-Json
    If ($null -ne $Activity1Results) {$FullResults += $Activity1Results}
    
    #Get activity 2 and append its results into the full resultset:
    $Activity2Results = @()
    $Activity2Results += Get-PowerBIActivityEvent `
        -StartDateTime ($ActivityDate+'T00:00:00.000') `
        -EndDateTime ($ActivityDate+'T23:59:59.999') `
        -ActivityType $Activity2 | 
    ConvertFrom-Json
    If ($null -ne $Activity2Results) {$FullResults += $Activity2Results}  

    #Get activity 3 and append its results into the full resultset:
    $Activity3Results = @()
    $Activity3Results += Get-PowerBIActivityEvent `
        -StartDateTime ($ActivityDate+'T00:00:00.000') `
        -EndDateTime ($ActivityDate+'T23:59:59.999') `
        -ActivityType $Activity3 | 
    ConvertFrom-Json
    If ($null -ne $Activity3Results) {$FullResults += $Activity3Results}
    
}  
#Convert all of the results back to a well-formed JSON object:
$FullResults = $FullResults | ConvertTo-Json

#Display results on the screen:
$FullResults

Eksempel på svar 4

Her er et eksempel på JSON-svar. Den inneholder tre aktiviteter som brukeren utførte:

  • Den første aktiviteten viser at en Power BI-app ble opprettet.
  • Den andre aktiviteten viser at en Power BI-app ble oppdatert.
  • Den tredje aktiviteten viser at en Power BI-app ble installert av en bruker.

Advarsel!

Svaret omfatter bare brukertillatelsene som ble endret. Det er for eksempel mulig at tre målgrupper kunne ha blitt opprettet i en CreateApp-hendelse . Hvis bare én målgruppe ble endret i UpdateApp-hendelsen , vises bare én målgruppe i OrgAppPermission-dataene . Derfor er det ufullstendig å stole på UpdateApp-hendelsen for å spore alle apptillatelser fordi aktivitetsloggen bare viser hva som er endret.

Hvis du vil ha et øyeblikksbilde av alle Power BI-apptillatelser, kan du i stedet bruke API-operasjonen Hent appbrukere som administrator .

[
  {
    "Id": "65a26480-981a-4905-b3aa-cbb3df11c7c2",
    "RecordType": 20,
    "CreationTime": "2023-03-15T18:42:13Z",
    "Operation": "CreateApp",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "100FFF92C7717B",
    "Workload": "PowerBI",
    "UserId": "jordan@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
    "Activity": "CreateApp",
    "ItemName": "Sales Reconciliations App",
    "WorkSpaceName": "Sales Reconciliations",
    "OrgAppPermission": {
      "recipients": "Sales Reconciliations App(Entire Organization)",
      "permissions": "Sales Reconciliations App(Read,CopyOnWrite)"
    },
    "WorkspaceId": "9325a31d-067e-4748-a592-626d832c8001",
    "ObjectId": "Sales Reconciliations App",
    "IsSuccess": true,
    "RequestId": "ab97a4f1-9f5e-4a6f-5d50-92c837635814",
    "ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a",
    "AppId": "42d60f97-0f69-470c-815f-60198956a7e2"
  },
  {
    "Id": "a1dc6d26-b006-4727-bac6-69c765b7978f",
    "RecordType": 20,
    "CreationTime": "2023-03-16T18:39:58Z",
    "Operation": "UpdateApp",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "100GGG12F9921B",
    "Workload": "PowerBI",
    "UserId": "morgan@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
    "Activity": "UpdateApp",
    "ItemName": "Sales Analytics",
    "WorkSpaceName": "Sales Analytics",
    "OrgAppPermission": {
      "recipients": "Sales Reps Audience(SalesAndMarketingGroup-NorthAmerica,SalesAndMarketingGroup-Europe)",
      "permissions": "Sales Reps Audience(Read,CopyOnWrite)"
    },
    "WorkspaceId": "c7bffcd8-8156-466a-a88f-0785de2c8b13",
    "ObjectId": "Sales Analytics",
    "IsSuccess": true,
    "RequestId": "e886d122-2c09-4189-e12a-ef998268b864",
    "ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a",
    "AppId": "c03530c0-db34-4b66-97c7-34dd2bd590af"
  },
  {
    "Id": "aa002302-313d-4786-900e-e68a6064df1a",
    "RecordType": 20,
    "CreationTime": "2023-03-17T18:35:22Z",
    "Operation": "InstallApp",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "100HHH12F4412A",
    "Workload": "PowerBI",
    "UserId": "ellis@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0",
    "Activity": "InstallApp",
    "ItemName": "Sales Reconciliations App",
    "ObjectId": "Sales Reconciliations App",
    "IsSuccess": true,
    "RequestId": "7b3cc968-883f-7e13-081d-88b13f6cfbd8",
    "ActivityId": "9bb54a9d-b688-4028-958e-4d7d21ca903a"
  }
]

Eksempel 5: Vise alle aktiviteter for et arbeidsområde for én dag

Noen ganger vil du kanskje undersøke aktiviteter relatert til et bestemt arbeidsområde. Dette eksemplet henter alle aktiviteter for alle brukere for én dag. Deretter filtreres resultatene slik at du kan fokusere på å analysere aktiviteter fra ett arbeidsområde.

Eksempelforespørsel 5

Skriptet erklærer to variabler:

  • $ActivityDate: Datoen du er interessert i. Formatet er ÅÅÅÅÅ-MM-DD. Du kan ikke be om en dato tidligere enn 30 dager før gjeldende dato.
  • $WorkspaceName: Navnet på arbeidsområdet du er interessert i.

Skriptet lagrer resultatene i variabelen $Results . Deretter konverteres JSON-dataene til et objekt, slik at resultatene kan analyseres. Deretter filtreres resultatene for å hente fem bestemte kolonner. CreationTime-dataene får nytt navn som ActivityDateTime. Resultatene filtreres etter navnet på arbeidsområdet, og deretter utdata til skjermen.

Det finnes ingen parameter for Get-PowerBIActivityEvent-cmdleten som lar deg angi et arbeidsområde når du kontrollerer aktivitetsloggen (tidligere eksempler i denne artikkelen brukte PowerShell-parametere til å angi et bestemt bruker-, dato- eller aktivitetsnavn). I dette eksemplet henter skriptet alle dataene og analyserer deretter JSON-svaret for å filtrere resultatene for et bestemt arbeidsområde.

Forsiktig!

Hvis du er i en stor organisasjon som har hundrevis eller tusenvis av aktiviteter per dag, kan filtrering av resultatene etter at de er hentet, være svært ineffektivt. Husk at operasjonen Hent aktivitetshendelser er begrenset til 200 forespørsler per time.

Hvis du vil unngå API-begrensning (når du overskrider antall forespørsler du har lov til å gjøre i en gitt tidsperiode), må du ikke hente de opprinnelige dataene mer enn du trenger. Du kan fortsette å arbeide med de filtrerte resultatene uten å kjøre skriptet for å hente resultatene på nytt. For løpende behov er det en bedre fremgangsmåte å trekke ut alle dataene én gang per dag, og deretter spørre den mange ganger.

#Input values before running the script:
$ActivityDate = '2023-03-22'
$WorkspaceName = 'Sales Analytics'
#----------------------------------------------------------------------
#Run cmdlet to check activity events and store intermediate results:
$Events = Get-PowerBIActivityEvent `
    -StartDateTime ($ActivityDate+'T00:00:00.000') `
    -EndDateTime ($ActivityDate+'T23:59:59.999')
    
#Convert from JSON so we can parse the data:
$ConvertedResults = $Events | ConvertFrom-Json

#Obtain specific attributes and save to a PowerShell object:
$FilteredResults = $ConvertedResults `
    | 
    Select-Object `
    @{Name="ActivityDateTime";Expression={$PSItem.CreationTime}}, ` #alias name
    Activity, `
    UserId, `
    ArtifactName, `
    WorkspaceName `
    | 
    #Filter the results:
    Where-Object {($PSItem.WorkspaceName -eq $WorkspaceName)}

#View the filtered results:
$FilteredResults 

#Optional - Save back to JSON format:
#$FilteredResults = $FilteredResults | ConvertTo-Json -Depth 10
#$FilteredResults

Eksempel på svar 5

Her er de filtrerte resultatene, som inkluderer et lite delsett av egenskaper. Formatet er enklere å lese for en og annen analyse. Vi anbefaler imidlertid at du konverterer det tilbake til JSON-format hvis du har tenkt å lagre resultatene.

Merk

Når du har konvertert JSON-resultatene til et PowerShell-objekt, konverteres tidsverdiene til lokal tid. De opprinnelige overvåkingsdataene registreres alltid i utc-tid (Coordinated Universal Time), så vi anbefaler at du bare blir vant til å bruke UTC-tid.

ActivityDateTime : 4/25/2023 3:18:30 PM
Activity         : ViewReport
UserId           : jordan@contoso.com
ArtifactName     : Gross Margin Analysis
WorkSpaceName    : Sales Analytics

CreationTime     : 4/25/2023 5:32:10 PM
Activity         : ShareReport
UserId           : ellis@contoso.com
ArtifactName     : Call Center Stats
WorkSpaceName    : Sales Analytics

CreationTime     : 4/25/2023 9:03:05 PM
Activity         : ViewReport
UserId           : morgan@contoso.com
ArtifactName     : Call Center Stats
WorkSpaceName    : Sales Analytics

Tips

Du kan bruke denne teknikken til å filtrere resultater etter hvilken som helst egenskap i resultatene. Du kan for eksempel bruke en bestemt hendelse RequestId til å analysere bare én bestemt hendelse.

Eksempel 6: Eksportere alle aktiviteter for tidligere N-dager

Noen ganger vil du kanskje eksportere alle aktivitetsdata til en fil, slik at du kan arbeide med dataene utenfor PowerShell. Dette eksemplet henter alle aktiviteter for alle brukere i opptil 30 dager. Den eksporterer dataene til én JSON-fil per dag.

Viktig

Aktivitetsloggdata er tilgjengelige i maksimalt 30 dager. Det er viktig at du eksporterer og beholder dataene slik at du kan utføre historisk analyse. Hvis du for øyeblikket ikke eksporterer og lagrer aktivitetsloggdataene, anbefaler vi på det sterkeste at du prioriterer dette.

Eksempelforespørsel 6

Skriptet henter alle aktiviteter for en serie dager. Den erklærer tre variabler:

  • $NbrDaysDaysToExtract: Hvor mange dager du er interessert i å eksportere. Den utfører en løkke som arbeider bakover fra forrige dag. Den tillatte maksimumsverdien er 30 dager (fordi den tidligste datoen du kan hente, er 30 dager før gjeldende dag).
  • $ExportFileLocation: Mappebanen der du vil lagre filene. Mappen må finnes før skriptet kjøres. Ikke inkluder et omvendt skråstrek (\) på slutten av mappebanen (fordi det legges automatisk til ved kjøretid). Vi anbefaler at du bruker en egen mappe til å lagre rå datafiler.
  • $ExportFileName: Prefikset for hvert filnavn. Fordi én fil per dag lagres, legger skriptet til et suffiks for å angi dataene i filen, og datoen og klokkeslettet da dataene ble hentet. Hvis du for eksempel kjørte et skript klokken 09.00 (UTC) den 25. april 2023 for å trekke ut aktivitetsdata for 23. april 2023, vil filnavnet være: PBIActivityEvents-20230423-202304250900. Selv om mappestrukturen der den er lagret, er nyttig, bør hvert filnavn være fullstendig selvbeskrivende.

Vi anbefaler at du trekker ut data som er minst én dag før gjeldende dag. På den måten unngår du å hente hendelser på en del dag, og du kan være sikker på at hver eksportfil inneholder hele 24 timer med data.

Skriptet samler inn opptil 30 dager med data frem til forrige dag. Tidsstempler for overvåkede hendelser er alltid i UTC. Vi anbefaler at du bygger alle revisjonsprosessene basert på UTC-tid i stedet for lokal tid.

Skriptet produserer én JSON-fil per dag. Suffikset for filnavnet inkluderer tidsstempelet (i UTC-format) til de utpakkede dataene. Hvis du pakker ut samme dag med data mer enn én gang, hjelper suffikset i filnavnet deg med å identifisere den nyere filen.

#Input values before running the script:
$NbrDaysDaysToExtract = 7
$ExportFileLocation = 'C:\Power-BI-Raw-Data\Activity-Log'
$ExportFileName = 'PBIActivityEvents'
#--------------------------------------------

#Start with yesterday for counting back to ensure full day results are obtained:
[datetime]$DayUTC = (([datetime]::Today.ToUniversalTime()).Date).AddDays(-1) 

#Suffix for file name so we know when it was written:
[string]$DateTimeFileWrittenUTCLabel = ([datetime]::Now.ToUniversalTime()).ToString("yyyyMMddHHmm")

#Loop through each of the days to be extracted (<Initilize> ; <Condition> ; <Repeat>)
For($LoopNbr=0 ; $LoopNbr -lt $NbrDaysDaysToExtract ; $LoopNbr++)
{
    [datetime]$DateToExtractUTC=$DayUTC.AddDays(-$LoopNbr).ToString("yyyy-MM-dd")

    [string]$DateToExtractLabel=$DateToExtractUTC.ToString("yyyy-MM-dd")
    
    #Create full file name:
    [string]$FullExportFileName = $ExportFileName `
    + '-' + ($DateToExtractLabel -replace '-', '') `
    + '-' + $DateTimeFileWrittenUTCLabel `
    + '.json' 

    #Obtain activity events and store intermediary results:
    [psobject]$Events=Get-PowerBIActivityEvent `
        -StartDateTime ($DateToExtractLabel+'T00:00:00.000') `
        -EndDateTime ($DateToExtractLabel+'T23:59:59.999')

    #Write one file per day:
    $Events | Out-File "$ExportFileLocation\$FullExportFileName"

    Write-Verbose "File written: $FullExportFileName" -Verbose 
}
Write-Verbose "Extract of Power BI activity events is complete." -Verbose

Det er flere fordeler med å bruke Get-PowerBIActivityEvent PowerShell-cmdleten i stedet for REST-API-operasjonen hent aktivitetshendelser.

  • Cmdleten lar deg be om én dag med aktivitet hver gang du foretar et anrop ved hjelp av cmdleten. Mens når du kommuniserer med API-en direkte, kan du bare be om én time per API-forespørsel.
  • Cmdleten håndterer fortsettelsestokener for deg. Hvis du bruker API-en direkte, må du kontrollere fortsettelsestokenet for å finne ut om det kommer flere resultater. Noen API-er må bruke paginerings- og fortsettelsestokener av ytelsesårsaker når de returnerer en stor mengde data. De returnerer det første settet med poster, og deretter med et fortsettelsestoken kan du foreta et etterfølgende API-kall for å hente det neste settet med poster. Du fortsetter å kalle API-en til et fortsettelsestoken ikke returneres. Bruk av fortsettelsestokenet er en måte å konsolidere flere API-forespørsler på, slik at du kan konsolidere et logisk sett med resultater. Hvis du vil ha et eksempel på hvordan du bruker et fortsettelsestoken, kan du se REST-API for aktivitetshendelser.
  • Cmdlet håndterer Microsoft Entra ID (tidligere kjent som Azure Active Directory) tilgangstokenutløp for deg. Når du har godkjent, utløper tilgangstokenet etter én time (som standard). I dette tilfellet ber cmdleten automatisk om et oppdateringstoken for deg. Hvis du kommuniserer direkte med API-en, må du be om et oppdateringstoken.

Hvis du vil ha mer informasjon, kan du se Velg API-er eller PowerShell-cmdleter.

Merk

Et eksempelsvar utelates fordi det er et utdata som ligner på svarene som vises i de forrige eksemplene.

Hvis du vil ha mer informasjon om denne artikkelen, kan du se følgende ressurser: