Accedere al log attività di Power BI

Questo articolo è destinato agli amministratori di Power BI che devono accedere e analizzare i dati originati dal log attività di Power BI. È incentrato sul recupero programmatico delle attività di Power BI tramite il cmdlet Get-PowerBIActivityEvent dal modulo di gestione di Power BI. Sono disponibili fino a 30 giorni di cronologia. Questo cmdlet usa l'operazione Ottieni eventi attività dell'API REST di Power BI, ovvero un'API di amministrazione. I cmdlet di PowerShell aggiungono un livello di astrazione alle API sottostanti. Di conseguenza, il cmdlet di PowerShell semplifica l'accesso al log attività di Power BI.

Esistono altri metodi manuali e programmatici per recuperare le attività di Power BI. Per altre informazioni, vedere Accedere ai dati dell'attività utente.

L'analisi del log attività di Power BI è fondamentale per la governance, la conformità e il monitoraggio delle attività di adozione. Per altre informazioni sul log attività di Power BI, vedere Tenere traccia delle attività degli utenti in Power BI.

Suggerimento

È consigliabile rivedere per intero l'articolo Controllo a livello di tenant. Questo articolo illustra la pianificazione, le decisioni chiave, i prerequisiti e le principali attività di sviluppo di soluzioni da considerare quando si compila una soluzione di controllo end-to-end.

Esempi disponibili

L'obiettivo di questo articolo è fornire esempi utili per iniziare. Gli esempi includono script che recuperano dati dal log attività usando il modulo PowerShell per la gestione di Power BI.

Avviso

Gli script non sono pronti per la produzione perché sono destinati soltanto a scopi didattici. È tuttavia possibile adattare gli script a scopo di produzione aggiungendo logica per la registrazione, la gestione di errori, gli avvisi e il refactoring per il riutilizzo e la modularizzazione del codice.

Poiché sono destinati all'apprendimento, gli esempi sono semplicistici, ma sono reali. È consigliabile esaminare tutti gli esempi per comprendere come essi applichino tecniche leggermente diverse. Dopo aver identificato il tipo di dati di attività necessario, è possibile combinare e abbinare le tecniche per produrre uno script più adatto alle proprie esigenze.

Questo articolo include gli esempi seguenti.

Nome di esempio Tipo di dati dell'attività
Eseguire l'autenticazione con il servizio Power BI N/D
Visualizzare tutte le attività per un utente per un giorno Tutte le date
Visualizzare un'attività per N giorni Condividi report (collegamento o accesso diretto)
Visualizzare tre attività per N giorni Creare app, aggiornare app e installare app
Visualizzare tutte le attività per un'area di lavoro per un giorno Tutte le date
Esportare tutte le attività per i N giorni precedenti Tutte le date

Per semplicità, la maggior parte degli esempi restituisce il proprio risultato sullo schermo. Ad esempio, in Visual Studio Code, i dati vengono restituiti nel pannello del terminale, che contiene un set di dati buffer in memoria.

La maggior parte degli esempi recupera dati JSON non elaborati. L'uso di dati JSON non elaborati presenta molti vantaggi.

  • Vengono restituite tutte le informazioni disponibili per ogni evento di attività. Questo è utile per scoprire quali dati siano disponibili. Tenere presente che il contenuto di una risposta API varia a seconda dell'evento di attività effettivo. Ad esempio, i dati disponibili per un evento CreateApp sono diversi dall'evento ViewReport.
  • Poiché i dati disponibili nel log attività cambiano man mano che Power BI evolve nel tempo, è possibile prevedere che anche le risposte dell'API camberanno. In questo modo, i nuovi dati introdotti non verranno persi. Il processo è anche più resiliente a modifiche ed è meno probabile che si verifichino errori.
  • I dettagli di una risposta API possono differire tra il cloud commerciale di Power BI e i cloud nazionali/regionali.
  • Se si hanno diversi membri del team (ad esempio, data engineer) che si occupano di questo processo, semplificare il processo iniziale per l’estrazione dei dati facilita la collaborazione tra più team.

Suggerimento

È consigliabile mantenere gli script per l’estrazione dei dati il più semplici possibile. Pertanto, evitare di analizzare, filtrare o formattare i dati del log attività durante l'estrazione. Questo approccio usa una metodologia ELT, che include passaggi diversi per estrarre, caricare e trasformare i dati. Questo articolo è incentrato solo sul primo passaggio, che riguarda l'estrazione dei dati.

Requisiti

Per usare gli script di esempio, è necessario soddisfare i requisiti seguenti.

  • Strumento client di PowerShell: usare lo strumento preferito per l'esecuzione di comandi di PowerShell. Tutti gli esempi sono stati testati usando l'estensione PowerShell per Visual Studio Code con PowerShell 7. Per informazioni sugli strumenti client e sulle versioni di PowerShell, vedere Controllo a livello di tenant.
  • Modulo di gestione di Power BI: installare tutti i moduli powerShell di Power BI. Se sono stati installati in precedenza, è consigliabile aggiornare i moduli per assicurarsi di usarne la versione pubblicata più recente.
  • Ruolo di amministratore Fabric: gli script di esempio sono progettati per usare un flusso di autenticazione interattivo. Pertanto, l'utente che esegue gli script di esempio di PowerShell deve accedere per usare le API REST di Power BI. Per recuperare i dati del log attività, l'utente che esegue l'autenticazione deve appartenere al ruolo amministratore di Power BI (poiché il recupero di eventi di attività viene eseguito con un'API di amministrazione). L'autenticazione dell'entità servizio non rientra nell'ambito di questi esempi per l’apprendimento.

La parte restante di questo articolo include script di esempio che illustrano diversi modi per recuperare i dati del log attività.

Esempio 1: Eseguire l'autenticazione con il servizio Power BI

Tutte le operazioni dell'API REST di Power BI richiedono l'accesso. L'autenticazione (chi effettua la richiesta) e l'autorizzazione (cosa l’utente è autorizzato a fare) vengono gestite da Microsoft Identity Platform. L'esempio seguente usa il cmdlet Connect-PowerBIServiceAccount del Modulo di gestione di Power BI. Questo cmdlet supporta un metodo semplice per eseguire l’accesso.

Richiesta campione 1

Il primo script reindirizza l'utente a un browser per completare il processo di accesso. Gli account utente con autenticazione a più fattori (MFA) abilitata possono usare questo flusso di autenticazione interattiva per accedere.

Connect-PowerBIServiceAccount

Importante

Gli utenti senza privilegi di amministratore di Power BI non possono eseguire nessuno degli script di esempio contenuti in seguito in questo articolo. Gli amministratori di Power BI dispongono dell'autorizzazione per gestire il servizio Power BI e recuperare i metadati a livello di tenant, ad esempio dati del log attività. Anche se l'uso dell'autenticazione dell'entità servizio non rientra nell'ambito di questi esempi, è consigliabile configurare un'entità servizio per script senza intervento dell'utente pronti per la produzione che verranno eseguiti in base a una pianificazione.

Assicurarsi di accedere prima di eseguire uno degli script seguenti.

Esempio 2: Visualizzare tutte le attività per un utente per un giorno

In alcuni casi, è necessario controllare tutte le attività eseguite da un utente specifico in un giorno specifico.

Suggerimento

Quando si estraggono dati dal log attività usando il cmdlet di PowerShell, ogni richiesta può estrarre dati per un giorno (un massimo di 24 ore). Pertanto, l'obiettivo di questo esempio è quello di iniziare semplicemente monitorando un utente per un giorno. Più avanti in questo articolo sono disponibili altri esempi che illustrano come usare un ciclo per esportare i dati per più giorni.

Richiesta campione 2

Questo script dichiara due variabili di PowerShell per semplificare il riutilizzo dello script:

  • $UserEmailAddr: indirizzo di posta elettronica per l'utente a cui si è interessati.
  • $ActivityDate: data a cui si è interessati. Il formato è AAAA-MM-GG (formato ISO 8601). Non è possibile richiedere una data precedente a 30 giorni prima della data corrente.
#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

Nota

SI potrebbe notare un carattere di backtick (') alla fine di alcune righe negli script di PowerShell. In PowerShell, un modo per usare il carattere backtick è come carattere di continuazione di riga. È stato usato per migliorare la leggibilità degli script in questo articolo.

Suggerimento

Nello script, ognuna delle variabili di PowerShell è correlata a un valore di parametro obbligatorio o facoltativo nel cmdlet Get-PowerBIActivityEvent . Ad esempio, il valore assegnato alla variabile $UserEmailAddr viene passato al parametro -User. Dichiarare e variabili di PowerShell in questo modo rappresenta un approccio soft per evitare valori hardcoded che potrebbero cambiare nello script. Questa è un’ottima abitudine da adottare e sarà utile quando gli script diventeranno più complessi. I parametri di PowerShell sono più affidabili delle variabili, ma non rientrano nell'ambito di questo articolo.

Risposta campione 2

Ecco una risposta JSON campione. Include due attività eseguite dall'utente:

  • La prima attività mostra che un utente ha visualizzato un report.
  • La seconda attività mostra che un amministratore ha esportato i dati dal log attività di Power BI.
[
  {
    "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"
  }
]

Suggerimento

L'estrazione dei dati del log attività di Power BI è anch’essa un'operazione registrata, come illustrato nella risposta precedente. Quando si analizzano le attività degli utenti, è possibile omettere le attività di amministratore o analizzarle separatamente.

Esempio 3: Visualizzare un'attività per N giorni

In alcuni casi, potrebbe essere necessario analizzare un tipo specifico di attività per una serie di giorni. In questo esempio viene illustrato come recuperare attività di condivisione di report per elemento. Usa un ciclo per recuperare le attività dai sette giorni precedenti.

Richiesta campione 3

Lo script dichiara due variabili:

  • $ActivityType: Il nome operazione per l'attività che si sta analizzando.
  • $NbrOfDaysToCheck: quanti giorni si è interessati a controllare. Esegue un ciclo che si muove all’indietro rispetto al giorno corrente. Il valore massimo consentito è 30 giorni (perché la data meno recente che è possibile recuperare è 30 giorni prima del giorno corrente).
#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 
}

Suggerimento

È possibile usare questa tecnica di ciclo per controllare qualsiasi delle operazioni registrate nel log attività.

Risposta campione 3

Ecco una risposta JSON campione. Include due attività eseguite dall'utente:

  • La prima attività mostra che è stato creato un collegamento di condivisione per un utente. Notare che il valore SharingAction varia a seconda che l'utente abbia creato, modificato o eliminato un collegamento. Per brevità, nella risposta viene visualizzato un solo tipo di attività di collegamento di condivisione.
  • La seconda attività mostra che la condivisione diretta dell'accesso per un gruppo è stata creata. Notare che il valore SharingInformation varia a seconda dell'azione eseguita. Per brevità, nella risposta viene visualizzato un solo tipo di attività di condivisione dell'accesso diretto.
[
  {
    "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"
  }
]

Nota

Questa risposta JSON mostra che la struttura dei dati varia in base al tipo di evento. Anche lo stesso tipo di evento può avere caratteristiche diverse che producono un output leggermente diverso. Come suggerito in precedenza in questo articolo, è consigliabile familiarizzarsi con il recupero di dati non elaborati.

Esempio 4: Visualizzare tre attività per N giorni

In alcuni casi potrebbe essere necessario analizzare diverse attività correlate. In questo esempio viene illustrato come recuperare tre attività specifiche per i sette giorni precedenti. L’esempio è focalizzato sulle attività correlate alle app di Power BI, tra cui la creazione, l'aggiornamento e l'installazione di un'app.

Richiesta campione 4

Lo script dichiara le variabili seguenti:

  • $NbrOfDaysToCheck: quanti giorni si è interessati a controllare. Esegue un ciclo che si muove all’indietro rispetto al giorno corrente. Il valore massimo consentito è 30 giorni (perché la data meno recente che è possibile recuperare è 30 giorni prima del giorno corrente).
  • $Activity1: Il nome operazione per la prima attività che si sta analizzando. In questo esempio, viene eseguita la ricerca di attività di creazione di app Power BI.
  • $Activity2: il secondo nome operazione. In questo esempio viene eseguita la ricerca di attività di aggiornamento dell'app Power BI.
  • $Activity3: il terzo nome operazione. In questo esempio viene eseguita la ricerca di attività di installazione dell'app Power BI.

È possibile recuperare eventi di attività solo per un'attività alla volta. Quindi, lo script cerca ciascun’operazione separatamente. Combina i risultati della ricerca in una variabile denominata $FullResults, che quindi restituisce allo schermo.

Attenzione

L'esecuzione di molti cicli aumenta notevolmente la probabilità di limitazione delle richieste delle API. La limitazione delle richieste può verificarsi quando si supera il numero di richieste che è possibile effettuare in un determinato periodo di tempo. L'operazione Ottieni eventi attività è limitata a 200 richieste all'ora. Quando si progettano gli script, prestare attenzione a non recuperare i dati originali più volte di quanto necessario. In genere, è consigliabile estrarre tutti i dati non elaborati una volta al giorno e quindi eseguirvi query, trasformare, filtrare o formattare i dati separatamente.

Lo script mostra i risultati per il giorno corrente.

Nota

Per recuperare risultati solo per il giorno precedente, evitando risultati parziali, vedere l'esempio Esporta tutte le attività per n giorni precedenti.

#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

Risposta campione 4

Ecco una risposta JSON campione. Include tre attività eseguite dall'utente:

  • La prima attività mostra che è stata creata un'app Power BI.
  • La seconda attività mostra che un'app Power BI è stata aggiornata.
  • La terza attività mostra che un'app Power BI è stata installata da un utente.

Avviso

La risposta include solo le autorizzazioni utente modificate. Ad esempio, è possibile che tre gruppi di destinatari siano stati creati in un evento CreateApp. Nell'evento UpdateApp, se solo un gruppo di destinatari è stato modificato, solo un gruppo di destinatari verrà visualizzato nei dati OrgAppPermission. Per questo motivo, basarsi sull'evento UpdateApp per tenere traccia di tutte le autorizzazioni dell'app darà risultati incompleti, perché il log attività mostra solo le modifiche.

Per uno snapshot di tutte le autorizzazioni dell'app Power BI, usare invece l'operazione API Ottieni gli utenti dell'app come amministratore.

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

Esempio 5: Visualizzare tutte le attività per un'area di lavoro per un giorno

In alcuni casi, potrebbe essere necessario analizzare le attività correlate a un'area di lavoro specifica. In questo esempio vengono recuperate tutte le attività per tutti gli utenti per un giorno. Quindi, i risultati vengono filtrati in modo che sia possibile concentrarsi sull'analisi delle attività da un'area di lavoro.

Richiesta campione 5

Lo script dichiara due variabili:

  • $ActivityDate: data a cui si è interessati. Il formato è AAAA-MM-GG. Non è possibile richiedere una data precedente a 30 giorni prima della data corrente.
  • $WorkspaceName: nome dell'area di lavoro a cui si è interessati.

Lo script archivia i risultati nella variabile $Results. Converte quindi i dati JSON in un oggetto in modo che i risultati possano essere analizzati. Quindi, filtra i risultati per recuperare cinque colonne specifiche. I dati CreationTime vengono rinominati come ActivityDateTime. I risultati vengono filtrati in base al nome dell'area di lavoro e quindi mostrati come output nella schermata.

Non esiste un parametro per il cmdlet Get-PowerBIActivityEvent che consenta di specificare un'area di lavoro durante il controllo del log attività (negli esempi precedenti in questo articolo sono stati usati i parametri di PowerShell per impostare un nome utente, una data o un'attività specifica). In questo esempio, lo script recupera tutti i dati e quindi analizza la risposta JSON per filtrare i risultati per un'area di lavoro specifica.

Attenzione

Se si è in un'organizzazione di grandi dimensioni con centinaia o migliaia di attività al giorno, filtrare i risultati dopo che sono stati recuperati può risultare molto inefficiente. Tenere presente che l’operazione Ottieni eventi attività è limitata a 200 richieste all'ora.

Per evitare la limitazione delle richieste di API (quando si supera il numero di richieste che è consentito effettuare in un determinato periodo di tempo), non recuperare i dati originali più di quanto necessario. È possibile continuare a usare i risultati filtrati senza eseguire lo script per recuperare di nuovo i risultati. Per le esigenze sul lungo termine, è consigliabile estrarre tutti i dati una volta al giorno e quindi eseguirvi una query molte volte.

#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

Risposta campione 5

Ecco i risultati filtrati, che includono un piccolo subset di proprietà. Il formato è più facile da leggere per l'analisi occasionale. È tuttavia consigliabile convertirlo in formato JSON se si prevede di archiviare i risultati.

Nota

Dopo aver convertito i risultati JSON in un oggetto PowerShell, i valori di ora vengono convertiti nell'ora locale. I dati di controllo originali vengono sempre registrati nell'ora UTC (Coordinated Universal Time), quindi è consigliabile abituarsi ad usare esclusivamente l'ora UTC.

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

Suggerimento

È possibile usare questa tecnica per filtrare i risultati in base a qualsiasi proprietà nei risultati. Ad esempio, è possibile usare un evento specifico RequestId per analizzare un solo evento specifico.

Esempio 6: Esportare tutte le attività per N giorni precedenti

In alcuni casi, potrebbe essere necessario esportare tutti i dati dell'attività in un file, così da poter usare i dati all'esterno di PowerShell. In questo esempio vengono recuperate tutte le attività per tutti gli utenti per un massimo di 30 giorni. Esso esporta i dati in un file JSON per ciascun giorno.

Importante

I dati del log attività sono disponibili per un massimo di 30 giorni. È importante esportare e conservare i dati in modo da poter eseguire analisi cronologiche. Se attualmente non si esportano e archiviano i dati del log attività, è altamente consigliabile cominciare a farlo il prima possibile.

Richiesta campione 6

Lo script recupera tutte le attività per una serie di giorni. Dichiara tre variabili:

  • $NbrDaysDaysToExtract: numero di giorni a cui si è interessati per l'esportazione. Esegue un ciclo che si muove all’indietro rispetto al giorno precedente. Il valore massimo consentito è 30 giorni (perché la data meno recente che è possibile recuperare è 30 giorni prima del giorno corrente).
  • $ExportFileLocation: percorso della cartella in cui salvare i file. La cartella deve essere esistente prima di eseguire lo script. Non includere un carattere barra rovesciata (\) alla fine del percorso della cartella (poiché verrà aggiunto automaticamente in fase di esecuzione). È consigliabile usare una cartella diversa per archiviare i file di dati non elaborati.
  • $ExportFileName: prefisso per ogni nome di file. Poiché viene salvato un file al giorno, lo script aggiunge un suffisso per indicare i dati contenuti nel file e la data e l'ora di recupero dei dati. Ad esempio, se è stato eseguito uno script alle 9:00 (UTC) del 25 aprile 2023 per estrarre i dati delle attività per il 23 aprile 2023, il nome del file sarà PBIActivityEvents-20230423-202304250900. Sebbene la struttura di cartelle in cui è archiviato risulti utile, ogni nome di file deve essere completamente autodescrittivo.

È consigliabile estrarre i dati di almeno un giorno prima di quello corrente. In questo modo, si evita di recuperare eventi giornalieri parziali e si può essere certi che ogni file di esportazione contenga i dati delle intere 24 ore.

Lo script raccoglie fino a 30 giorni di dati, fino al giorno precedente. I timestamp per gli eventi controllati sono sempre in formato UTC. È consigliabile compilare tutti i processi di controllo in base all'ora UTC anziché all'ora locale.

Lo script produce un file JSON al giorno. Il suffisso del nome file include il timestamp (in formato UTC) dei dati estratti. Se si estraggono più volte i dati dello stesso giorno, il suffisso nel nome file consente di identificare il file più recente.

#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

L'uso del cmdlet PowerShell Get-PowerBIActivityEvent anziché dell’operazione API REST Ottieni eventi attività presenta diversi vantaggi.

  • Il cmdlet consente di richiedere un giorno di attività ogni volta che si effettua una chiamata usando il cmdlet. Al contrario, quando si comunica direttamente con l'API, è possibile richiedere solo un'ora per ogni richiesta API.
  • Il cmdlet gestisce automaticamente i token di continuazione. Se si usa direttamente l'API, è necessario controllare il token di continuazione per determinare se altri risultati siano in arrivo. Alcune API necessitano di usare token di paginazione e di continuazione per motivi di prestazioni quando restituiscono una grande quantità di dati. Restituiscono il primo set di record, quindi con un token di continuazione è possibile effettuare una chiamata API successiva per recuperare il prossimo set di record. Continuare a chiamare l'API fino a quando non viene restituito un token di continuazione. L'uso del token di continuazione è un modo per consolidare più richieste API così da poter consolidare un set logico di risultati. Per un esempio di uso di un token di continuazione, vedere API REST di eventi attività.
  • Il cmdlet gestisce automaticamente le scadenze dei token di accesso di Microsoft Entra ID. Dopo l'autenticazione, il token di accesso scadrà dopo un'ora (per impostazione predefinita). In questo caso, il cmdlet richiede automaticamente un token di aggiornamento. Se si comunica direttamente con l'API, è necessario richiedere un token di aggiornamento.

Per altre informazioni, vedere Scegliere API o cmdlet di PowerShell.

Nota

Una risposta campione viene omessa perché si tratta di un output simile alle risposte mostrate negli esempi precedenti.

Per altre informazioni correlate a questo articolo, vedere le risorse seguenti: