Få adgang til Power BI-aktivitetsloggen

Denne artikel henvender sig til Power BI-administratorer, der har brug for at få adgang til og analysere datakilder fra Power BI-aktivitetsloggen. Der fokuseres på programmatisk hentning af Power BI-aktiviteter ved hjælp af cmdlet'en Get-PowerBIActivityEvent fra Power BI Management-modulet. Der er op til 30 dages historik tilgængelig. Denne cmdlet bruger Handlingen Hent aktivitetshændelser i Power BI REST API, som er en administrations-API. PowerShell-cmdlet'er tilføjer et abstraktionslag oven på de underliggende API'er. PowerShell-cmdlet'en forenkler derfor adgangen til Power BI-aktivitetsloggen.

Der er andre manuelle og programmatiske måder at hente Power BI-aktiviteter på. Du kan få flere oplysninger i Access-brugeraktivitetsdata.

Analyse af Power BI-aktivitetsloggen er afgørende for styring, overholdelse af angivne standarder og for at spore indføringsindsatsen . Du kan finde flere oplysninger om Power BI-aktivitetsloggen under Spor brugeraktiviteter i Power BI.

Tip

Vi anbefaler, at du gennemser artiklen Overvågning på lejerniveau fuldt ud. Denne artikel omhandler planlægning, vigtige beslutninger, forudsætninger og vigtige løsningsudviklingsaktiviteter, der skal overvejes, når du opretter en end-to-end-overvågningsløsning.

Tilgængelige eksempler

Formålet med denne artikel er at give dig eksempler, der kan hjælpe dig i gang. Eksemplerne omfatter scripts, der henter data fra aktivitetsloggen ved hjælp af PowerShell-modulet Power BI-administration.

Advarsel!

Scripts er ikke klar til produktion, fordi de kun er beregnet til uddannelsesmæssige formål. Du kan dog tilpasse scripts til produktionsformål ved at tilføje logik til logføring, fejlhåndtering, besked og omstrukturering af kodeanvendelse og modularisering.

Da de er beregnet til læring, er eksemplerne forenklede, men de er den virkelige verden. Vi anbefaler, at du gennemser alle eksempler for at forstå, hvordan de anvender lidt forskellige teknikker. Når du har identificeret den type aktivitetsdata, du har brug for, kan du blande og matche teknikkerne for at oprette et script, der passer bedst til dine behov.

Denne artikel indeholder følgende eksempler.

Eksempel på navn Type af aktivitetsdata
Godkend med Power BI-tjeneste I/R
Få vist alle aktiviteter for en bruger for en dag All
Få vist en aktivitet for N-dage Del rapport (link eller direkte adgang)
Vis tre aktiviteter for N-dage Opret app, opdater app, og installér app
Få vist alle aktiviteter for et arbejdsområde for én dag All
Eksportér alle aktiviteter for de forrige N dage All

For nemheds skyld sender de fleste af eksemplerne deres resultat til skærmen. I Visual Studio Code sendes dataene f.eks. til terminalpanelet, som indeholder et buffersæt af data i hukommelsen.

De fleste af eksemplerne henter rå JSON-data. Der er mange fordele ved at arbejde med de rå JSON-data.

  • Alle de oplysninger, der er tilgængelige for hver aktivitetshændelse, returneres. Det er nyttigt for dig at få mere at vide om, hvilke data der er tilgængelige. Vær opmærksom på, at indholdet af et API-svar varierer afhængigt af den faktiske aktivitetshændelse. De data, der er tilgængelige for en CreateApp-hændelse, er f.eks. anderledes end ViewReport-hændelsen.
  • Da de data, der er tilgængelige i aktivitetsloggen, ændres, efterhånden som Power BI udvikler sig over tid, kan du også forvente, at API-svarene ændres. På den måde vil nye data, der introduceres, ikke gå glip af. Din proces er også mere modstandsdygtig over for ændringer og mindre tilbøjelig til at mislykkes.
  • Detaljerne i et API-svar kan variere for det kommercielle cloudmiljø i Power BI og de nationale/regionale cloudmiljøer.
  • Hvis du har forskellige teammedlemmer (f.eks. datateknikere), der involveres i denne proces, kan du forenkle den indledende proces for at udtrække dataene, så det er nemmere for flere teams at arbejde sammen.

Tip

Vi anbefaler, at du bevarer dine scripts, der udtrækker data så enkelt som muligt. Undgå derfor at fortolke, filtrere eller formatere aktivitetsloggens data, efterhånden som de udtrækkes. Denne fremgangsmåde bruger en ELT-metode , som har separate trin til at udtrække, indlæse og transformere data. I denne artikel fokuseres der kun på det første trin, som omhandler udtrækning af dataene.

Krav

Hvis du vil bruge eksempelscripts, skal du opfylde følgende krav.

  • PowerShell-klientværktøj: Brug dit foretrukne værktøj til at køre PowerShell-kommandoer. Alle eksempler blev testet ved hjælp af PowerShell-udvidelsen til Visual Studio Code med PowerShell 7. Du kan få oplysninger om klientværktøjer og PowerShell-versioner under Overvågning på lejerniveau.
  • Power BI Management-modul: Installér alle Power BI PowerShell-moduler. Hvis du tidligere har installeret dem, anbefaler vi, at du opdaterer modulerne for at sikre, at du bruger den senest udgivne version.
  • Rolle som fabric-administrator: Eksempelscripts er designet til at bruge et interaktivt godkendelsesflow. Derfor skal den bruger, der kører PowerShell-eksempelscripts, logge på for at bruge REST API'erne til Power BI. Hvis du vil hente aktivitetslogdata, skal den bruger, der godkender, tilhøre Rollen Power BI-administrator (fordi hentning af aktivitetshændelser udføres med en administrations-API). Godkendelse af tjenesteprincipal er ikke omfattet af disse læringseksempler.

Resten af denne artikel indeholder eksempelscripts, der viser dig forskellige måder at hente aktivitetslogdata på.

Eksempel 1: Godkend med Power BI-tjeneste

Alle Power BI REST API-handlinger kræver, at du logger på. Godkendelse (hvem der foretager anmodningen) og autorisation (hvad brugeren har tilladelse til at gøre) administreres af Microsoft-identitetsplatform. I følgende eksempel bruges cmdlet'en Forbind-PowerBIServiceAccount fra modulet Power BI-administration. Denne cmdlet understøtter en enkel metode til at logge på.

Eksempelanmodning 1

Det første script omdirigerer dig til en browser for at fuldføre logonprocessen. Brugerkonti, der har multifaktorgodkendelse (MFA) aktiveret, kan bruge dette interaktive godkendelsesflow til at logge på.

Connect-PowerBIServiceAccount

Vigtigt

Brugere uden Power BI-administratorrettigheder kan ikke køre nogen af de eksempelscripts, der følger i denne artikel. Power BI-administratorer har tilladelse til at administrere Power BI-tjeneste og til at hente metadata for hele lejeren (f.eks. aktivitetslogdata). Selvom brugen af godkendelse af tjenesteprincipalen ikke er omfattet af disse eksempler, anbefaler vi på det kraftigste, at du konfigurerer en tjenesteprincipal til produktionsklare, automatiske scripts, der kører efter en tidsplan.

Sørg for at logge på, før du kører et af følgende scripts.

Eksempel 2: Få vist alle aktiviteter for en bruger for én dag

Nogle gange skal du kontrollere alle de aktiviteter, som en bestemt bruger udførte på en bestemt dag.

Tip

Når du udtrækker data fra aktivitetsloggen ved hjælp af PowerShell-cmdlet'en, kan hver anmodning udtrække data for én dag (højst 24 timer). Målet med dette eksempel er derfor blot at starte med at kontrollere én bruger for én dag. Der er andre eksempler senere i denne artikel, der viser dig, hvordan du bruger en løkke til at eksportere data i flere dage.

Eksempelanmodning 2

Dette script deklarerer to PowerShell-variabler for at gøre det nemmere at genbruge scriptet:

  • $UserEmailAddr: Mailadressen for den bruger, du er interesseret i.
  • $ActivityDate: Den dato, du er interesseret i. Formatet er ÅÅÅÅ-MM-DD (ISO 8601-format). Du kan ikke anmode om en dato, der ligger før 30 dage før dags 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

Bemærk

Du vil måske bemærke et backtick (') tegn i slutningen af nogle af linjerne i PowerShell-scripts. I PowerShell kan du bruge backtick-tegnet som et linjefortsættelsestegn. Vi har brugt den til at forbedre læsbarheden af scripts i denne artikel.

Tip

I scriptet svarer hver af PowerShell-variablerne til en påkrævet eller valgfri parameterværdi i Cmdlet'en Get-PowerBIActivityEvent . Den værdi, du tildeler variablen $UserEmailAddr , overføres f.eks. til -User parameteren. Erklæring af PowerShell-variabler på denne måde er en let måde at undgå hard-coding-værdier, der kan ændres i dit script. Det er en god vane at adoptere, og det vil være nyttigt, efterhånden som dine scripts bliver mere komplekse. PowerShell-parametre er mere robuste end variabler, men de er ikke omfattet af denne artikel.

Eksempelsvar 2

Her er et eksempel på et JSON-svar. Den indeholder to aktiviteter, som brugeren har udført:

  • Den første aktivitet viser, at en bruger har fået vist en rapport.
  • Den anden aktivitet viser, at en administrator eksporterede 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"
  }
]

Tip

Udtrækning af data fra Power BI-aktivitetsloggen er også en logført handling, som vist i det forrige svar. Når du analyserer brugeraktiviteter, kan det være en god idé at udelade administratoraktiviteter – eller analysere dem separat.

Eksempel 3: Få vist en aktivitet for N-dage

Nogle gange kan det være en god idé at undersøge én bestemt type aktivitet i en række dage. I dette eksempel kan du se, hvordan du henter rapportdelingsaktiviteter pr. element. Den bruger en løkke til at hente aktiviteter fra de forrige syv dage.

Eksempelanmodning 3

Scriptet deklarerer to variabler:

  • $ActivityType: Handlingsnavnet for den aktivitet, du undersøger.
  • $NbrOfDaysToCheck: Hvor mange dage du er interesseret i at kontrollere. Den udfører en løkke, der fungerer bagud fra den aktuelle dag. Den maksimalt tilladte værdi er 30 dage (fordi den tidligste dato, du kan hente, er 30 dage før den aktuelle 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 
}

Tip

Du kan bruge denne løkketeknik til at kontrollere alle de handlinger, der er registreret i aktivitetsloggen.

Eksempel på svar 3

Her er et eksempel på et JSON-svar. Den indeholder to aktiviteter, som brugeren har udført:

  • Den første aktivitet viser, at der blev oprettet et delingslink for en bruger. Bemærk, at værdien for SharingAction varierer, afhængigt af om brugeren har oprettet et link, redigeret et link eller slettet et link. Af hensyn til korthed vises der kun én type delingslinkaktivitet i svaret.
  • Den anden aktivitet viser, at deling af direkte adgang for en gruppe blev oprettet. Bemærk, at værdien for SharingInformation varierer afhængigt af den udførte handling. Af hensyn til korthed vises der kun én type direkte adgangsdelingsaktivitet 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"
  }
]

Bemærk

Dette JSON-svar viser, at datastrukturen er anderledes baseret på hændelsestypen. Selv den samme type hændelse kan have forskellige egenskaber, der giver et lidt anderledes output. Som anbefalet tidligere i denne artikel bør du vænne dig til at hente rådata.

Eksempel 4: Få vist tre aktiviteter for N-dage

Nogle gange kan det være en god idé at undersøge flere relaterede aktiviteter. I dette eksempel kan du se, hvordan du henter tre specifikke aktiviteter for de forrige syv dage. Den fokuserer på aktiviteter, der er relateret til Power BI-apps , herunder oprettelse af en app, opdatering af en app og installation af en app.

Eksempelanmodning 4

Scriptet deklarerer følgende variabler:

  • $NbrOfDaysToCheck: Hvor mange dage du er interesseret i at kontrollere. Den udfører en løkke, der fungerer bagud fra den aktuelle dag. Den maksimalt tilladte værdi er 30 dage (fordi den tidligste dato, du kan hente, er 30 dage før den aktuelle dag).
  • $Activity1: Handlingsnavnet for den første aktivitet, du undersøger. I dette eksempel søger den efter aktiviteter til oprettelse af Power BI-apps.
  • $Activity2: Det andet handlingsnavn. I dette eksempel søger den efter opdateringsaktiviteter for Power BI-apps.
  • $Activity3: Det tredje handlingsnavn. I dette eksempel søger den efter installationsaktiviteter for Power BI-apps.

Du kan kun hente aktivitetshændelser for én aktivitet ad gangen. Så scriptet søger efter hver handling separat. Søgeresultaterne kombineres i en variabel med navnet $FullResults, som derefter vises på skærmen.

Advarsel

Hvis du kører mange løkker mange gange, øges sandsynligheden for API-begrænsning betydeligt. Begrænsning kan ske, når du overskrider det antal anmodninger, du har tilladelse til at foretage i en given tidsperiode. Handlingen Hent aktivitetshændelser er begrænset til 200 anmodninger pr. time. Når du designer dine scripts, skal du sørge for ikke at hente de oprindelige data flere gange, end du har brug for. Generelt er det en bedre praksis at udtrække alle rådata én gang om dagen og derefter forespørge, transformere, filtrere eller formatere dataene separat.

Scriptet viser resultater for den aktuelle dag.

Bemærk

Hvis du kun vil hente resultater for den forrige dag – undgå delvise dagsresultater – skal du se eksemplet Eksportér alle aktiviteter for forrige N dage .)

#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å et JSON-svar. Den indeholder tre aktiviteter, som brugeren har udført:

  • Den første aktivitet viser, at en Power BI-app blev oprettet.
  • Den anden aktivitet viser, at en Power BI-app blev opdateret.
  • Den tredje aktivitet viser, at en Power BI-app blev installeret af en bruger.

Advarsel!

Svaret indeholder kun de brugertilladelser, der blev ændret. Det er f.eks. muligt, at der er oprettet tre målgrupper i en CreateApp-hændelse . Hvis kun én målgruppe blev ændret i hændelsen UpdateApp, vises der kun én målgruppe i OrgAppPermission-dataene. Derfor er det ufuldstændigt at være afhængig af hændelsen UpdateApp til sporing af alle apptilladelser, fordi aktivitetsloggen kun viser, hvad der er ændret.

Hvis du vil have et snapshot af alle tilladelser til Power BI-appen, skal du i stedet bruge handlingen Hent appbrugere som Administration API.

[
  {
    "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: Få vist alle aktiviteter for et arbejdsområde for én dag

Nogle gange kan det være en god idé at undersøge aktiviteter, der er relateret til et bestemt arbejdsområde. I dette eksempel hentes alle aktiviteter for alle brugere for én dag. Derefter filtreres resultaterne, så du kan fokusere på at analysere aktiviteter fra ét arbejdsområde.

Eksempelanmodning 5

Scriptet deklarerer to variabler:

  • $ActivityDate: Den dato, du er interesseret i. Formatet er ÅÅÅÅ-MM-DD. Du kan ikke anmode om en dato, der ligger før 30 dage før dags dato.
  • $WorkspaceName: Navnet på det arbejdsområde, du er interesseret i.

Scriptet gemmer resultaterne i variablen $Results . Derefter konverteres JSON-dataene til et objekt, så resultaterne kan fortolkes. Derefter filtreres resultaterne for at hente fem specifikke kolonner. CreationTime-dataene omdøbes til ActivityDateTime. Resultaterne filtreres efter navnet på arbejdsområdet og sendes derefter til skærmen.

Der er ikke en parameter for Cmdlet'en Get-PowerBIActivityEvent , der giver dig mulighed for at angive et arbejdsområde, når du kontrollerer aktivitetsloggen (tidligere eksempler i denne artikel brugte PowerShell-parametre til at angive en bestemt bruger, dato eller aktivitetsnavn). I dette eksempel henter scriptet alle dataene og fortolker derefter JSON-svaret for at filtrere resultaterne for et bestemt arbejdsområde.

Advarsel

Hvis du er i en stor organisation, der har hundred- eller tusindvis af aktiviteter pr. dag, kan filtrering af resultaterne, når de er blevet hentet, være meget ineffektiv. Vær opmærksom på , at handlingen Hent aktivitetshændelser er begrænset til 200 anmodninger pr. time.

Hvis du vil undgå API-begrænsning (når du overskrider det antal anmodninger, du har tilladelse til at foretage i en given tidsperiode), skal du ikke hente de oprindelige data mere, end du har brug for. Du kan fortsætte med at arbejde med de filtrerede resultater uden at køre scriptet for at hente resultaterne igen. I forbindelse med løbende behov er det en bedre praksis at udtrække alle dataene én gang om dagen og derefter forespørge dem mange gange.

#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

Eksempelsvar 5

Her er de filtrerede resultater, som omfatter et lille undersæt af egenskaber. Formatet er lettere at læse til lejlighedsvis analyse. Vi anbefaler dog, at du konverterer det tilbage til JSON-format, hvis du planlægger at gemme resultaterne.

Bemærk

Når JSON-resultaterne er konverteret til et PowerShell-objekt, konverteres klokkeslætsværdier til lokaltid. De oprindelige overvågningsdata registreres altid i UTC-tid (Coordinated Universal Time), så vi anbefaler, at du vænner dig til kun at bruge 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

Tip

Du kan bruge denne teknik til at filtrere resultater efter en hvilken som helst egenskab i resultaterne. Du kan f.eks. bruge en bestemt hændelse RequestId til kun at analysere én bestemt hændelse.

Eksempel 6: Eksportér alle aktiviteter for forrige N dage

Nogle gange vil du måske eksportere alle aktivitetsdata til en fil, så du kan arbejde med dataene uden for PowerShell. I dette eksempel hentes alle aktiviteter for alle brugere i op til 30 dage. Dataene eksporteres til én JSON-fil pr. dag.

Vigtigt

Aktivitetslogdata er tilgængelige i højst 30 dage. Det er vigtigt, at du eksporterer og bevarer dataene, så du kan foretage historiske analyser. Hvis du i øjeblikket ikke eksporterer og gemmer dataene i aktivitetsloggen, anbefaler vi på det kraftigste, at du prioriterer at gøre det.

Eksempelanmodning 6

Scriptet henter alle aktiviteter i en række dage. Den deklarerer tre variabler:

  • $NbrDaysDaysToExtract: Hvor mange dage du er interesseret i at eksportere. Den udfører en løkke, der arbejder bagud fra den forrige dag. Den maksimalt tilladte værdi er 30 dage (fordi den tidligste dato, du kan hente, er 30 dage før den aktuelle dag).
  • $ExportFileLocation: Den mappesti, hvor du vil gemme filerne. Mappen skal findes, før scriptet kan køres. Medtag ikke et omvendt skråstregstegn (\) i slutningen af mappestien (fordi det tilføjes automatisk på kørselstidspunktet). Vi anbefaler, at du bruger en separat mappe til at gemme rådatafiler.
  • $ExportFileName: Præfikset for hvert filnavn. Da én fil pr. dag gemmes, tilføjer scriptet et suffiks for at angive dataene i filen og den dato og det klokkeslæt, dataene blev hentet. Hvis du f.eks. kørte et script kl. 9 (UTC) den 25. april 2023 for at udtrække aktivitetsdata for den 23. april 2023, vil filnavnet være: PBIActivityEvents-20230423-202304250900. Selvom mappestrukturen, hvor den er gemt, er nyttig, skal hvert filnavn beskrives fuldt ud.

Vi anbefaler, at du udtrækker data, der er mindst én dag før den aktuelle dag. På den måde undgår du at hente delvise dagshændelser, og du kan være sikker på, at hver eksportfil indeholder hele 24 timers data.

Scriptet indsamler op til 30 dages data til og med den forrige dag. Tidsstempler for overvågede hændelser findes altid i UTC. Vi anbefaler, at du bygger alle dine overvågningsprocesser baseret på UTC-tid i stedet for din lokale tid.

Scriptet opretter én JSON-fil pr. dag. Suffikset for filnavnet indeholder tidsstempel (i UTC-format) for de udtrukne data. Hvis du udtrækker den samme dag med data mere end én gang, hjælper suffikset i filnavnet dig med at identificere den nyere fil.

#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

Der er flere fordele ved at bruge PowerShell-cmdlet'en Get-PowerBIActivityEvent i stedet for REST API-handlingen Hent aktivitetshændelser .

  • Cmdlet'en giver dig mulighed for at anmode om én dags aktivitet, hver gang du foretager et opkald ved hjælp af cmdlet'en. Mens du kommunikerer direkte med API'en, kan du kun anmode om én time pr. API-anmodning.
  • Cmdlet'en håndterer fortsættelsestokens for dig. Hvis du bruger API'en direkte, skal du kontrollere fortsættelsestokenet for at finde ud af, om der er flere resultater. Nogle API'er skal bruge sideinddelings- og fortsættelsestokens af hensyn til ydeevnen, når de returnerer en stor mængde data. De returnerer det første sæt poster, og med et fortsættelsestoken kan du foretage et efterfølgende API-kald for at hente det næste sæt poster. Du fortsætter med at kalde API'en, indtil der ikke returneres et fortsættelsestoken. Brug af fortsættelsestokenet er en måde at konsolidere flere API-anmodninger på, så du kan konsolidere et logisk sæt resultater. Du kan se et eksempel på brug af et fortsættelsestoken under REST API for aktivitetshændelser.
  • Cmdlet'en håndterer udløb af Microsoft Entra-id (tidligere kaldet Azure Active Directory) for dig. Når du er godkendt, udløber dit adgangstoken efter en time (som standard). I dette tilfælde anmoder cmdlet'en automatisk om et opdateringstoken for dig. Hvis du kommunikerer direkte med API'en, skal du anmode om et opdateringstoken.

Du kan få flere oplysninger under Vælg API'er eller PowerShell-cmdlet'er.

Bemærk

Et eksempelsvar udelades, fordi det er et output, der ligner de svar, der blev vist i de forrige eksempler.

Du kan få flere oplysninger, der er relateret til denne artikel, i følgende ressourcer: