Bagikan melalui


Akses log aktivitas Power BI

Artikel ini menargetkan administrator Power BI yang perlu mengakses dan menganalisis data yang bersumber dari log aktivitas Power BI. Ini berfokus pada pengambilan terprogram aktivitas Power BI dengan menggunakan cmdlet Get-PowerBIActivityEvent dari modul Manajemen Power BI. Riwayat hingga 30 hari tersedia. Cmdlet ini menggunakan operasi Get Activity Events Power BI REST API, yang merupakan API admin. Cmdlet PowerShell menambahkan lapisan abstraksi di atas API yang mendasar. Oleh karena itu, cmdlet PowerShell menyederhanakan akses ke log aktivitas Power BI.

Ada cara manual dan terprogram lainnya untuk mengambil aktivitas Power BI. Untuk informasi selengkapnya, lihat Mengakses data aktivitas pengguna.

Menganalisis log aktivitas Power BI sangat penting untuk tata kelola, kepatuhan, dan untuk melacak upaya adopsi . Untuk informasi selengkapnya tentang log aktivitas Power BI, lihat Melacak aktivitas pengguna di Power BI.

Tip

Kami menyarankan agar Anda sepenuhnya meninjau artikel audit tingkat Penyewa. Artikel ini membahas perencanaan, keputusan utama, prasyarat, dan aktivitas pengembangan solusi utama yang perlu dipertimbangkan saat membangun solusi audit end-to-end.

Contoh yang tersedia

Tujuan dari artikel ini adalah untuk memberi Anda contoh untuk membantu Anda memulai. Contohnya termasuk skrip yang mengambil data dari log aktivitas dengan menggunakan modul PowerShell Manajemen Power BI.

Peringatan

Skrip tidak siap produksi karena hanya ditujukan untuk tujuan pendidikan. Namun, Anda dapat menyesuaikan skrip untuk tujuan produksi dengan menambahkan logika untuk pengelogan, penanganan kesalahan, pemberitahuan, dan pemfaktoran ulang untuk penggunaan kembali kode dan modularisasi.

Karena mereka dimaksudkan untuk belajar, contohnya sederhana, namun mereka dunia nyata. Kami menyarankan agar Anda meninjau semua contoh untuk memahami bagaimana mereka menerapkan teknik yang sedikit berbeda. Setelah mengidentifikasi jenis data aktivitas yang Anda butuhkan, Anda dapat mencampur dan mencocokkan teknik untuk menghasilkan skrip yang paling sesuai dengan kebutuhan Anda.

Artikel ini menyertakan contoh berikut.

Contoh nama Jenis data aktivitas
Mengautentikasi dengan layanan Power BI T/A
Menampilkan semua aktivitas untuk pengguna selama satu hari Semua
Melihat aktivitas untuk N hari Berbagi laporan (tautan atau akses langsung)
Menampilkan tiga aktivitas untuk N hari Membuat aplikasi, memperbarui aplikasi, dan menginstal aplikasi
Menampilkan semua aktivitas untuk ruang kerja selama satu hari Semua
Mengekspor semua aktivitas untuk N hari sebelumnya Semua

Untuk kesederhanaan, sebagian besar contoh menghasilkan hasilnya ke layar. Misalnya, di Visual Studio Code, data adalah output ke panel terminal, yang menyimpan kumpulan buffer data dalam memori.

Sebagian besar contoh mengambil data JSON mentah. Bekerja dengan data JSON mentah memiliki banyak keuntungan.

  • Semua informasi yang tersedia untuk setiap peristiwa aktivitas dikembalikan. Itu berguna bagi Anda untuk mempelajari data apa yang tersedia. Perlu diingat bahwa konten respons API berbeda tergantung pada peristiwa aktivitas aktual. Misalnya, data yang tersedia untuk peristiwa CreateApp berbeda dengan peristiwa ViewReport .
  • Karena data yang tersedia dalam log aktivitas berubah seiring berkembangnya Power BI dari waktu ke waktu, Anda juga dapat mengharapkan respons API berubah. Dengan begitu, data baru yang diperkenalkan tidak akan terlewatkan. Proses Anda juga lebih tahan terhadap perubahan dan cenderung gagal.
  • Detail respons API dapat berbeda untuk cloud komersial Power BI dan cloud nasional/regional.
  • Jika Anda memiliki anggota tim yang berbeda (seperti teknisi data) yang terlibat dengan proses ini, menyederhanakan proses awal untuk mengekstrak data memudahkan beberapa tim untuk bekerja sama.

Tip

Kami menyarankan agar Anda menyimpan skrip yang mengekstrak data sesering mungkin. Oleh karena itu, hindari penguraian, pemfilteran, atau pemformatan data log aktivitas saat diekstraksi. Pendekatan ini menggunakan metodologi ELT , yang memiliki langkah terpisah untuk Mengekstrak, Memuat, dan Mengubah data. Artikel ini hanya berfokus pada langkah pertama, yang berkaitan dengan mengekstrak data.

Persyaratan

Untuk menggunakan contoh skrip, Anda harus memenuhi persyaratan berikut.

  • Alat klien PowerShell: Gunakan alat pilihan Anda untuk menjalankan perintah PowerShell. Semua contoh diuji dengan menggunakan ekstensi PowerShell untuk Visual Studio Code dengan PowerShell 7. Untuk informasi tentang alat klien dan versi PowerShell, lihat Audit tingkat penyewa.
  • Modul Manajemen Power BI: Menginstal semua modul Power BI PowerShell. Jika sebelumnya Anda menginstalnya, kami sarankan Anda memperbarui modul untuk memastikan bahwa Anda menggunakan versi terbaru yang diterbitkan.
  • Peran administrator Fabric: Contoh skrip dirancang untuk menggunakan alur autentikasi interaktif. Oleh karena itu, pengguna yang menjalankan contoh skrip PowerShell harus masuk untuk menggunakan REST API Power BI. Untuk mengambil data log aktivitas, pengguna yang mengautentikasi harus termasuk dalam peran administrator Power BI (karena mengambil peristiwa aktivitas dilakukan dengan API admin). Autentikasi perwakilan layanan berada di luar cakupan untuk contoh pembelajaran ini.

Sisa artikel ini menyertakan contoh skrip yang menunjukkan berbagai cara untuk mengambil data log aktivitas.

Contoh 1: Mengautentikasi dengan layanan Power BI

Semua operasi POWER BI REST API mengharuskan Anda untuk masuk. Autentikasi (siapa yang membuat permintaan) dan otorisasi (apa yang dapat dilakukan pengguna) dikelola oleh platform identitas Microsoft. Contoh berikut menggunakan cmdlet Koneksi-PowerBIServiceAccount dari modul Manajemen Power BI. Cmdlet ini mendukung metode sederhana untuk masuk.

Contoh permintaan 1

Skrip pertama mengarahkan Anda ke browser untuk menyelesaikan proses masuk. Akun pengguna yang mengaktifkan autentikasi multifaktor (MFA) dapat menggunakan alur autentikasi interaktif ini untuk masuk.

Connect-PowerBIServiceAccount

Penting

Pengguna tanpa hak istimewa administrator Power BI tidak dapat menjalankan salah satu contoh skrip yang mengikuti dalam artikel ini. Administrator Power BI memiliki izin untuk mengelola layanan Power BI dan untuk mengambil metadata di seluruh penyewa (seperti data log aktivitas). Meskipun menggunakan autentikasi perwakilan layanan berada di luar cakupan untuk contoh ini, kami sangat menyarankan agar Anda menyiapkan perwakilan layanan untuk skrip siap produksi dan tanpa pengawas yang akan berjalan sesuai jadwal.

Pastikan untuk masuk sebelum menjalankan salah satu skrip berikut.

Contoh 2: Menampilkan semua aktivitas untuk pengguna selama satu hari

Terkadang Anda perlu memeriksa semua aktivitas yang dilakukan pengguna tertentu pada hari tertentu.

Tip

Saat mengekstrak data dari log aktivitas dengan menggunakan cmdlet PowerShell, setiap permintaan dapat mengekstrak data selama satu hari (maksimum 24 jam). Oleh karena itu, tujuan dari contoh ini adalah untuk mulai hanya dengan memeriksa satu pengguna selama satu hari. Ada contoh lain nanti dalam artikel ini yang menunjukkan kepada Anda cara menggunakan perulangan untuk mengekspor data selama beberapa hari.

Sampel permintaan 2

Skrip ini mendeklarasikan dua variabel PowerShell untuk mempermudah penggunaan kembali skrip:

  • $UserEmailAddr: Alamat email untuk pengguna yang Anda minati.
  • $ActivityDate: Tanggal yang Anda minati. Formatnya adalah YYYY-MM-DD (format ISO 8601). Anda tidak dapat meminta tanggal lebih awal dari 30 hari sebelum tanggal saat ini.
#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

Catatan

Anda mungkin melihat karakter backtick (') di akhir beberapa baris dalam skrip PowerShell. Di PowerShell, salah satu cara Anda dapat menggunakan karakter backtick adalah sebagai karakter kelanjutan garis. Kami telah menggunakannya untuk meningkatkan keterbacaan skrip dalam artikel ini.

Tip

Dalam skrip, masing-masing variabel PowerShell berkorelasi dengan nilai parameter yang diperlukan atau opsional dalam cmdlet Get-PowerBIActivityEvent. Misalnya, nilai yang Anda tetapkan ke $UserEmailAddr variabel diteruskan ke -User parameter . Mendeklarasikan variabel PowerShell dengan cara ini adalah pendekatan ringan untuk menghindari nilai pengodean keras yang dapat berubah dalam skrip Anda. Itu adalah kebiasaan yang baik untuk diadopsi, dan akan berguna karena skrip Anda menjadi lebih kompleks. Parameter PowerShell lebih kuat daripada variabel, tetapi berada di luar cakupan untuk artikel ini.

Sampel respons 2

Berikut adalah contoh respons JSON. Ini termasuk dua aktivitas yang dilakukan pengguna:

  • Aktivitas pertama menunjukkan bahwa pengguna melihat laporan.
  • Aktivitas kedua menunjukkan bahwa administrator mengekspor data dari log aktivitas 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"
  }
]

Tip

Mengekstrak data log aktivitas Power BI juga merupakan operasi yang dicatat, seperti yang diperlihatkan dalam respons sebelumnya. Saat menganalisis aktivitas pengguna, Anda mungkin ingin menghilangkan aktivitas administrator—atau menganalisisnya secara terpisah.

Contoh 3: Melihat aktivitas untuk N hari

Terkadang Anda mungkin ingin menyelidiki satu jenis aktivitas tertentu selama serangkaian hari. Contoh ini menunjukkan cara mengambil aktivitas berbagi laporan per item. Ini menggunakan perulangan untuk mengambil aktivitas dari tujuh hari sebelumnya.

Contoh permintaan 3

Skrip mendeklarasikan dua variabel:

  • $ActivityType: Nama operasi untuk aktivitas yang Anda selidiki.
  • $NbrOfDaysToCheck: Berapa hari Anda tertarik untuk memeriksa. Ini melakukan perulangan bekerja mundur dari hari ini. Nilai maksimum yang diizinkan adalah 30 hari (karena tanggal paling awal yang dapat Anda ambil adalah 30 hari sebelum hari ini).
#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 
}

Tip

Anda dapat menggunakan teknik perulangan ini untuk memeriksa salah satu operasi yang dicatat dalam log aktivitas.

Sampel respons 3

Berikut adalah contoh respons JSON. Ini termasuk dua aktivitas yang dilakukan pengguna:

  • Aktivitas pertama menunjukkan bahwa tautan berbagi untuk pengguna dibuat. Perhatikan bahwa nilai SharingAction berbeda tergantung pada apakah pengguna membuat tautan, mengedit tautan, atau menghapus tautan. Untuk brevity, hanya satu jenis aktivitas tautan berbagi yang ditampilkan dalam respons.
  • Aktivitas kedua menunjukkan bahwa berbagi akses langsung untuk grup dibuat. Perhatikan bahwa nilai SharingInformation berbeda tergantung pada tindakan yang diambil. Untuk brevity, hanya satu jenis aktivitas berbagi akses langsung yang ditampilkan dalam respons.
[
  {
    "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"
  }
]

Catatan

Respons JSON ini menunjukkan bahwa struktur data berbeda berdasarkan jenis peristiwa. Bahkan jenis peristiwa yang sama dapat memiliki karakteristik berbeda yang menghasilkan output yang sedikit berbeda. Seperti yang direkomendasikan sebelumnya dalam artikel ini, Anda harus terbiasa mengambil data mentah.

Contoh 4: Menampilkan tiga aktivitas untuk N hari

Terkadang Anda mungkin ingin menyelidiki beberapa aktivitas terkait. Contoh ini menunjukkan cara mengambil tiga aktivitas tertentu untuk tujuh hari sebelumnya. Ini berfokus pada aktivitas yang terkait dengan aplikasi Power BI termasuk membuat aplikasi, memperbarui aplikasi, dan menginstal aplikasi.

Sampel permintaan 4

Skrip mendeklarasikan variabel berikut:

  • $NbrOfDaysToCheck: Berapa hari Anda tertarik untuk memeriksa. Ini melakukan perulangan yang bekerja mundur dari hari ini. Nilai maksimum yang diizinkan adalah 30 hari (karena tanggal paling awal yang dapat Anda ambil adalah 30 hari sebelum hari ini).
  • $Activity1: Nama operasi untuk aktivitas pertama yang Anda selidiki. Dalam contoh ini, ini mencari aktivitas pembuatan aplikasi Power BI.
  • $Activity2: Nama operasi kedua. Dalam contoh ini, ia mencari aktivitas pembaruan aplikasi Power BI.
  • $Activity3: Nama operasi ketiga. Dalam contoh ini, ia mencari aktivitas penginstalan aplikasi Power BI.

Anda hanya dapat mengambil peristiwa aktivitas untuk satu aktivitas pada satu waktu. Jadi, skrip mencari setiap operasi secara terpisah. Ini menggabungkan hasil pencarian ke dalam variabel bernama $FullResults, yang kemudian dihasilkan ke layar.

Perhatian

Menjalankan banyak perulangan berkali-kali sangat meningkatkan kemungkinan pembatasan API. Pembatasan dapat terjadi ketika Anda melebihi jumlah permintaan yang diizinkan untuk Anda buat dalam periode waktu tertentu. Operasi Dapatkan Peristiwa Aktivitas dibatasi hingga 200 permintaan per jam. Saat Anda merancang skrip, berhati-hatilah untuk tidak mengambil data asli lebih banyak kali dari yang Anda butuhkan. Umumnya, ini adalah praktik yang lebih baik untuk mengekstrak semua data mentah sekali per hari lalu mengkueri, mengubah, memfilter, atau memformat data tersebut secara terpisah.

Skrip menunjukkan hasil untuk hari ini.

Catatan

Untuk mengambil hasil hanya untuk hari sebelumnya—menghindari hasil hari parsial—lihat contoh Ekspor semua aktivitas untuk N hari sebelumnya.)

#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

Sampel respons 4

Berikut adalah contoh respons JSON. Ini termasuk tiga aktivitas yang dilakukan pengguna:

  • Aktivitas pertama memperlihatkan aplikasi Power BI dibuat.
  • Aktivitas kedua menunjukkan bahwa aplikasi Power BI diperbarui.
  • Aktivitas ketiga menunjukkan bahwa aplikasi Power BI diinstal oleh pengguna.

Peringatan

Respons hanya menyertakan izin pengguna yang dimodifikasi. Misalnya, ada kemungkinan bahwa tiga audiens dapat dibuat dalam peristiwa CreateApp . Dalam peristiwa UpdateApp, jika hanya satu audiens yang berubah, maka hanya satu audiens yang akan muncul di data OrgAppPermission. Untuk alasan itu, mengandalkan peristiwa UpdateApp untuk melacak semua izin aplikasi tidak lengkap karena log aktivitas hanya menunjukkan apa yang diubah.

Untuk rekam jepret semua izin aplikasi Power BI, gunakan operasi Dapatkan Pengguna Aplikasi sebagai ADMIN API sebagai gantinya.

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

Contoh 5: Menampilkan semua aktivitas untuk ruang kerja selama satu hari

Terkadang Anda mungkin ingin menyelidiki aktivitas yang terkait dengan ruang kerja tertentu. Contoh ini mengambil semua aktivitas untuk semua pengguna selama satu hari. Kemudian memfilter hasilnya sehingga Anda dapat fokus pada analisis aktivitas dari satu ruang kerja.

Sampel permintaan 5

Skrip mendeklarasikan dua variabel:

  • $ActivityDate: Tanggal yang Anda minati. Formatnya adalah YYYY-MM-DD. Anda tidak dapat meminta tanggal lebih awal dari 30 hari sebelum tanggal saat ini.
  • $WorkspaceName: Nama ruang kerja yang Anda minati.

Skrip menyimpan hasil dalam $Results variabel. Kemudian mengonversi data JSON ke objek sehingga hasilnya dapat diurai. Kemudian memfilter hasil untuk mengambil lima kolom tertentu. Data CreationTime diganti namanya menjadi ActivityDateTime. Hasilnya difilter menurut nama ruang kerja, lalu output ke layar.

Tidak ada parameter untuk cmdlet Get-PowerBIActivityEvent yang memungkinkan Anda menentukan ruang kerja saat memeriksa log aktivitas (contoh sebelumnya dalam artikel ini menggunakan parameter PowerShell untuk mengatur pengguna, tanggal, atau nama aktivitas tertentu). Dalam contoh ini, skrip mengambil semua data lalu mengurai respons JSON untuk memfilter hasil untuk ruang kerja tertentu.

Perhatian

Jika Anda berada di organisasi besar yang memiliki ratusan atau ribuan aktivitas per hari, memfilter hasil setelah diambil bisa sangat tidak efisien. Perlu diingat bahwa operasi Dapatkan Peristiwa Aktivitas dibatasi hingga 200 permintaan per jam.

Untuk menghindari pembatasan API (ketika Anda melebihi jumlah permintaan yang diizinkan untuk Dibuat dalam periode waktu tertentu), jangan mengambil data asli lebih dari yang Anda butuhkan. Anda dapat terus bekerja dengan hasil yang difilter tanpa menjalankan skrip untuk mengambil hasilnya lagi. Untuk kebutuhan yang sedang berlangsung, ini adalah praktik yang lebih baik untuk mengekstrak semua data sekali per hari dan kemudian mengkuerinya berkali-kali.

#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

Sampel respons 5

Berikut adalah hasil yang difilter, yang mencakup subset kecil properti. Formatnya lebih mudah dibaca untuk analisis sesekali. Namun, kami sarankan Anda mengonversinya kembali ke format JSON jika Anda berencana untuk menyimpan hasilnya.

Catatan

Setelah mengonversi hasil JSON menjadi objek PowerShell, nilai waktu dikonversi ke waktu lokal. Data audit asli selalu dicatat dalam waktu Waktu Universal Terkoordinasi (UTC), jadi kami sarankan Anda terbiasa hanya menggunakan waktu 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

Tip

Anda dapat menggunakan teknik ini untuk memfilter hasil menurut properti apa pun dalam hasilnya. Misalnya, Anda dapat menggunakan peristiwa RequestId tertentu untuk menganalisis hanya satu peristiwa tertentu.

Contoh 6: Mengekspor semua aktivitas untuk N hari sebelumnya

Terkadang Anda mungkin ingin mengekspor semua data aktivitas ke file sehingga Anda dapat bekerja dengan data di luar PowerShell. Contoh ini mengambil semua aktivitas untuk semua pengguna hingga 30 hari. Ini mengekspor data ke satu file JSON per hari.

Penting

Data log aktivitas tersedia selama maksimal 30 hari. Penting bahwa Anda mengekspor dan menyimpan data sehingga Anda dapat melakukan analisis historis. Jika saat ini Anda tidak mengekspor dan menyimpan data log aktivitas, kami sangat menyarankan Agar Anda memprioritaskan melakukannya.

Sampel permintaan 6

Skrip mengambil semua aktivitas selama serangkaian hari. Ini mendeklarasikan tiga variabel:

  • $NbrDaysDaysToExtract: Berapa hari Anda tertarik untuk mengekspor. Ini melakukan perulangan, bekerja mundur dari hari sebelumnya. Nilai maksimum yang diizinkan adalah 30 hari (karena tanggal paling awal yang dapat Anda ambil adalah 30 hari sebelum hari ini).
  • $ExportFileLocation: Jalur folder tempat Anda ingin menyimpan file. Folder harus ada sebelum menjalankan skrip. Jangan sertakan karakter garis miring terbelakang (\) di akhir jalur folder (karena secara otomatis ditambahkan saat runtime). Kami menyarankan agar Anda menggunakan folder terpisah untuk menyimpan file data mentah.
  • $ExportFileName: Awalan untuk setiap nama file. Karena satu file per hari disimpan, skrip menambahkan akhiran untuk menunjukkan data yang terkandung dalam file, dan tanggal dan waktu data diambil. Misalnya, jika Anda menjalankan skrip pada pukul 09.00 (UTC) pada 25 April 2023 untuk mengekstrak data aktivitas untuk 23 April 2023, nama filenya adalah: PBIActivityEvents-20230423-202304250900. Meskipun struktur folder tempat folder disimpan sangat membantu, setiap nama file harus sepenuhnya dijelaskan sendiri.

Kami menyarankan agar Anda mengekstrak data yang setidaknya satu hari sebelum hari ini. Dengan demikian, Anda menghindari pengambilan peristiwa hari parsial, dan Anda dapat yakin bahwa setiap file ekspor berisi data 24 jam penuh.

Skrip mengumpulkan data hingga 30 hari, hingga hari sebelumnya. Tanda waktu untuk peristiwa yang diaudit selalu dalam UTC. Kami menyarankan agar Anda membangun semua proses audit berdasarkan waktu UTC daripada waktu lokal Anda.

Skrip menghasilkan satu file JSON per hari. Akhiran nama file mencakup tanda waktu (dalam format UTC) dari data yang diekstrak. Jika Anda mengekstrak hari data yang sama lebih dari sekali, akhiran dalam nama file membantu Anda mengidentifikasi file yang lebih baru.

#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

Ada beberapa keuntungan menggunakan cmdlet PowerShell Get-PowerBIActivityEvent daripada operasi GET Activity Events REST API.

  • Cmdlet memungkinkan Anda untuk meminta satu hari aktivitas setiap kali Anda melakukan panggilan dengan menggunakan cmdlet. Sedangkan saat berkomunikasi dengan API secara langsung, Anda hanya dapat meminta satu jam per permintaan API.
  • Cmdlet menangani token kelanjutan untuk Anda. Jika Anda menggunakan API secara langsung, Anda perlu memeriksa token kelanjutan untuk menentukan apakah ada lebih banyak hasil yang akan datang. Beberapa API perlu menggunakan penomoran halaman dan token kelanjutan karena alasan performa ketika mereka mengembalikan sejumlah besar data. Mereka mengembalikan serangkaian rekaman pertama, lalu dengan token kelanjutan Anda dapat melakukan panggilan API berikutnya untuk mengambil kumpulan rekaman berikutnya. Anda terus memanggil API hingga token kelanjutan tidak dikembalikan. Menggunakan token kelanjutan adalah cara untuk mengonsolidasikan beberapa permintaan API sehingga Anda dapat mengonsolidasikan serangkaian hasil logis. Untuk contoh penggunaan token kelanjutan, lihat Rest API Peristiwa Aktivitas.
  • Cmdlet menangani kedaluwarsa token akses Microsoft Entra ID (sebelumnya dikenal sebagai Azure Active Directory) untuk Anda. Setelah Anda mengautentikasi, token akses Anda kedaluwarsa setelah satu jam (secara default). Dalam hal ini, cmdlet secara otomatis meminta token refresh untuk Anda. Jika Anda berkomunikasi dengan API secara langsung, Anda perlu meminta token refresh.

Untuk informasi selengkapnya, lihat Memilih API atau cmdlet PowerShell.

Catatan

Respons sampel dihilangkan karena merupakan output yang mirip dengan respons yang ditunjukkan dalam contoh sebelumnya.

Untuk informasi selengkapnya tentang dokumen resmi ini, lihat sumber daya berikut: