Zugreifen auf das Power BI-Aktivitätsprotokoll

Dieser Artikel richtet sich an Power BI-Administratoren, die auf Daten zugreifen müssen, die aus dem Power BI-Aktivitätsprotokoll stammen, um diese zu analysieren. Der Schwerpunkt liegt dabei auf dem programmgesteuerten Abrufen von Power BI-Aktivitäten mithilfe des Cmdlets Get-PowerBIActivityEvent aus dem Power BI-Verwaltungsmodul. Bis zu 30 Tage Versionsgeschichte sind verfügbar. Dieses Cmdlet verwendet den Vorgang Aktivitätsereignisse abrufen der Power BI-REST-API, bei der es sich um eine Administrator-API handelt. PowerShell-Cmdlets fügen eine Abstraktionsebene über zugrunde liegenden APIs hinzu. Daher vereinfacht das PowerShell-Cmdlet den Zugriff auf das Power BI-Aktivitätsprotokoll.

Es gibt andere manuelle und programmgesteuerte Möglichkeiten zum Abrufen von Power BI-Aktivitäten. Weitere Informationen finden Sie unter Zugreifen auf Benutzeraktivitätsdaten.

Die Analyse des Power BI-Aktivitätsprotokolls ist von entscheidender Bedeutung für Governance, Compliance und zur Nachverfolgung der Einführungsbemühungen . Weitere Informationen zum Power BI-Aktivitätsprotokoll finden Sie unter Nachverfolgen von Benutzeraktivitäten in Power BI.

Tipp

Es wird empfohlen, den Artikel Überwachung auf Mandantenebene vollständig zu lesen. In diesem Artikel werden die Planung, wichtige Entscheidungen, Voraussetzungen und Schlüsselaktivitäten zur Lösungsentwicklung behandelt, die beim Erstellen einer End-to-End-Überwachungslösung zu berücksichtigen sind.

Verfügbare Beispiele

Das Ziel dieses Artikels besteht darin, Ihnen Beispiele für die ersten Schritte bereitzustellen. Die Beispiele umfassen Skripts, die Daten aus dem Aktivitätsprotokoll mithilfe des Verwaltungs-PowerShell-Moduls von Power BI abrufen.

Warnung

Die Skripts sind nicht produktionsbereit, da sie nur für Schulungszwecke vorgesehen sind. Sie können die Skripts jedoch für Produktionszwecke anpassen, indem Sie Logik für Protokollierung, Fehlerbehandlung, Warnungen und Refactoring für die Wiederverwendung und Modularisierung von Code hinzufügen.

Da sie für Lernzwecke konzipiert sind, sind die Beispiele einfach, aber realitätsnah. Es wird empfohlen, sich alle Beispiele anzusehen, um zu verstehen, wie sie die leicht unterschiedlichen Techniken anwenden. Nachdem Sie den Typ der benötigten Aktivitätsdaten identifiziert haben, können Sie die Techniken kombinieren und abgleichen, um ein Skript zu erstellen, das Ihren Anforderungen am besten entspricht.

Dieser Artikel enthält die folgenden Beispiele.

Beispielname Typ der Aktivitätsdaten
Authentifizieren mit dem Power BI-Dienst
Anzeigen aller Aktivitäten für einen Benutzer für einen Tag All
Anzeigen einer Aktivität für N Tage Freigeben eines Berichts (Link oder direkter Zugriff)
Anzeigen von drei Aktivitäten für N Tage Erstellen einer App, Aktualisieren einer App und Installieren einer App
Anzeigen aller Aktivitäten für einen Arbeitsbereich für einen Tag All
Exportieren aller Aktivitäten für die vorherigen N Tage All

Der Einfachheit halber geben die meisten Beispiele ihr Ergebnis auf dem Bildschirm aus. Beispielsweise werden die Daten in Visual Studio Code im Terminalbereich ausgegeben, der einen Puffersatz von Daten im Arbeitsspeicher enthält.

Die meisten Beispiele rufen JSON-Rohdaten ab. Das Arbeiten mit den JSON-Rohdaten hat viele Vorteile.

  • Alle Informationen, die für jedes Aktivitätsereignis verfügbar sind, werden zurückgegeben. Dies ist hilfreich für Sie, um zu erfahren, welche Daten verfügbar sind. Beachten Sie, dass sich der Inhalt einer API-Antwort abhängig vom tatsächlichen Aktivitätsereignis unterscheidet. Beispielsweise unterscheiden sich die für ein Ereignis des Typs CreateApp verfügbaren Daten vom Ereignis ViewReport.
  • Da sich Daten, die im Aktivitätsprotokoll verfügbar sind, im Laufe der Zeit in Power BI verändern, sollten Sie erwarten, dass sich auch die API-Antworten ändern. Auf diese Weise werden neu hinzukommende Daten nicht übersehen. Ihr Prozess ist außerdem widerstandsfähiger gegenüber Veränderungen und weniger anfällig für Fehler.
  • Die Details einer API-Antwort können sich für die kommerzielle Power BI-Cloud und die nationalen/regionalen Clouds unterscheiden.
  • Wenn verschiedene Teammitglieder (z. B. Datentechniker) an diesem Prozess beteiligt sind, erleichtert die Vereinfachung des anfänglichen Prozesses zur Datenextraktion die Zusammenarbeit mehrerer Teams.

Tipp

Es wird empfohlen, die Skripts, die Daten extrahieren, so einfach wie möglich zu halten. Vermeiden Sie daher das Analysieren, Filtern oder Formatieren der Daten des Aktivitätsprotokolls, während sie extrahiert werden. Bei diesem Ansatz wird eine ELT-Methodik verwendet, die separate Schritte zum Extrahieren, Laden und Transformieren von Daten aufweist. Dieser Artikel konzentriert sich nur auf den ersten Schritt, bei dem es um das Extrahieren der Daten geht.

Anforderungen

Die folgenden Anforderungen müssen erfüllt sein, um die Beispielskripts verwenden zu können.

  • PowerShell-Clienttool: Verwenden Sie Ihr bevorzugtes Tool zum Ausführen von PowerShell-Befehlen. Alle Beispiele wurden mithilfe der PowerShell-Erweiterung für Visual Studio Code mit PowerShell 7 getestet. Informationen zu Clienttools und PowerShell-Versionen finden Sie unter Überwachung auf Mandantenebene.
  • Power BI-Verwaltungsmodul: Installieren Sie alle Power BI PowerShell-Module. Wenn Sie sie zuvor installiert haben, wird empfohlen, die Module zu aktualisieren, um sicherzustellen, dass Sie die neueste veröffentlichte Version verwenden.
  • Fabric-Administratorrolle: Die Beispielskripts sind für die Verwendung eines interaktiven Authentifizierungsflows konzipiert. Daher muss sich der Benutzer, der die PowerShell-Beispielskripts ausführt, anmelden, um die Power BI-REST-APIs zu verwenden. Um Daten des Aktivitätsprotokolls abzurufen, muss der sich authentifizierende Benutzer der Rolle Power BI-Administrator angehören (weil das Abrufen von Aktivitätsereignissen mit einer Administrator-API erfolgt). Dienstprinzipalauthentifizierung ist nicht Gegenstand dieser Lernbeispiele.

Der Rest dieses Artikels enthält Beispielskripts, die Ihnen verschiedene Möglichkeiten zum Abrufen von Aktivitätsprotokolldaten zeigen.

Beispiel 1: Authentifizieren mit dem Power BI-Dienst

Für alle Power BI-REST-API-Vorgänge müssen Sie sich anmelden. Authentifizierung (wer nimmt die Anforderung vor) und Autorisierung (für welche Aktionen der Benutzer über Berechtigungen verfügt) werden von Microsoft Identity Platform verwaltet. Im folgenden Beispiel wird das Cmdlet Connect-PowerBIServiceAccount aus dem Power BI-Verwaltungsmodul verwendet. Dieses Cmdlet unterstützt eine einfache Methode für die Anmeldung.

Beispielanforderung 1

Das erste Skript leitet Sie an einen Browser um, um den Anmeldevorgang abzuschließen. Benutzerkonten, für die Multi-Faktor-Authentifizierung (MFA) aktiviert ist, können diesen interaktiven Authentifizierungsflow für die Anmeldung verwenden.

Connect-PowerBIServiceAccount

Wichtig

Benutzer ohne Power BI-Administratorrechte können keines der in diesem Artikel aufgeführten Beispielskripts ausführen. Power BI-Administratoren verfügen über die Berechtigung, den Power BI-Dienst zu verwalten und mandantenweite Metadaten (z. B. Aktivitätsprotokolldaten) abzurufen. Auch wenn die Verwendung von Dienstprinzipalauthentifizierung den Rahmen dieser Beispiele sprengt, wird dringend empfohlen, einen Dienstprinzipal für produktionsbereite, unbeaufsichtigte Skripts einzurichten, die gemäß einem Zeitplan ausgeführt werden.

Stellen Sie sicher, dass Sie sich anmelden, bevor Sie eines der folgenden Skripts ausführen.

Beispiel 2: Anzeigen aller Aktivitäten für einen Benutzer für einen Tag

Manchmal müssen Sie alle Aktivitäten überprüfen, die ein bestimmter Benutzer an einem bestimmten Tag ausgeführt hat.

Tipp

Beim Extrahieren von Daten aus dem Aktivitätsprotokoll mithilfe des PowerShell-Cmdlets kann jede Anforderung Daten für einen Tag (maximal 24 Stunden) extrahieren. Ziel dieses Beispiels ist es daher, zunächst nur einen Benutzer einen Tag lang zu überprüfen. Es gibt weitere Beispiele weiter unten in diesem Artikel, die ihnen zeigen, wie Sie eine Schleife verwenden, um Daten für mehrere Tage zu exportieren.

Beispielanforderung 2

Dieses Skript deklariert zwei PowerShell-Variablen, um die Wiederverwendung des Skripts zu vereinfachen:

  • $UserEmailAddr: Die E-Mail-Adresse für den Benutzer, an dem Sie interessiert sind.
  • $ActivityDate: Das Datum, an dem Sie interessiert sind. Das Format lautet JJJJ-MM-TT (ISO 8601-Format). Sie können kein früheres Datum als 30 Tage vor dem aktuellen Datum anfordern.
#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

Hinweis

Möglicherweise bemerken Sie ein Graviszeichen (`) am Ende einiger Zeilen in den PowerShell-Skripts. In PowerShell können Sie das Graviszeichen beispielsweise als Zeilenfortsetzungszeichen verwenden. Wir haben sie verwendet, um die Lesbarkeit der Skripts in diesem Artikel zu verbessern.

Tipp

Im Skript korreliert jede der PowerShell-Variablen mit einem erforderlichen oder optionalen Parameterwert im Cmdlet Get-PowerBIActivityEvent. Beispielsweise wird der Wert, den Sie der $UserEmailAddr-Variablen zuweisen, an den -User-Parameter übergeben. Das Deklarieren von PowerShell-Variablen auf diese Weise ist ein einfacher Ansatz, um das Hartcodieren von Werten zu vermeiden, die sich in Ihrem Skript ändern könnten. Das ist eine gute Angewohnheit, die sich als nützlich erweisen wird, wenn Ihre Skripts komplexer werden. PowerShell-Parameter sind robuster als Variablen, aber sie sprengen den Rahmen dieses Artikels.

Beispielantwort 2

Hier sehen Sie eine JSON-Beispielantwort. Sie umfasst zwei Aktivitäten, die der Benutzer ausgeführt hat:

  • Die erste Aktivität zeigt, dass ein Benutzer einen Bericht angezeigt hat.
  • Die zweite Aktivität zeigt, dass ein Administrator Daten aus dem Power BI-Aktivitätsprotokoll exportiert hat.
[
  {
    "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"
  }
]

Tipp

Das Extrahieren der Power BI-Aktivitätsprotokolldaten ist ebenfalls ein protokollierter Vorgang, wie in der vorherigen Antwort gezeigt. Wenn Sie Benutzeraktivitäten analysieren, möchten Sie vielleicht die Aktivitäten von Administratoren auslassen oder separat analysieren.

Beispiel 3: Anzeigen einer Aktivität für N Tage

Manchmal möchten Sie eine bestimmte Art von Aktivität für eine Reihe von Tagen untersuchen. In diesem Beispiel wird gezeigt, wie Sie Freigabeaktivitäten für Berichte pro Element abrufen. Es verwendet eine Schleife, um Aktivitäten aus den letzten sieben Tagen abzurufen.

Beispielanforderung 3

Das Skript deklariert zwei Variablen:

  • $ActivityType: Der Vorgangsname für die Aktivität, die Sie untersuchen.
  • $NbrOfDaysToCheck: Wie viele Tage Sie überprüfen möchten. Es wird eine Schleife ausgeführt, die vom aktuellen Tag an rückwärts arbeitet. Der maximal zulässige Wert beträgt 30 Tage (weil das früheste Datum, das Sie abrufen können, 30 Tage vor dem aktuellen Tag liegt).
#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 
}

Tipp

Sie können diese Schleifentechnik verwenden, um alle im Aktivitätsprotokoll aufgezeichneten Vorgänge zu überprüfen.

Beispielantwort 3

Hier sehen Sie eine JSON-Beispielantwort. Sie umfasst zwei Aktivitäten, die der Benutzer ausgeführt hat:

  • Die erste Aktivität zeigt, dass ein Freigabelink für einen Benutzer erstellt wurde. Beachten Sie, dass sich der SharingAction-Wert abhängig davon unterscheidet, ob der Benutzer einen Link erstellt, einen Link bearbeitet oder einen Link gelöscht hat. Aus Gründen der Kürze wird in der Antwort nur eine Art von Freigabelinkaktivität gezeigt.
  • Die zweite Aktivität zeigt, dass direkte Zugriffsfreigabe für eine Gruppe erstellt wurde. Beachten Sie, dass sich der SharingInformation-Wert abhängig von der ausgeführten Aktion unterscheidet. Aus Gründen der Kürze wird in der Antwort nur eine Art von direkter Zugriffsfreigabe gezeigt.
[
  {
    "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"
  }
]

Hinweis

Diese JSON-Antwort zeigt, dass sich die Datenstruktur je nach Ereignistyp unterscheidet. Auch derselbe Ereignistyp kann unterschiedliche Merkmale aufweisen, die zu einer etwas anderen Ausgabe führen. Wie bereits weiter oben in diesem Artikel empfohlen, sollten Sie es sich zur Gewohnheit machen, die Rohdaten abzurufen.

Beispiel 4: Anzeigen von drei Aktivitäten für N Tage

Manchmal möchten Sie möglicherweise mehrere verwandte Aktivitäten untersuchen. In diesem Beispiel wird gezeigt, wie Sie drei bestimmte Aktivitäten für die letzten sieben Tage abrufen. Es konzentriert sich auf Aktivitäten im Zusammenhang mit Power BI-Apps, einschließlich dem Erstellen einer App, dem Aktualisieren einer App und dem Installieren einer App.

Beispielanforderung 4

Das Skript deklariert die folgenden Variablen:

  • $NbrOfDaysToCheck: Wie viele Tage Sie überprüfen möchten. Es wird eine Schleife ausgeführt, die vom aktuellen Tag an rückwärts arbeitet. Der maximal zulässige Wert beträgt 30 Tage (weil das früheste Datum, das Sie abrufen können, 30 Tage vor dem aktuellen Tag liegt).
  • $Activity1: Der Vorgangsname für die erste Aktivität, die Sie untersuchen. In diesem Beispiel wird nach Power BI-App-Erstellungsaktivitäten gesucht.
  • $Activity2: Der zweite Vorgangsname. In diesem Beispiel wird nach Power BI-App-Aktualisierungsaktivitäten gesucht.
  • $Activity3: Der dritte Vorgangsname. In diesem Beispiel wird nach Power BI-App-Installationsaktivitäten gesucht.

Sie können nur Aktivitätsereignisse für jeweils eine Aktivität gleichzeitig abrufen. Daher sucht das Skript separat nach jedem Vorgang. Es kombiniert die Suchergebnisse in einer Variablen mit dem Namen $FullResults, die dann auf dem Bildschirm ausgegeben wird.

Achtung

Wenn Sie viele Schleifen mehrmals ausführen, erhöht sich die Wahrscheinlichkeit einer API-Drosselung erheblich. Drosselung kann auftreten, wenn Sie die Anzahl der Anforderungen überschreiten, die Sie in einem bestimmten Zeitraum vornehmen dürfen. Der Vorgang Aktivitätsereignisse abrufen ist auf 200 Anforderungen pro Stunde beschränkt. Achten Sie beim Entwerfen Ihrer Skripts darauf, dass Sie die ursprünglichen Daten nicht häufiger abrufen, als Sie sie benötigen. Im Allgemeinen empfiehlt es sich, alle Rohdaten ein Mal pro Tag zu extrahieren und diese Daten dann separat abzufragen, zu transformieren, zu filtern oder zu formatieren.

Das Skript zeigt die Ergebnisse für den aktuellen Tag an.

Hinweis

Informationen zum Abrufen von Ergebnissen nur für den vorherigen Tag (Vermeiden von Teilergebnissen für Tage) finden Sie im Beispiel Exportieren aller Aktivitäten für die vorherigen N Tage.

#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

Beispielantwort 4

Hier sehen Sie eine JSON-Beispielantwort. Sie umfasst zwei Aktivitäten, die der Benutzer ausgeführt hat:

  • Die erste Aktivität zeigt, dass eine Power BI-App erstellt wurde.
  • Die zweite Aktivität zeigt, dass eine Power BI-App aktualisiert wurde.
  • Die dritte Aktivität zeigt, dass eine Power BI-App von einem Benutzer installiert wurde.

Warnung

Die Antwort enthält nur die Benutzerberechtigungen, die geändert wurden. Es ist beispielsweise möglich, dass in einem CreateApp-Ereignis drei Zielgruppen erstellt wurden. Wenn sich im UpdateApp-Ereignis nur eine Zielgruppe geändert hat, wird nur eine Zielgruppe in den OrgAppPermission-Daten angezeigt. Aus diesem Grund ist die Verwendung des UpdateApp-Ereignisses zum Nachverfolgen aller App-Berechtigungen unvollständig, weil das Aktivitätsprotokoll nur anzeigt, was sich geändert hat.

Verwenden Sie für eine Momentaufnahme aller Power BI-App-Berechtigungen stattdessen den API-Vorgang App-Benutzer als Administrator abrufen.

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

Beispiel 5: Anzeigen aller Aktivitäten für einen Arbeitsbereich für einen Tag

Manchmal möchten Sie Aktivitäten im Zusammenhang mit einem bestimmten Arbeitsbereich untersuchen. In diesem Beispiel werden alle Aktivitäten für alle Benutzer für einen Tag abgerufen. Anschließend werden die Ergebnisse gefiltert, damit Sie sich auf die Analyse von Aktivitäten in einem Arbeitsbereich konzentrieren können.

Beispielanforderung 5

Das Skript deklariert zwei Variablen:

  • $ActivityDate: Das Datum, an dem Sie interessiert sind. Das Format lautet JJJJ-MM-TT. Sie können kein früheres Datum als 30 Tage vor dem aktuellen Datum anfordern.
  • $WorkspaceNameDer Name des Arbeitsbereichs, der Sie interessiert.

Das Skript speichert die Ergebnisse in der $Results-Variablen. Anschließend werden die JSON-Daten in ein Objekt konvertiert, damit die Ergebnisse analysiert werden können. Anschließend werden die Ergebnisse gefiltert, um fünf spezifische Spalten abzurufen. Die CreationTime-Daten werden in ActivityDateTime umbenannt. Die Ergebnisse werden nach dem Arbeitsbereichsnamen gefiltert und dann auf dem Bildschirm ausgegeben.

Es gibt keinen Parameter für das Cmdlet Get-PowerBIActivityEvent, mit dem Sie beim Überprüfen des Aktivitätsprotokolls einen Arbeitsbereich angeben können (in früheren Beispielen in diesem Artikel wurden PowerShell-Parameter verwendet, um einen bestimmten Benutzer-, Datums- oder Aktivitätsnamen festzulegen). In diesem Beispiel ruft das Skript alle Daten ab und analysiert dann die JSON-Antwort, um die Ergebnisse für einen bestimmten Arbeitsbereich zu filtern.

Achtung

In einem großen Unternehmen mit Hunderten oder Tausenden von Aktivitäten pro Tag kann es sehr ineffizient sein, die Ergebnisse zu filtern, nachdem sie abgerufen wurden. Denken Sie daran, dass der Vorgang Aktivitätsereignisse abrufen auf 200 Anforderungen pro Stunde beschränkt ist.

Um API-Drosselung zu vermeiden (wenn Sie die Anzahl der Anforderungen überschreiten, die Sie in einem bestimmten Zeitraum ausgeben dürfen), rufen Sie die ursprünglichen Daten nicht häufiger ab, als sie benötigt werden. Sie können weiterhin mit den gefilterten Ergebnissen arbeiten, ohne das Skript auszuführen, um die Ergebnisse erneut abzurufen. Für den laufenden Bedarf ist es besser, alle Daten ein Mal pro Tag zu extrahieren und sie dann viele Male abzufragen.

#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

Beispielantwort 5

Dies sind die gefilterten Ergebnisse, die eine kleine Teilmenge von Eigenschaften enthalten. Das Format ist für gelegentliche Analysen leichter lesbar. Wenn Sie die Ergebnisse speichern möchten, empfiehlt es sich jedoch, die Daten wieder in das JSON-Format zu konvertieren.

Hinweis

Nach dem Konvertieren der JSON-Ergebnisse in ein PowerShell-Objekt werden Zeitwerte in die Ortszeit konvertiert. Die ursprünglichen Überwachungsdaten werden immer in UTC-Zeit (Coordinated Universal Time) aufgezeichnet. Daher wird empfohlen, sich an die ausschließliche Verwendung von UTC-Zeit zu gewöhnen.

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

Tipp

Sie können diese Technik verwenden, um Ergebnisse nach einer beliebigen Eigenschaft in den Ergebnissen zu filtern. Sie können beispielsweise ein bestimmtes RequestId-Ereignis verwenden, um nur ein bestimmtes Ereignis zu analysieren.

Beispiel 6: Exportieren aller Aktivitäten für die vorherigen N Tage

Manchmal möchten Sie möglicherweise alle Aktivitätsdaten in eine Datei exportieren, damit Sie mit den Daten außerhalb von PowerShell arbeiten können. In diesem Beispiel werden alle Aktivitäten für alle Benutzer für bis zu 30 Tage abgerufen. Die Daten werden in eine JSON-Datei pro Tag exportiert.

Wichtig

Aktivitätsprotokolldaten sind maximal 30 Tage lang verfügbar. Es ist wichtig, dass Sie die Daten exportieren und aufbewahren, damit Sie verlaufsbezogene Analysen durchführen können. Wenn Sie die Aktivitätsprotokolldaten derzeit nicht exportieren und speichern, wird dringend empfohlen, diese Vorgehensweise zu priorisieren.

Beispielanforderung 6

Das Skript ruft alle Aktivitäten für eine Reihe von Tagen ab. Es deklariert drei Variablen:

  • $NbrDaysDaysToExtract: Wie viele Tage Sie exportieren möchten. Es wird eine Schleife ausgeführt, die vom vorherigen Tag an rückwärts arbeitet. Der maximal zulässige Wert beträgt 30 Tage (weil das früheste Datum, das Sie abrufen können, 30 Tage vor dem aktuellen Tag liegt).
  • $ExportFileLocation: Der Ordnerpfad, in dem Sie die Dateien speichern möchten. Der Ordner muss vor dem Ausführen des Skripts vorhanden sein. Fügen Sie keinen umgekehrten Schrägstrich (\) am Ende des Ordnerpfads hinzu (weil er zur Laufzeit automatisch hinzugefügt wird). Es wird empfohlen, einen separaten Ordner zum Speichern von Rohdatendateien zu verwenden.
  • $ExportFileName: Das Präfix für jeden Dateinamen. Da eine Datei pro Tag gespeichert wird, fügt das Skript ein Suffix hinzu, um die in der Datei enthaltenen Daten sowie das Datum und die Uhrzeit des Abrufs der Daten anzugeben. Wenn Sie beispielsweise am 25. April 2023 um 9 Uhr (UTC) ein Skript ausgeführt haben, um Aktivitätsdaten für den 23. April 2023 zu extrahieren, lautet der Dateiname „PBIActivityEvents-20230423-202304250900“. Obwohl die Ordnerstruktur, in der die Datei gespeichert wird, hilfreich ist, sollte jeder Dateiname vollständig selbstbeschreibend sein.

Es wird empfohlen, Daten zu extrahieren, die mindestens einen Tag vor dem aktuellen Tag liegen. Auf diese Weise vermeiden Sie das Abrufen von Teilereignissen für den Tag, und Sie können sicher sein, dass jede Exportdatei die vollständigen Daten für 24 Stunden enthält.

Das Skript erfasst Daten für bis zu 30 Tage bis zum vorherigen Tag. Zeitstempel für überwachte Ereignisse liegen immer in UTC vor. Es wird empfohlen, dass Sie alle Ihre Überwachungsprozesse basierend auf UTC-Zeit und nicht auf Ortszeit erstellen.

Das Skript generiert eine JSON-Datei pro Tag. Das Suffix des Dateinamens enthält den Zeitstempel (im UTC-Format) der extrahierten Daten. Wenn Sie Daten mehrmals am selben Tag extrahieren, hilft Ihnen das Suffix im Dateinamen dabei, die neuere Datei zu identifizieren.

#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

Die Verwendung des PowerShell-Cmdlets Get-PowerBIActivityEvent anstelle des REST-API-Vorgangs Aktivitätsereignisse abrufen hat mehrere Vorteile.

  • Mit dem Cmdlet können Sie bei jedem Aufruf einen Tag an Aktivitäten anfordern. Wenn Sie direkt mit der API kommunizieren, können Sie dagegen nur eine Stunde pro API-Anforderung anfordern.
  • Das Cmdlet verarbeitet Fortsetzungstoken für Sie. Wenn Sie die API direkt verwenden, müssen Sie das Fortsetzungstoken überprüfen, um festzustellen, ob weitere Ergebnisse zu erwarten sind. Einige APIs müssen aus Leistungsgründen Paginierungs- und Fortsetzungstoken verwenden, wenn sie eine große Datenmenge zurückgeben. Sie geben den ersten Satz von Datensätzen zurück. Mit einem Fortsetzungstoken können Sie dann einen weiteren API-Aufruf vornehmen, um den nächsten Satz von Datensätzen abzurufen. Sie setzen die API-Aufruf fort, bis kein weiteres Fortsetzungstoken zurückgegeben wird. Die Verwendung des Fortsetzungstokens ist eine Möglichkeit, mehrere API-Anforderungen zu konsolidieren, damit Sie einen logischen Satz von Ergebnissen konsolidieren können. Ein Beispiel für die Verwendung eines Fortsetzungstokens finden Sie unter Aktivitätsereignisse-REST-API.
  • Das Cmdlet verwaltet für Sie den Ablauf von Zugriffstoken für Microsoft Entra ID (ehemals Azure Active Directory). Nachdem Sie sich authentifiziert haben, läuft Ihr Zugriffstoken standardmäßig nach einer Stunde ab. In diesem Fall fordert das Cmdlet automatisch ein Aktualisierungstoken für Sie an. Wenn Sie direkt mit der API kommunizieren, müssen Sie ein Aktualisierungstoken anfordern.

Weitere Informationen finden Sie unter Auswählen von APIs oder PowerShell-Cmdlets.

Hinweis

Eine Beispielantwort wird weggelassen, weil es sich um eine Ausgabe handelt, die den in den vorherigen Beispielen gezeigten Antworten ähnelt.

Weitere Informationen zu diesem Artikel finden Sie in den folgenden Ressourcen: