Udostępnij za pośrednictwem


Uzyskiwanie dostępu do dziennika aktywności usługi Power BI

Ten artykuł dotyczy administratorów usługi Power BI, którzy muszą uzyskiwać dostęp do danych źródłowych i analizować je z dziennika aktywności usługi Power BI. Koncentruje się on na programowym pobieraniu działań usługi Power BI przy użyciu polecenia cmdlet Get-PowerBIActivityEvent z modułu Zarządzania usługi Power BI. Dostępna jest historia do 30 dni. To polecenie cmdlet używa operacji interfejsu API REST Get Activity Events usługi Power BI, która jest interfejsem API administratora. Polecenia cmdlet programu PowerShell dodają warstwę abstrakcji na podstawie podstawowych interfejsów API. W związku z tym polecenie cmdlet programu PowerShell upraszcza dostęp do dziennika aktywności usługi Power BI.

Istnieją inne ręczne i programowe sposoby pobierania działań usługi Power BI. Aby uzyskać więcej informacji, zobacz Access user activity data (Uzyskiwanie dostępu do danych aktywności użytkownika).

Analizowanie dziennika aktywności usługi Power BI ma kluczowe znaczenie dla zapewnienia ładu, zgodności i śledzenia wysiłków związanych z wdrażaniem . Aby uzyskać więcej informacji na temat dziennika aktywności usługi Power BI, zobacz Śledzenie działań użytkowników w usłudze Power BI.

Napiwek

Zalecamy pełne zapoznanie się z artykułem Inspekcja na poziomie dzierżawy . W tym artykule opisano planowanie, kluczowe decyzje, wymagania wstępne i kluczowe działania związane z opracowywaniem rozwiązań, które należy wziąć pod uwagę podczas tworzenia kompleksowego rozwiązania do inspekcji.

Dostępne przykłady

Celem tego artykułu jest przedstawienie przykładów ułatwianych rozpoczęcie pracy. Przykłady obejmują skrypty pobierające dane z dziennika aktywności przy użyciu modułu Programu PowerShell zarządzania usługą Power BI.

Ostrzeżenie

Skrypty nie są gotowe do produkcji, ponieważ są przeznaczone tylko do celów edukacyjnych. Można jednak dostosować skrypty do celów produkcyjnych, dodając logikę rejestrowania, obsługi błędów, alertów i refaktoryzacji w celu ponownego użycia i modułyzacji kodu.

Ponieważ są one przeznaczone do nauki, przykłady są uproszczone, ale są prawdziwe. Zalecamy przejrzenie wszystkich przykładów, aby zrozumieć, jak stosują nieco różne techniki. Po zidentyfikowaniu typu potrzebnych danych aktywności możesz mieszać i dopasowywać techniki do tworzenia skryptu, który najlepiej odpowiada twoim wymaganiom.

Ten artykuł zawiera następujące przykłady.

Przykładowa nazwa Typ danych działań
Uwierzytelnianie przy użyciu usługa Power BI Nie dotyczy
Wyświetlanie wszystkich działań użytkownika przez jeden dzień wszystkie
Wyświetlanie działania dla N dni Udostępnianie raportu (link lub bezpośredni dostęp)
Wyświetlanie trzech działań dla N dni Tworzenie aplikacji, aktualizowanie aplikacji i instalowanie aplikacji
Wyświetlanie wszystkich działań dla obszaru roboczego przez jeden dzień wszystkie
Eksportuj wszystkie działania z poprzednich N dni wszystkie

Dla uproszczenia większość przykładów zwraca wynik do ekranu. Na przykład w programie Visual Studio Code dane są przesyłane do panelu terminalu, który przechowuje zestaw buforów danych w pamięci.

Większość przykładów pobiera nieprzetworzone dane JSON. Praca z nieprzetworzonymi danymi JSON ma wiele zalet.

  • Zwracane są wszystkie informacje dostępne dla każdego zdarzenia działania. Jest to przydatne, aby dowiedzieć się, jakie dane są dostępne. Należy pamiętać, że zawartość odpowiedzi interfejsu API różni się w zależności od rzeczywistego zdarzenia działania. Na przykład dane dostępne dla zdarzenia CreateApp różnią się od zdarzenia ViewReport .
  • Ponieważ dane dostępne w dzienniku aktywności zmieniają się wraz z upływem czasu w usłudze Power BI, możesz oczekiwać, że odpowiedzi interfejsu API również się zmienią. Dzięki temu nowe dane wprowadzone nie zostaną pominięte. Proces jest również bardziej odporny na zmiany i rzadziej ulega awarii.
  • Szczegóły odpowiedzi interfejsu API mogą się różnić w przypadku chmury komercyjnej usługi Power BI i chmur krajowych/regionalnych.
  • Jeśli masz różnych członków zespołu (takich jak inżynierowie danych), którzy biorą udział w tym procesie, upraszczanie procesu początkowego wyodrębniania danych ułatwia wielu zespołom współpracę.

Napiwek

Zalecamy, aby skrypty wyodrębniły dane tak proste, jak to możliwe. W związku z tym należy unikać analizowania, filtrowania lub formatowania danych dziennika aktywności podczas ich wyodrębniania. To podejście korzysta z metodologii ELT , która zawiera oddzielne kroki wyodrębniania, ładowania i przekształcania danych. Ten artykuł koncentruje się tylko na pierwszym kroku, który dotyczy wyodrębniania danych.

Wymagania

Aby użyć przykładowych skryptów, musisz spełnić następujące wymagania.

  • Narzędzie klienckie programu PowerShell: użyj preferowanego narzędzia do uruchamiania poleceń programu PowerShell. Wszystkie przykłady zostały przetestowane przy użyciu rozszerzenia programu PowerShell dla programu Visual Studio Code z programem PowerShell 7. Aby uzyskać informacje o narzędziach klienckich i wersjach programu PowerShell, zobacz Inspekcja na poziomie dzierżawy.
  • Moduł zarządzania usługi Power BI: zainstaluj wszystkie moduły programu PowerShell usługi Power BI. Jeśli zostały one wcześniej zainstalowane, zalecamy zaktualizowanie modułów, aby upewnić się, że używasz najnowszej opublikowanej wersji.
  • Rola administratora sieci szkieletowej: przykładowe skrypty są przeznaczone do korzystania z przepływu uwierzytelniania interakcyjnego. W związku z tym użytkownik, który uruchamia przykładowe skrypty programu PowerShell, musi zalogować się, aby korzystać z interfejsów API REST usługi Power BI. Aby pobrać dane dziennika aktywności, uwierzytelniający użytkownik musi należeć do roli administratora usługi Power BI (ponieważ pobieranie zdarzeń działań odbywa się za pomocą interfejsu API administratora). Uwierzytelnianie jednostki usługi jest poza zakresem tych przykładów szkoleniowych.

W pozostałej części tego artykułu znajdują się przykładowe skrypty pokazujące różne sposoby pobierania danych dziennika aktywności.

Przykład 1. Uwierzytelnianie przy użyciu usługa Power BI

Wszystkie operacje interfejsu API REST usługi Power BI wymagają zalogowania. Uwierzytelnianie (osoba wysyłająca żądanie) i autoryzacja (do czego użytkownik ma uprawnienia) są zarządzane przez Platforma tożsamości Microsoft. W poniższym przykładzie użyto polecenia cmdlet Połączenie-PowerBIServiceAccount z modułu zarządzania usługi Power BI. To polecenie cmdlet obsługuje prostą metodę logowania.

Przykładowe żądanie 1

Pierwszy skrypt przekierowuje Cię do przeglądarki, aby ukończyć proces logowania. Konta użytkowników z włączonym uwierzytelnianiem wieloskładnikowym (MFA) mogą logować się przy użyciu tego przepływu uwierzytelniania interakcyjnego.

Connect-PowerBIServiceAccount

Ważne

Użytkownicy bez uprawnień administratora usługi Power BI nie mogą uruchamiać żadnego z przykładowych skryptów, które są opisane w tym artykule. Administratorzy usługi Power BI mają uprawnienia do zarządzania usługa Power BI i pobierania metadanych dotyczących całej dzierżawy (takich jak dane dziennika aktywności). Mimo że używanie uwierzytelniania jednostki usługi jest poza zakresem tych przykładów, zdecydowanie zalecamy skonfigurowanie jednostki usługi dla skryptów gotowych do produkcji, nienadzorowanych, które będą uruchamiane zgodnie z harmonogramem.

Pamiętaj, aby zalogować się przed uruchomieniem dowolnego z poniższych skryptów.

Przykład 2. Wyświetlanie wszystkich działań użytkownika przez jeden dzień

Czasami należy sprawdzić wszystkie działania wykonywane przez określonego użytkownika w określonym dniu.

Napiwek

Podczas wyodrębniania danych z dziennika aktywności przy użyciu polecenia cmdlet programu PowerShell każde żądanie może wyodrębnić dane przez jeden dzień (maksymalnie 24 godziny). W związku z tym celem tego przykładu jest po prostu sprawdzenie jednego użytkownika przez jeden dzień. W dalszej części tego artykułu przedstawiono inne przykłady pokazujące, jak używać pętli do eksportowania danych przez wiele dni.

Przykładowe żądanie 2

Ten skrypt deklaruje dwie zmienne programu PowerShell, aby ułatwić ponowne użycie skryptu:

  • $UserEmailAddr: adres e-mail użytkownika, którego interesujesz.
  • $ActivityDate: data, w której cię interesuje. Format to RRRR-MM-DD (format ISO 8601). Nie można zażądać daty wcześniejszej niż 30 dni przed bieżącą datą.
#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

Uwaga

Możesz zauważyć znak backtick (') na końcu niektórych wierszy w skryptach programu PowerShell. W programie PowerShell jednym ze sposobów użycia znaku backtick jest znak kontynuacji wiersza. Użyliśmy go do poprawy czytelności skryptów w tym artykule.

Napiwek

W skryscie każda ze zmiennych programu PowerShell jest skorelowana z wymaganą lub opcjonalną wartością parametruw poleceniu cmdlet Get-PowerBIActivityEvent. Na przykład wartość przypisana do zmiennej $UserEmailAddr jest przekazywana do parametru -User . Deklarowanie zmiennych programu PowerShell w ten sposób jest lekkim podejściem, które pozwala uniknąć twardych wartości kodowania, które mogą ulec zmianie w skry skrycie. Jest to dobry nawyk do przyjęcia i będzie przydatny, ponieważ skrypty stają się bardziej złożone. Parametry programu PowerShell są bardziej niezawodne niż zmienne, ale nie należą do zakresu tego artykułu.

Przykładowa odpowiedź 2

Oto przykładowa odpowiedź JSON. Obejmuje on dwie działania wykonywane przez użytkownika:

  • Pierwsze działanie pokazuje, że użytkownik wyświetlił raport.
  • Drugie działanie pokazuje, że administrator wyeksportował dane z dziennika aktywności usługi 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"
  }
]

Napiwek

Wyodrębnianie danych dziennika aktywności usługi Power BI jest również rejestrowaną operacją, jak pokazano w poprzedniej odpowiedzi. Podczas analizowania działań użytkowników możesz pominąć działania administratora lub przeanalizować je oddzielnie.

Przykład 3. Wyświetlanie działania przez N dni

Czasami warto zbadać jeden konkretny typ działania dla serii dni. W tym przykładzie pokazano, jak pobierać działania udostępniania raportów dla poszczególnych elementów. Używa pętli do pobierania działań z poprzednich siedmiu dni.

Przykładowe żądanie 3

Skrypt deklaruje dwie zmienne:

  • $ActivityType: nazwa operacji dla badanego działania.
  • $NbrOfDaysToCheck: Ile dni chcesz sprawdzić. Wykonuje pętlę działającą wstecz od bieżącego dnia. Dozwolona wartość maksymalna to 30 dni (ponieważ najwcześniejsza data, którą można pobrać, to 30 dni przed bieżącym dniem).
#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 
}

Napiwek

Możesz użyć tej techniki pętli, aby sprawdzić dowolną operację zarejestrowaną w dzienniku aktywności.

Przykładowa odpowiedź 3

Oto przykładowa odpowiedź JSON. Obejmuje on dwie działania wykonywane przez użytkownika:

  • Pierwsze działanie pokazuje, że utworzono link udostępniania dla użytkownika. Należy pamiętać, że wartość SharingAction różni się w zależności od tego, czy użytkownik utworzył łącze, edytował link, czy usunął link. W przypadku zwięzłości w odpowiedzi jest wyświetlany tylko jeden typ działania linku udostępniania.
  • Drugie działanie pokazuje, że utworzono bezpośredni dostęp dla grupy. Należy pamiętać, że wartość SharingInformation różni się w zależności od podjętej akcji. W przypadku zwięzłości w odpowiedzi jest wyświetlany tylko jeden typ działania udostępniania bezpośredniego dostępu.
[
  {
    "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"
  }
]

Uwaga

Ta odpowiedź JSON pokazuje, że struktura danych różni się w zależności od typu zdarzenia. Nawet ten sam typ zdarzenia może mieć różne cechy, które generują nieco inne dane wyjściowe. Zgodnie z zaleceniami w tym artykule należy przyzwyczaić się do pobierania danych pierwotnych.

Przykład 4. Wyświetlanie trzech działań przez N dni

Czasami warto zbadać kilka powiązanych działań. W tym przykładzie pokazano, jak pobrać trzy konkretne działania z poprzednich siedmiu dni. Koncentruje się on na działaniach związanych z aplikacjami usługi Power BI, w tym na tworzeniu aplikacji, aktualizowaniu aplikacji i instalowaniu aplikacji.

Przykładowe żądanie 4

Skrypt deklaruje następujące zmienne:

  • $NbrOfDaysToCheck: Ile dni chcesz sprawdzić. Wykonuje pętlę, która działa wstecz od bieżącego dnia. Dozwolona wartość maksymalna to 30 dni (ponieważ najwcześniejsza data, którą można pobrać, to 30 dni przed bieżącym dniem).
  • $Activity1: nazwa operacji dla pierwszego badanego działania. W tym przykładzie wyszukuje działania tworzenia aplikacji usługi Power BI.
  • $Activity2: druga nazwa operacji. W tym przykładzie wyszukuje działania aktualizacji aplikacji usługi Power BI.
  • $Activity3: trzecia nazwa operacji. W tym przykładzie wyszukuje ona działania instalacji aplikacji usługi Power BI.

Zdarzenia działania można pobierać tylko dla jednego działania jednocześnie. Dlatego skrypt wyszukuje każdą operację oddzielnie. Łączy wyniki wyszukiwania w zmienną o nazwie $FullResults, która następnie zwraca dane wyjściowe do ekranu.

Uwaga

Uruchamianie wielu pętli wiele razy znacznie zwiększa prawdopodobieństwo ograniczania interfejsu API. Ograniczanie przepustowości może wystąpić, gdy przekroczysz liczbę żądań, które mogą być wykonywane w danym okresie. Operacja Pobierz zdarzenia działania jest ograniczona do 200 żądań na godzinę. Podczas projektowania skryptów należy zadbać o to, aby nie pobierać oryginalnych danych więcej razy niż potrzebujesz. Ogólnie rzecz biorąc, lepszym rozwiązaniem jest wyodrębnianie wszystkich nieprzetworzonych danych raz dziennie, a następnie wykonywanie zapytań, przekształcanie, filtrowanie lub formatowanie tych danych oddzielnie.

Skrypt pokazuje wyniki dla bieżącego dnia.

Uwaga

Aby pobrać wyniki tylko z poprzedniego dnia — unikanie wyników częściowych dni — zobacz przykład Eksportuj wszystkie działania dla poprzednich N dni ).

#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

Przykładowa odpowiedź 4

Oto przykładowa odpowiedź JSON. Obejmuje trzy działania wykonywane przez użytkownika:

  • Pierwsze działanie pokazuje, że utworzono aplikację usługi Power BI.
  • Drugie działanie pokazuje, że aplikacja Power BI została zaktualizowana.
  • Trzecie działanie pokazuje, że aplikacja Power BI została zainstalowana przez użytkownika.

Ostrzeżenie

Odpowiedź zawiera tylko uprawnienia użytkownika, które zostały zmodyfikowane. Można na przykład utworzyć trzy grupy odbiorców w zdarzeniu CreateApp . W zdarzeniu UpdateApp, jeśli tylko jedna grupa odbiorców uległa zmianie, tylko jedna grupa odbiorców będzie wyświetlana w danych OrgAppPermission. Z tego powodu poleganie na zdarzeniu UpdateApp do śledzenia wszystkich uprawnień aplikacji jest niekompletne, ponieważ dziennik aktywności pokazuje tylko zmiany.

Aby uzyskać migawkę wszystkich uprawnień aplikacji usługi Power BI, zamiast tego użyj operacji Pobierz użytkowników aplikacji jako Administracja interfejsu 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"
  }
]

Przykład 5. Wyświetlanie wszystkich działań dla obszaru roboczego przez jeden dzień

Czasami warto zbadać działania związane z określonym obszarem roboczym. Ten przykład pobiera wszystkie działania dla wszystkich użytkowników przez jeden dzień. Następnie filtruje wyniki, aby można było skoncentrować się na analizowaniu działań z jednego obszaru roboczego.

Przykładowe żądanie 5

Skrypt deklaruje dwie zmienne:

  • $ActivityDate: data, w której cię interesuje. Format to RRRR-MM-DD. Nie można zażądać daty wcześniejszej niż 30 dni przed bieżącą datą.
  • $WorkspaceName: nazwa interesującego Cię obszaru roboczego.

Skrypt przechowuje wyniki w zmiennej $Results . Następnie konwertuje dane JSON na obiekt, aby można było analizować wyniki. Następnie filtruje wyniki, aby pobrać pięć określonych kolumn. Nazwa danych CreationTime zostanie zmieniona na ActivityDateTime. Wyniki są filtrowane według nazwy obszaru roboczego, a następnie dane wyjściowe na ekranie.

Nie ma parametru dla polecenia cmdlet Get-PowerBIActivityEvent , które umożliwia określenie obszaru roboczego podczas sprawdzania dziennika aktywności (wcześniejsze przykłady w tym artykule używały parametrów programu PowerShell do ustawiania określonego użytkownika, daty lub nazwy działania). W tym przykładzie skrypt pobiera wszystkie dane, a następnie analizuje odpowiedź JSON w celu filtrowania wyników dla określonego obszaru roboczego.

Uwaga

Jeśli jesteś w dużej organizacji, która ma setki lub tysiące działań dziennie, filtrowanie wyników po ich pobraniu może być bardzo nieefektywne. Pamiętaj, że operacja Uzyskiwanie zdarzeń działania jest ograniczona do 200 żądań na godzinę.

Aby uniknąć ograniczania interfejsu API (po przekroczeniu liczby żądań, które mogą być wysyłane w danym okresie), nie pobieraj oryginalnych danych więcej niż musisz. Możesz kontynuować pracę z filtrowanych wyników bez uruchamiania skryptu w celu ponownego pobrania wyników. W przypadku bieżących potrzeb lepszym rozwiązaniem jest wyodrębnianie wszystkich danych raz dziennie, a następnie wykonywanie zapytań o nie wiele razy.

#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

Przykładowa odpowiedź 5

Oto przefiltrowane wyniki, które zawierają niewielki podzbiór właściwości. Format jest łatwiejszy do odczytania w przypadku okazjonalnych analiz. Zalecamy jednak przekonwertowanie go z powrotem na format JSON, jeśli planujesz przechowywać wyniki.

Uwaga

Po przekonwertowaniu wyników JSON na obiekt programu PowerShell wartości czasu są konwertowane na czas lokalny. Oryginalne dane inspekcji są zawsze rejestrowane w czasie uniwersalnym koordynowanym (UTC), dlatego zalecamy, aby przyzwyczaić się do korzystania tylko z czasu 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

Napiwek

Ta technika umożliwia filtrowanie wyników według dowolnej właściwości w wynikach. Na przykład można użyć określonego zdarzenia RequestId do przeanalizowania tylko jednego konkretnego zdarzenia.

Przykład 6. Eksportowanie wszystkich działań z poprzednich N dni

Czasami możesz wyeksportować wszystkie dane aktywności do pliku, aby móc pracować z danymi poza programem PowerShell. Ten przykład pobiera wszystkie działania dla wszystkich użytkowników przez maksymalnie 30 dni. Eksportuje dane do jednego pliku JSON dziennie.

Ważne

Dane dziennika aktywności są dostępne przez maksymalnie 30 dni. Ważne jest, aby eksportować i przechowywać dane, aby można było przeprowadzić analizę historyczną. Jeśli obecnie nie eksportujesz i nie przechowujesz danych dziennika aktywności, zdecydowanie zalecamy ustalenie priorytetów.

Przykładowe żądanie 6

Skrypt pobiera wszystkie działania z serii dni. Deklaruje trzy zmienne:

  • $NbrDaysDaysToExtract: Ile dni interesuje Cię eksportowanie. Wykonuje pętlę, pracując wstecz od poprzedniego dnia. Dozwolona wartość maksymalna to 30 dni (ponieważ najwcześniejsza data, którą można pobrać, to 30 dni przed bieżącym dniem).
  • $ExportFileLocation: ścieżka folderu, w którym chcesz zapisać pliki. Folder musi istnieć przed uruchomieniem skryptu. Nie dołączaj znaku ukośnika odwrotnego (\) na końcu ścieżki folderu (ponieważ jest on automatycznie dodawany w czasie wykonywania). Zalecamy używanie oddzielnego folderu do przechowywania nieprzetworzonych plików danych.
  • $ExportFileName: prefiks dla każdej nazwy pliku. Ponieważ jeden plik dziennie jest zapisywany, skrypt dodaje sufiks wskazujący dane zawarte w pliku oraz datę i godzinę pobrania danych. Jeśli na przykład 25 kwietnia 2023 r. uruchomiono skrypt o godzinie 9:00 (UTC) w celu wyodrębnienia danych działań z 23 kwietnia 2023 r., nazwa pliku to: PBIActivityEvents-20230423-202304250900. Chociaż struktura folderów, w której jest przechowywana, jest przydatna, każda nazwa pliku powinna być w pełni samoopisowana.

Zalecamy wyodrębnianie danych, które są co najmniej jeden dzień przed bieżącym dniem. Dzięki temu uniknąć pobierania zdarzeń częściowych dni i możesz mieć pewność, że każdy plik eksportu zawiera pełne 24 godziny danych.

Skrypt zbiera do 30 dni danych do poprzedniego dnia. Znaczniki czasu dla zdarzeń inspekcji są zawsze w formacie UTC. Zalecamy utworzenie wszystkich procesów inspekcji na podstawie czasu UTC, a nie czasu lokalnego.

Skrypt tworzy jeden plik JSON dziennie. Sufiks nazwy pliku zawiera znacznik czasu (w formacie UTC) wyodrębnionych danych. Jeśli wyodrębnisz ten sam dzień danych więcej niż raz, sufiks w nazwie pliku pomaga zidentyfikować nowszy plik.

#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

Istnieje kilka zalet używania polecenia cmdlet Get-PowerBIActivityEvent programu PowerShell, a nie operacji interfejsu API REST Get Activity Events.

  • Polecenie cmdlet umożliwia żądanie jednego dnia działania za każdym razem, gdy wykonasz wywołanie przy użyciu polecenia cmdlet . Podczas bezpośredniej komunikacji z interfejsem API można zażądać tylko jednej godziny na żądanie interfejsu API.
  • Polecenie cmdlet obsługuje tokeny kontynuacji. Jeśli używasz interfejsu API bezpośrednio, musisz sprawdzić token kontynuacji, aby ustalić, czy istnieją jeszcze jakieś wyniki. Niektóre interfejsy API muszą używać tokenów stronicowania i kontynuacji ze względu na wydajność, gdy zwracają dużą ilość danych. Zwracają pierwszy zestaw rekordów, a następnie przy użyciu tokenu kontynuacji można wykonać kolejne wywołanie interfejsu API w celu pobrania następnego zestawu rekordów. Nadal wywołujesz interfejs API, dopóki token kontynuacji nie zostanie zwrócony. Użycie tokenu kontynuacji to sposób konsolidacji wielu żądań interfejsu API, dzięki czemu można skonsolidować logiczny zestaw wyników. Aby zapoznać się z przykładem użycia tokenu kontynuacji, zobacz Interfejs API REST zdarzeń aktywności.
  • Polecenie cmdlet obsługuje wygasanie tokenu dostępu microsoft Entra ID (wcześniej nazywanego usługą Azure Active Directory). Po uwierzytelnieniu token dostępu wygasa po godzinie (domyślnie). W takim przypadku polecenie cmdlet automatycznie żąda tokenu odświeżania. Jeśli bezpośrednio komunikujesz się z interfejsem API, musisz zażądać tokenu odświeżania.

Aby uzyskać więcej informacji, zobacz Wybieranie interfejsów API lub poleceń cmdlet programu PowerShell.

Uwaga

Przykładowa odpowiedź zostanie pominięta, ponieważ jest to dane wyjściowe podobne do odpowiedzi przedstawionych w poprzednich przykładach.

Aby uzyskać więcej informacji związanych z tym artykułem, zapoznaj się z następującymi zasobami: