Dela via


Komma åt Power BI-aktivitetsloggen

Den här artikeln riktar sig till Power BI-administratörer som behöver komma åt och analysera data som kommer från Power BI-aktivitetsloggen. Den fokuserar på programmatisk hämtning av Power BI-aktiviteter med hjälp av cmdleten Get-PowerBIActivityEvent från Power BI-hanteringsmodulen. Upp till 30 dagars historik är tillgängligt. Den här cmdleten använder åtgärden Hämta aktivitetshändelser i Power BI REST API, som är ett administratörs-API. PowerShell-cmdletar lägger till ett abstraktionslager ovanpå de underliggande API:erna. Därför förenklar PowerShell-cmdleten åtkomsten till Power BI-aktivitetsloggen.

Det finns andra manuella och programmatiska sätt att hämta Power BI-aktiviteter. Mer information finns i Åtkomst till användaraktivitetsdata.

Att analysera Power BI-aktivitetsloggen är avgörande för styrning, efterlevnad och för att spåra implementeringsarbetet . Mer information om Power BI-aktivitetsloggen finns i Spåra användaraktiviteter i Power BI.

Dricks

Vi rekommenderar att du granskar granskningsartikeln på klientorganisationsnivå fullt ut. Den här artikeln beskriver planering, viktiga beslut, förutsättningar och viktiga aktiviteter för lösningsutveckling att tänka på när du skapar en granskningslösning från slutpunkt till slutpunkt.

Tillgängliga exempel

Målet med den här artikeln är att ge dig exempel som hjälper dig att komma igång. Exemplen omfattar skript som hämtar data från aktivitetsloggen med power BI Management PowerShell-modulen.

Varning

Skripten är inte produktionsklara eftersom de endast är avsedda för utbildningsändamål. Du kan dock anpassa skripten i produktionssyfte genom att lägga till logik för loggning, felhantering, aviseringar och refaktorisering för återanvändning och modularisering av kod.

Eftersom de är avsedda för inlärning är exemplen förenklade, men de är verkliga. Vi rekommenderar att du granskar alla exempel för att förstå hur de använder lite olika tekniker. När du har identifierat vilken typ av aktivitetsdata du behöver kan du blanda och matcha teknikerna för att skapa ett skript som passar dina behov bäst.

Den här artikeln innehåller följande exempel.

Exempelnamn Typ av aktivitetsdata
Autentisera med Power BI-tjänst Ej tillämpligt
Visa alla aktiviteter för en användare under en dag Alla
Visa en aktivitet för N-dagar Dela rapport (länk eller direktåtkomst)
Visa tre aktiviteter för N-dagar Skapa app, uppdatera app och installera app
Visa alla aktiviteter för en arbetsyta för en dag Alla
Exportera alla aktiviteter för de föregående N dagarna Alla

För enkelhetens skull matar de flesta av exemplen ut sitt resultat på skärmen. I Visual Studio Code matas till exempel data ut till terminalpanelen, som innehåller en buffertuppsättning data i minnet.

De flesta av exemplen hämtar råa JSON-data. Att arbeta med rådata för JSON har många fördelar.

  • All information som är tillgänglig för varje aktivitetshändelse returneras. Det är användbart för dig att lära dig vilka data som är tillgängliga. Tänk på att innehållet i ett API-svar skiljer sig beroende på den faktiska aktivitetshändelsen. De data som är tillgängliga för en CreateApp-händelse skiljer sig till exempel från ViewReport-händelsen .
  • Eftersom data som är tillgängliga i aktivitetsloggen ändras när Power BI utvecklas över tid kan du förvänta dig att API-svaren också ändras. På så sätt kommer nya data som introduceras inte att missas. Processen är också mer motståndskraftig mot förändringar och är mindre sannolikt att misslyckas.
  • Informationen om ett API-svar kan skilja sig åt för det kommersiella Power BI-molnet och de nationella/regionala molnen.
  • Om du har olika teammedlemmar (till exempel datatekniker) som engagerar sig i den här processen blir det enklare för flera team att arbeta tillsammans genom att förenkla den inledande processen för att extrahera data.

Dricks

Vi rekommenderar att du behåller dina skript som extraherar data så enkelt som möjligt. Undvik därför att parsa, filtrera eller formatera aktivitetsloggdata när de extraheras. Den här metoden använder en ELT-metod som har separata steg för att extrahera, läsa in och transformera data. Den här artikeln fokuserar bara på det första steget, som handlar om att extrahera data.

Krav

Om du vill använda exempelskripten måste du uppfylla följande krav.

  • PowerShell-klientverktyg: Använd önskat verktyg för att köra PowerShell-kommandon. Alla exempel har testats med hjälp av PowerShell-tillägget för Visual Studio Code med PowerShell 7. Information om klientverktyg och PowerShell-versioner finns i Granskning på klientnivå.
  • Power BI-hanteringsmodul: Installera alla Power BI PowerShell-moduler. Om du tidigare har installerat dem rekommenderar vi att du uppdaterar modulerna för att säkerställa att du använder den senaste publicerade versionen.
  • Infrastrukturadministratörsroll: Exempelskripten är utformade för att använda ett interaktivt autentiseringsflöde. Därför måste användaren som kör PowerShell-exempelskript logga in för att använda Power BI REST-API:erna. Om du vill hämta aktivitetsloggdata måste den autentiserande användaren tillhöra Power BI-administratörsrollen (eftersom hämtning av aktivitetshändelser görs med ett administratörs-API). Autentisering med tjänstens huvudnamn ligger utanför omfånget för dessa inlärningsexempel.

Resten av den här artikeln innehåller exempelskript som visar olika sätt att hämta aktivitetsloggdata.

Exempel 1: Autentisera med Power BI-tjänst

Alla Power BI REST API-åtgärder kräver att du loggar in. Autentisering (vem som gör begäran) och auktorisering (vad användaren har behörighet att göra) hanteras av Microsofts identitetsplattform. I följande exempel används cmdleten Connect-PowerBIServiceAccount från Power BI-hanteringsmodulen. Den här cmdleten stöder en enkel metod för att logga in.

Exempelbegäran 1

Det första skriptet omdirigerar dig till en webbläsare för att slutföra inloggningsprocessen. Användarkonton som har multifaktorautentisering (MFA) aktiverat kan använda det här interaktiva autentiseringsflödet för att logga in.

Connect-PowerBIServiceAccount

Viktigt!

Användare utan Power BI-administratörsbehörighet kan inte köra något av de exempelskript som följer i den här artikeln. Power BI-administratörer har behörighet att hantera Power BI-tjänst och hämta metadata för hela klientorganisationen (till exempel aktivitetsloggdata). Även om användning av autentisering med tjänstens huvudnamn ligger utanför omfånget för dessa exempel rekommenderar vi starkt att du konfigurerar ett huvudnamn för tjänsten för produktionsklara, obevakade skript som körs enligt ett schema.

Var noga med att logga in innan du kör något av följande skript.

Exempel 2: Visa alla aktiviteter för en användare under en dag

Ibland måste du kontrollera alla aktiviteter som en specifik användare har utfört under en viss dag.

Dricks

När du extraherar data från aktivitetsloggen med hjälp av PowerShell-cmdleten kan varje begäran extrahera data i en dag (högst 24 timmar). Därför är målet med det här exemplet att börja helt enkelt genom att kontrollera en användare för en dag. Det finns andra exempel senare i den här artikeln som visar hur du använder en loop för att exportera data i flera dagar.

Exempelbegäran 2

Det här skriptet deklarerar två PowerShell-variabler för att göra det enklare att återanvända skriptet:

  • $UserEmailAddr: E-postadressen för den användare som du är intresserad av.
  • $ActivityDate: Det datum du är intresserad av. Formatet är ÅÅÅÅ-MM-DD (ISO 8601-format). Du kan inte begära ett datum tidigare än 30 dagar före det aktuella datumet.
#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

Kommentar

Du kanske ser ett backtick-tecken (') i slutet av några av raderna i PowerShell-skripten. I PowerShell är ett sätt att använda backtick-tecknet som ett radfortsättningstecken. Vi har använt den för att förbättra läsbarheten för skripten i den här artikeln.

Dricks

I skriptet korrelerar var och en av PowerShell-variablerna med ett obligatoriskt eller valfritt parametervärde i cmdleten Get-PowerBIActivityEvent . Till exempel skickas värdet som du tilldelar variabeln $UserEmailAddr till parametern -User . Att deklarera PowerShell-variabler på det här sättet är en enkel metod för att undvika hårdkodningsvärden som kan ändras i skriptet. Det är en bra vana att använda, och det kommer att vara användbart när dina skript blir mer komplexa. PowerShell-parametrar är mer robusta än variabler, men de ligger utanför omfånget för den här artikeln.

Exempelsvar 2

Här är ett JSON-exempelsvar. Den innehåller två aktiviteter som användaren utförde:

  • Den första aktiviteten visar att en användare visade en rapport.
  • Den andra aktiviteten visar att en administratör exporterade data från 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"
  }
]

Dricks

Att extrahera Power BI-aktivitetsloggdata är också en loggad åtgärd, som du ser i föregående svar. När du analyserar användaraktiviteter kanske du vill utelämna administratörsaktiviteter – eller analysera dem separat.

Exempel 3: Visa en aktivitet för N dagar

Ibland kanske du vill undersöka en viss typ av aktivitet under en serie dagar. Det här exemplet visar hur du hämtar rapportdelningsaktiviteter per objekt. Den använder en loop för att hämta aktiviteter från de föregående sju dagarna.

Exempelbegäran 3

Skriptet deklarerar två variabler:

  • $ActivityType: Åtgärdsnamnet för den aktivitet som du undersöker.
  • $NbrOfDaysToCheck: Hur många dagar du är intresserad av att kontrollera. Den utför en loop som arbetar bakåt från den aktuella dagen. Det högsta tillåtna värdet är 30 dagar (eftersom det tidigaste datum som du kan hämta är 30 dagar före den aktuella dagen).
#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 
}

Dricks

Du kan använda den här looptekniken för att kontrollera någon av de åtgärder som registrerats i aktivitetsloggen.

Exempelsvar 3

Här är ett JSON-exempelsvar. Den innehåller två aktiviteter som användaren utförde:

  • Den första aktiviteten visar att en delningslänk för en användare har skapats. Observera att värdet SharingAction skiljer sig beroende på om användaren har skapat en länk, redigerat en länk eller tagit bort en länk. För korthet visas endast en typ av delningslänkaktivitet i svaret.
  • Den andra aktiviteten visar att direktåtkomstdelning för en grupp har skapats. Observera att värdet SharingInformation skiljer sig beroende på vilken åtgärd som vidtagits. För korthet visas endast en typ av direktåtkomstdelningsaktivitet 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"
  }
]

Kommentar

Det här JSON-svaret visar att datastrukturen skiljer sig beroende på typen av händelse. Även samma typ av händelse kan ha olika egenskaper som ger lite olika utdata. Som vi rekommenderade tidigare i den här artikeln bör du vänja dig vid att hämta rådata.

Exempel 4: Visa tre aktiviteter för N-dagar

Ibland kanske du vill undersöka flera relaterade aktiviteter. Det här exemplet visar hur du hämtar tre specifika aktiviteter för de senaste sju dagarna. Den fokuserar på aktiviteter som rör Power BI-appar , inklusive att skapa en app, uppdatera en app och installera en app.

Exempelbegäran 4

Skriptet deklarerar följande variabler:

  • $NbrOfDaysToCheck: Hur många dagar du är intresserad av att kontrollera. Den utför en loop som fungerar bakåt från den aktuella dagen. Det högsta tillåtna värdet är 30 dagar (eftersom det tidigaste datum som du kan hämta är 30 dagar före den aktuella dagen).
  • $Activity1: Åtgärdsnamnet för den första aktiviteten som du undersöker. I det här exemplet söker den efter aktiviteter för att skapa Power BI-appar.
  • $Activity2: Det andra åtgärdsnamnet. I det här exemplet söker den efter Power BI-appuppdateringsaktiviteter.
  • $Activity3: Det tredje åtgärdsnamnet. I det här exemplet söker den efter power BI-appinstallationsaktiviteter.

Du kan bara hämta aktivitetshändelser för en aktivitet i taget. Skriptet söker därför efter varje åtgärd separat. Den kombinerar sökresultaten till en variabel med namnet $FullResults, som sedan matas ut till skärmen.

Varning

Om du kör många loopar många gånger ökar sannolikheten för API-begränsning avsevärt. Begränsning kan ske när du överskrider antalet begäranden som du får göra under en viss tidsperiod. Åtgärden Hämta aktivitetshändelser är begränsad till 200 begäranden per timme. När du utformar skripten bör du se till att inte hämta ursprungliga data fler gånger än du behöver. I allmänhet är det bättre att extrahera alla rådata en gång per dag och sedan fråga, transformera, filtrera eller formatera dessa data separat.

Skriptet visar resultat för den aktuella dagen.

Kommentar

Information om hur du hämtar resultat endast för föregående dag – undvika deldagsresultat – finns i exemplet Exportera alla aktiviteter för föregående N-dagar .)

#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

Exempelsvar 4

Här är ett JSON-exempelsvar. Den innehåller tre aktiviteter som användaren utförde:

  • Den första aktiviteten visar att en Power BI-app har skapats.
  • Den andra aktiviteten visar att en Power BI-app har uppdaterats.
  • Den tredje aktiviteten visar att en Power BI-app har installerats av en användare.

Varning

Svaret innehåller endast användarbehörigheter som har ändrats. Det är till exempel möjligt att tre målgrupper kunde ha skapats i ett CreateApp-evenemang . Om bara en målgrupp ändrades i UpdateApp-händelsen skulle endast en målgrupp visas i OrgAppPermission-data. Därför är det ofullständigt att förlita sig på UpdateApp-händelsen för att spåra alla appbehörigheter eftersom aktivitetsloggen bara visar vad som har ändrats.

Om du vill ha en ögonblicksbild av alla Power BI-appbehörigheter använder du åtgärden Hämta appanvändare som administratörs-API i stället.

[
  {
    "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"
  }
]

Exempel 5: Visa alla aktiviteter för en arbetsyta för en dag

Ibland kanske du vill undersöka aktiviteter som är relaterade till en viss arbetsyta. Det här exemplet hämtar alla aktiviteter för alla användare under en dag. Sedan filtreras resultatet så att du kan fokusera på att analysera aktiviteter från en arbetsyta.

Exempelbegäran 5

Skriptet deklarerar två variabler:

  • $ActivityDate: Det datum du är intresserad av. Formatet är ÅÅÅÅ-MM-DD. Du kan inte begära ett datum tidigare än 30 dagar före det aktuella datumet.
  • $WorkspaceName: Namnet på arbetsytan som du är intresserad av.

Skriptet lagrar resultatet i variabeln $Results . Sedan konverteras JSON-data till ett objekt så att resultatet kan parsas. Sedan filtreras resultatet för att hämta fem specifika kolumner. CreationTime-data byter namn till ActivityDateTime. Resultatet filtreras efter arbetsytans namn och matas sedan ut till skärmen.

Det finns ingen parameter för cmdleten Get-PowerBIActivityEvent som gör att du kan ange en arbetsyta när du kontrollerar aktivitetsloggen (tidigare exempel i den här artikeln använde PowerShell-parametrar för att ange en specifik användare, ett datum eller ett aktivitetsnamn). I det här exemplet hämtar skriptet alla data och parsar sedan JSON-svaret för att filtrera resultatet för en specifik arbetsyta.

Varning

Om du är i en stor organisation som har hundratals eller tusentals aktiviteter per dag kan det vara mycket ineffektivt att filtrera resultaten efter att de har hämtats. Tänk på att åtgärden Hämta aktivitetshändelser är begränsad till 200 begäranden per timme.

Om du vill undvika API-begränsning (när du överskrider antalet begäranden som du får göra under en viss tidsperiod) hämtar du inte de ursprungliga data som du behöver. Du kan fortsätta att arbeta med de filtrerade resultaten utan att köra skriptet för att hämta resultatet igen. För pågående behov är det en bättre metod att extrahera alla data en gång per dag och sedan köra frågor mot dem många gånger.

#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

Exempelsvar 5

Här är de filtrerade resultaten, som innehåller en liten delmängd av egenskaperna. Formatet är lättare att läsa för enstaka analyser. Vi rekommenderar dock att du konverterar tillbaka det till JSON-format om du planerar att lagra resultatet.

Kommentar

När JSON-resultatet har konverterats till ett PowerShell-objekt konverteras tidsvärdena till lokal tid. De ursprungliga granskningsdata registreras alltid i UTC-tid (Coordinated Universal Time), så vi rekommenderar att du vänjer dig vid att bara använda 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

Dricks

Du kan använda den här tekniken för att filtrera resultat efter valfri egenskap i resultatet. Du kan till exempel använda en specifik händelse RequestId för att analysera bara en specifik händelse.

Exempel 6: Exportera alla aktiviteter för föregående N dagar

Ibland kanske du vill exportera alla aktivitetsdata till en fil så att du kan arbeta med data utanför PowerShell. Det här exemplet hämtar alla aktiviteter för alla användare i upp till 30 dagar. Den exporterar data till en JSON-fil per dag.

Viktigt!

Aktivitetsloggdata är tillgängliga i högst 30 dagar. Det är viktigt att du exporterar och behåller data så att du kan göra historisk analys. Om du för närvarande inte exporterar och lagrar aktivitetsloggdata rekommenderar vi starkt att du prioriterar detta.

Exempelbegäran 6

Skriptet hämtar alla aktiviteter under en serie dagar. Den deklarerar tre variabler:

  • $NbrDaysDaysToExtract: Hur många dagar du är intresserad av att exportera. Den utför en loop som arbetar bakåt från föregående dag. Det högsta tillåtna värdet är 30 dagar (eftersom det tidigaste datum som du kan hämta är 30 dagar före den aktuella dagen).
  • $ExportFileLocation: Mappsökvägen där du vill spara filerna. Mappen måste finnas innan skriptet körs. Ta inte med ett omvänt snedstreck (\) i slutet av mappsökvägen (eftersom det läggs till automatiskt vid körning). Vi rekommenderar att du använder en separat mapp för att lagra rådatafiler.
  • $ExportFileName: Prefixet för varje filnamn. Eftersom en fil per dag sparas lägger skriptet till ett suffix som anger de data som finns i filen och datum och tid då data hämtades. Om du till exempel körde ett skript kl. 09.00 (UTC) den 25 april 2023 för att extrahera aktivitetsdata för 23 april 2023 skulle filnamnet vara: PBIActivityEvents-20230423-202304250900. Även om mappstrukturen där den lagras är användbar bör varje filnamn vara helt självbeskrivande.

Vi rekommenderar att du extraherar data som är minst en dag före den aktuella dagen. På så sätt undviker du att hämta partiella daghändelser, och du kan vara säker på att varje exportfil innehåller hela 24 timmars data.

Skriptet samlar in upp till 30 dagars data fram till föregående dag. Tidsstämplar för granskade händelser finns alltid i UTC. Vi rekommenderar att du skapar alla granskningsprocesser baserat på UTC-tid i stället för din lokala tid.

Skriptet genererar en JSON-fil per dag. Suffixet för filnamnet innehåller tidsstämpeln (i UTC-format) för extraherade data. Om du extraherar samma datadag mer än en gång hjälper suffixet i filnamnet dig att identifiera den nyare 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 finns flera fördelar med att använda PowerShell-cmdleten Get-PowerBIActivityEvent i stället för REST API-åtgärden Hämta aktivitetshändelser .

  • Med cmdleten kan du begära en aktivitetsdag varje gång du gör ett anrop med hjälp av cmdleten. När du kommunicerar direkt med API:et kan du bara begära en timme per API-begäran.
  • Cmdleten hanterar fortsättningstoken åt dig. Om du använder API:et direkt måste du kontrollera fortsättningstoken för att avgöra om det kommer några fler resultat. Vissa API:er måste använda sidnumrering och fortsättningstoken av prestandaskäl när de returnerar en stor mängd data. De returnerar den första uppsättningen poster och med en fortsättningstoken kan du göra ett efterföljande API-anrop för att hämta nästa uppsättning poster. Du fortsätter att anropa API:et tills en fortsättningstoken inte returneras. Att använda fortsättningstoken är ett sätt att konsolidera flera API-begäranden så att du kan konsolidera en logisk uppsättning resultat. Ett exempel på hur du använder en fortsättningstoken finns i REST API för aktivitetshändelser.
  • Cmdleten hanterar Microsoft Entra ID-åtkomsttokens förfallodatum åt dig. När du har autentiserats upphör din åtkomsttoken att gälla efter en timme (som standard). I det här fallet begär cmdleten automatiskt en uppdateringstoken åt dig. Om du kommunicerar direkt med API:et måste du begära en uppdateringstoken.

Mer information finns i Välj API:er eller PowerShell-cmdletar.

Kommentar

Ett exempelsvar utelämnas eftersom det är utdata som liknar de svar som visas i föregående exempel.

Mer information om den här artikeln finns i följande resurser: