Condividi tramite


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 usando il cmdlet Get-PowerBIActivityEvent dal modulo Di gestione di Power BI. Sono disponibili fino a 30 giorni di cronologia. Questo cmdlet usa l'operazione Get Activity Events (Ottieni eventi attività) dell'API REST di Power BI, ovvero un'API di amministrazione. I cmdlet di PowerShell aggiungono un livello di astrazione sopra le API sottostanti. Di conseguenza, il cmdlet di PowerShell semplifica l'accesso al log attività di Power BI.

Esistono altri modi manuali e programmatici per recuperare le attività di Power BI. Per altre informazioni, vedere Access user activity data .For more information, see the Access user activity data.

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 esaminare completamente 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 solo a scopi didattici. È tuttavia possibile adattare gli script a scopo di produzione aggiungendo logica per la registrazione, la gestione degli 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 si applicano tecniche leggermente diverse. Dopo aver identificato il tipo di dati di attività necessari, è 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 l'app e installare l'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 risultato sullo schermo. Ad esempio, in Visual Studio Code, i dati vengono restituiti nel pannello del terminale, che contiene un set di buffer di dati in memoria.

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

  • Vengono restituite tutte le informazioni disponibili per ogni evento di attività. Questo è utile per scoprire quali dati sono 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 cambino. In questo modo, i nuovi dati introdotti non verranno persi. Il processo è anche più resiliente alla modifica e meno probabile che si verifichi un errore.
  • I dettagli di una risposta API possono essere diversi per il cloud commerciale di Power BI e per i cloud nazionali/regionali.
  • Se si hanno membri del team diversi (ad esempio i data engineer) che si occupano di questo processo, semplificando il processo iniziale per estrarre i dati, è più semplice collaborare tra più team.

Suggerimento

È consigliabile mantenere gli script che estraggono i dati il più semplice 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 separati 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 usare la versione pubblicata più recente.
  • Ruolo di amministratore dell'infrastruttura: 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 di amministratore di Power BI perché il recupero degli eventi di attività viene eseguito con un'API di amministrazione. L'autenticazione dell'entità servizio non rientra nell'ambito di questi esempi di 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 dispone delle autorizzazioni da eseguire) vengono gestite da Microsoft Identity Platform. Nell'esempio seguente viene usato il cmdlet Connessione-PowerBIServiceAccount dal modulo Di gestione di Power BI. Questo cmdlet supporta un metodo semplice per accedere.

Richiesta di esempio 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) abilitati possono usare questo flusso di autenticazione interattiva per accedere.

Connect-PowerBIServiceAccount

Importante

Gli utenti senza privilegi di amministratore di Power BI non possono eseguire script di esempio che seguono in questo articolo. Gli amministratori di Power BI hanno l'autorizzazione per gestire il servizio Power BI e recuperare i metadati a livello di tenant, ad esempio i 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 gli script automatici 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 i dati per un giorno (un massimo di 24 ore). Pertanto, l'obiettivo di questo esempio è quello di iniziare semplicemente controllando 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 di esempio 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 di interesse. 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

È possibile notare un carattere di backtick (') alla fine di alcune righe negli script di PowerShell. In PowerShell, un modo per usare il carattere backtick è un 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 $UserEmailAddr variabile viene passato al -User parametro . La dichiarazione delle variabili di PowerShell in questo modo è un approccio leggero per evitare valori hardcoded che potrebbero cambiare nello script. Questa è una buona abitudine adottare e sarà utile quando gli script diventano più complessi. I parametri di PowerShell sono più affidabili delle variabili, ma non rientrano nell'ambito di questo articolo.

Risposta di esempio 2

Ecco una risposta JSON di esempio. 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 è anche 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 le attività di condivisione di report per elemento. Usa un ciclo per recuperare le attività dai sette giorni precedenti.

Richiesta di esempio 3

Lo script dichiara due variabili:

  • $ActivityType: nome dell'operazione per l'attività in corso di analisi.
  • $NbrOfDaysToCheck: quanti giorni si è interessati a controllare. Esegue un ciclo che funziona 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 una delle operazioni registrate nel log attività.

Risposta di esempio 3

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

  • La prima attività mostra che è stato creato un collegamento di condivisione per un utente. Si noti che il valore SharingAction varia a seconda che l'utente abbia creato un collegamento, modificato un collegamento o eliminato un collegamento. Per brevità, nella risposta viene visualizzato un solo tipo di attività di collegamento di condivisione.
  • La seconda attività mostra che è stata creata la condivisione diretta dell'accesso per un gruppo. Si noti 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 è diversa in base al tipo di evento. Anche lo stesso tipo di evento può avere caratteristiche diverse che producono un output leggermente diverso. Come consigliato in precedenza in questo articolo, è consigliabile abituarsi al recupero dei 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. Si concentra sulle attività correlate alle app di Power BI, tra cui la creazione di un'app, l'aggiornamento di un'app e l'installazione di un'app.

Richiesta di esempio 4

Lo script dichiara le variabili seguenti:

  • $NbrOfDaysToCheck: quanti giorni si è interessati a controllare. Esegue un ciclo che funziona 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: nome dell'operazione per la prima attività in corso di analisi. In questo esempio viene eseguita la ricerca di attività di creazione di app Power BI.
  • $Activity2: secondo nome dell'operazione. In questo esempio viene eseguita la ricerca di attività di aggiornamento dell'app Power BI.
  • $Activity3: il terzo nome dell'operazione. In questo esempio viene eseguita la ricerca di attività di installazione dell'app Power BI.

È possibile recuperare gli eventi di attività solo per un'attività alla volta. Quindi, lo script cerca ogni 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 API. La limitazione può verificarsi quando si supera il numero di richieste che è possibile effettuare in un determinato periodo di tempo. L'operazione Get Activity Events è 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 eseguire query, trasformare, filtrare o formattare i dati separatamente.

Lo script mostra i risultati per il giorno corrente.

Nota

Per recuperare i risultati solo per il giorno precedente, evitando risultati parziali del giorno, vedere l'esempio Export all activities for previous N days (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 di esempio 4

Ecco una risposta JSON di esempio. 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 viene modificato un solo gruppo di destinatari, nei dati OrgAppPermission verrà visualizzato un solo gruppo di destinatari. Per questo motivo, basarsi sull'evento UpdateApp per tenere traccia di tutte le autorizzazioni dell'app è incompleto perché il log attività mostra solo le modifiche apportate.

Per uno snapshot di tutte le autorizzazioni dell'app Power BI, usare invece l'operazione Get App Users (Ottieni utenti app) come Amministrazione'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"
  }
]

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. Filtra quindi i risultati in modo che sia possibile concentrarsi sull'analisi delle attività da un'area di lavoro.

Richiesta di esempio 5

Lo script dichiara due variabili:

  • $ActivityDate: data di interesse. 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 $Results variabile . Converte quindi i dati JSON in un oggetto in modo che i risultati possano essere analizzati. Filtra quindi 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 all'output nella schermata.

Non esiste un parametro per il cmdlet Get-PowerBIActivityEvent che consente 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ò essere molto inefficiente. Tenere presente che l'operazione Get Activity Events è limitata a 200 richieste all'ora.

Per evitare la limitazione delle RICHIESTE (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 in corso, è consigliabile estrarre tutti i dati una volta al giorno e quindi eseguirne 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 di esempio 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 all'uso solo dell'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 RequestId specifico 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 in modo che sia possibile 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. Esporta i dati in un file JSON al 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 si archiviano i dati del log attività, è consigliabile classificare in ordine di priorità questa operazione.

Richiesta di esempio 6

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

  • $NbrDaysDaysToExtract: quanti giorni si è interessati all'esportazione. Esegue un ciclo, lavorando 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 esistere prima di eseguire lo script. Non includere un carattere barra rovesciata (\) alla fine del percorso della cartella (perché viene aggiunto automaticamente in fase di esecuzione). È consigliabile usare una cartella separata 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. Anche se la struttura di cartelle in cui è archiviata è utile, ogni nome di file deve essere completamente autodescritto.

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

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 estrae più volte lo stesso giorno di dati, 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

Esistono diversi vantaggi per l'uso del cmdlet PowerShell Get-PowerBIActivityEvent anziché dell'api REST Get Activity Events .

  • Il cmdlet consente di richiedere un giorno di attività ogni volta che si effettua una chiamata usando il cmdlet . Mentre quando si comunica direttamente con l'API, è possibile richiedere solo un'ora per 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 sono presenti altri risultati da ottenere. Alcune API devono 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 set successivo 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 in modo da poter consolidare un set logico di risultati. Per un esempio di uso di un token di continuazione, vedere API REST eventi attività.
  • Il cmdlet gestisce automaticamente le scadenze dei token di accesso di Microsoft Entra ID (noto in precedenza come Azure Active Directory). Dopo l'autenticazione, il token di accesso scade 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 di esempio viene omessa perché è un output simile alle risposte mostrate negli esempi precedenti.

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