Aracılığıyla paylaş


Power BI etkinlik günlüğüne erişme

Bu makale, Power BI etkinlik günlüğünden alınan verilere erişmesi ve bunları çözümlemesi gereken Power BI yöneticilerini hedefler. Power BI Yönetimi modülündeki Get-PowerBIActivityEvent cmdlet'ini kullanarak Power BI etkinliklerinin program aracılığıyla alınmasına odaklanır. 30 güne kadar geçmiş mevcuttur. Bu cmdlet, bir yönetici API'si olan Etkinlik Olaylarını Al Power BI REST API işlemini kullanır. PowerShell cmdlet'leri, temel api'lerin üzerine bir soyutlama katmanı ekler. Bu nedenle, PowerShell cmdlet'i Power BI etkinlik günlüğüne erişimi basitleştirir.

Power BI etkinliklerini almanın başka el ile ve programlı yolları da vardır. Daha fazla bilgi için bkz . Access kullanıcı etkinliği verileri.

Power BI etkinlik günlüğünü analiz etmek idare, uyumluluk ve benimseme çalışmalarını izlemek için çok önemlidir. Power BI etkinlik günlüğü hakkında daha fazla bilgi için bkz . Power BI'da kullanıcı etkinliklerini izleme.

İpucu

Kiracı düzeyinde denetim makalesini tam olarak gözden geçirmenizi öneririz. Bu makalede uçtan uca denetim çözümü oluştururken dikkate alınacak planlama, önemli kararlar, önkoşullar ve önemli çözüm geliştirme etkinlikleri ele alınmaktadır.

Kullanılabilir örnekler

Bu makalenin amacı, başlamanıza yardımcı olacak örnekler sunmaktır. Örnek olarak Power BI Yönetim PowerShell modülünü kullanarak etkinlik günlüğünden veri alan betikler verilebilir.

Uyarı

Betikler yalnızca eğitim amaçlı olduğundan üretime hazır değildir. Ancak, kod yeniden kullanımı ve modülerleştirme için günlüğe kaydetme, hata işleme, uyarı ve yeniden düzenleme mantığı ekleyerek betikleri üretim amacıyla uyarlayabilirsiniz.

Bunlar öğrenmeye yönelik olduğundan, örnekler basittir, ancak gerçek dünyadır. Biraz farklı tekniklerin nasıl uygulandığını anlamak için tüm örnekleri gözden geçirmenizi öneririz. İhtiyacınız olan etkinlik verilerinin türünü belirledikten sonra, gereksinimlerinize en uygun betiği üretmek için teknikleri karıştırabilir ve eşleştirebilirsiniz.

Bu makale aşağıdaki örnekleri içerir.

Örnek ad Etkinlik verilerinin türü
Power BI hizmeti ile kimlik doğrulaması Yok
Bir kullanıcının tüm etkinliklerini bir gün boyunca görüntüleme Tümünü
N gün için etkinliği görüntüleme Raporu paylaşma (bağlantı veya doğrudan erişim)
N gün için üç etkinliği görüntüleme Uygulama oluşturma, uygulamayı güncelleştirme ve yükleme
Bir çalışma alanının tüm etkinliklerini bir gün boyunca görüntüleme Tümünü
Önceki N güne ilişkin tüm etkinlikleri dışarı aktarma Tümünü

Kolaylık olması için örneklerin çoğu sonuçlarını ekrana aktarır. Örneğin, Visual Studio Code'da veriler bellekte bir arabellek kümesi tutan terminal paneline gönderilir.

Örneklerin çoğu ham JSON verilerini alır. Ham JSON verileriyle çalışmanın birçok avantajı vardır.

  • Her etkinlik olayı için kullanılabilen tüm bilgiler döndürülür. Bu, hangi verilerin kullanılabilir olduğunu öğrenmenize yardımcı olur. BIR API yanıtının içeriğinin gerçek etkinlik olayına bağlı olarak farklılık gösterdiğini unutmayın. Örneğin, CreateApp olayı için kullanılabilen veriler ViewReport olayından farklıdır.
  • Power BI zamanla geliştikçe etkinlik günlüğünde bulunan veriler değiştiğinden API yanıtlarının da değişmesini bekleyebilirsiniz. Bu şekilde, kullanıma sunulan yeni veriler kaçırılmaz. Ayrıca süreciniz değişmeye daha dayanıklıdır ve başarısız olma olasılığı daha düşüktür.
  • Api yanıtının ayrıntıları Power BI ticari bulutu ve ulusal/bölgesel bulutlar için farklılık gösterebilir.
  • Bu işleme dahil olan farklı ekip üyeleriniz (veri mühendisleri gibi) varsa, verileri ayıklamak için ilk işlemi basitleştirmek birden çok ekibin birlikte çalışmasını kolaylaştırır.

İpucu

Verileri ayıklayan betiklerinizi olabildiğince basit tutmanızı öneririz. Bu nedenle, etkinlik günlüğü verilerini ayıklanırken ayrıştırmak, filtrelemek veya biçimlendirmekten kaçının. Bu yaklaşımda verileri ayıklama, yükleme ve dönüştürme için ayrı adımlar içeren bir ELT metodolojisi kullanılır. Bu makalede yalnızca verilerin ayıklanmasıyla ilgili ilk adıma odaklanılır.

Gereksinimler

Örnek betikleri kullanmak için aşağıdaki gereksinimleri karşılamanız gerekir.

  • PowerShell istemci aracı: PowerShell komutlarını çalıştırmak için tercih ettiğiniz aracı kullanın. Tüm örnekler, PowerShell 7 ile Visual Studio Code için PowerShell uzantısı kullanılarak test edilmiştir. İstemci araçları ve PowerShell sürümleri hakkında bilgi için bkz . Kiracı düzeyinde denetim.
  • Power BI Yönetim modülü: Tüm Power BI PowerShell modüllerini yükleyin. Bunları daha önce yüklediyseniz, en son yayımlanan sürümü kullandığınızdan emin olmak için modülleri güncelleştirmenizi öneririz.
  • Doku yöneticisi rolü: Örnek betikler etkileşimli bir kimlik doğrulama akışı kullanacak şekilde tasarlanmıştır. Bu nedenle, PowerShell örnek betiklerini çalıştıran kullanıcının Power BI REST API'lerini kullanmak için oturum açması gerekir. Etkinlik günlüğü verilerini almak için, kimlik doğrulama kullanıcısının Power BI yönetici rolüne ait olması gerekir (etkinlik olaylarını alma işlemi bir yönetici API'si ile yapıldığından). Hizmet sorumlusu kimlik doğrulaması bu öğrenme örnekleri için kapsam dışındadır.

Bu makalenin geri kalanında, etkinlik günlüğü verilerini almanın farklı yollarını gösteren örnek betikler yer alır.

Örnek 1: Power BI hizmeti ile kimlik doğrulaması

Tüm Power BI REST API işlemleri için oturum açmanız gerekir. Kimlik doğrulaması (isteği kimin yaptığı) ve yetkilendirme (kullanıcının ne yapma iznine sahip olduğu) Microsoft kimlik platformu tarafından yönetilir. Aşağıdaki örnek, Power BI Yönetim modülündeki Bağlan-PowerBIServiceAccount cmdlet'ini kullanır. Bu cmdlet, oturum açmak için basit bir yöntemi destekler.

Örnek istek 1

İlk betik, oturum açma işlemini tamamlamak için sizi bir tarayıcıya yönlendirir. Çok faktörlü kimlik doğrulaması (MFA) etkinleştirilmiş kullanıcı hesapları oturum açmak için bu etkileşimli kimlik doğrulama akışını kullanabilir.

Connect-PowerBIServiceAccount

Önemli

Power BI yönetici ayrıcalıkları olmayan kullanıcılar, bu makaledeki örnek betiklerden hiçbirini çalıştıramaz. Power BI yöneticilerinin Power BI hizmeti yönetme ve kiracı genelindeki meta verileri (etkinlik günlüğü verileri gibi) alma izni vardır. Hizmet sorumlusu kimlik doğrulamasının kullanılması bu örnekler için kapsam dışında olsa da, zamanlamaya göre çalışacak üretime hazır, katılımsız betikler için bir hizmet sorumlusu ayarlamanızı kesinlikle öneririz.

Aşağıdaki betiklerden herhangi birini çalıştırmadan önce oturum açtığınızdan emin olun.

Örnek 2: Bir kullanıcının bir gün boyunca tüm etkinliklerini görüntüleme

Bazen belirli bir kullanıcının belirli bir günde gerçekleştirdiği tüm etkinlikleri denetlemeniz gerekir.

İpucu

PowerShell cmdlet'ini kullanarak etkinlik günlüğünden veri ayıklarken, her istek bir gün boyunca (en fazla 24 saat) veri ayıklayabilir. Bu nedenle, bu örneğin amacı yalnızca bir gün için bir kullanıcıyı denetleyerek başlamaktır. Bu makalenin devamında, birden çok gün boyunca verileri dışarı aktarmak için döngünün nasıl kullanılacağını gösteren başka örnekler de vardır.

Örnek istek 2

Bu betik, betiğin yeniden kullanılmasını kolaylaştırmak için iki PowerShell değişkeni bildirir:

  • $UserEmailAddr: İlgilendiğiniz kullanıcının e-posta adresi.
  • $ActivityDate: İlgilendiğiniz tarih. Biçim YYYY-AA-GG'dir (ISO 8601 biçimi). Geçerli tarihten 30 günden önceki bir tarihi isteyemezsiniz.
#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

Not

PowerShell betiklerindeki bazı satırların sonunda bir ters köşe (') karakteri fark edebilirsiniz. PowerShell'de, backtick karakterini kullanmanın bir yolu, satır devamı karakteridir. Bu makaledeki betiklerin okunabilirliğini geliştirmek için kullandık.

İpucu

Betikte, PowerShell değişkenlerinin her biri Get-PowerBIActivityEvent cmdlet'indeki gerekli veya isteğe bağlı parametre değeriyle ilişkilendirir. Örneğin, değişkene $UserEmailAddr atadığınız değer parametresine -User geçirilir. PowerShell değişkenlerini bu şekilde bildirmek, betiğinizde değişebilecek sabit kodlama değerlerini önlemek için basit bir yaklaşımdır. Bu, benimsemek için iyi bir alışkanlıktır ve betikleriniz daha karmaşık hale geldikçe yararlı olacaktır. PowerShell parametreleri değişkenlere göre daha sağlamdır, ancak bu makalenin kapsamı dışındadır.

Örnek yanıt 2

Örnek bir JSON yanıtı aşağıda verilmiştır. Kullanıcının gerçekleştirdiği iki etkinliği içerir:

  • İlk etkinlik, bir kullanıcının raporu görüntülediğini gösterir.
  • İkinci etkinlik, bir yöneticinin Power BI etkinlik günlüğünden verileri dışarı aktardığını gösterir.
[
  {
    "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"
  }
]

İpucu

Power BI etkinlik günlüğü verilerini ayıklama, önceki yanıtta gösterildiği gibi günlüğe kaydedilen bir işlemdir. Kullanıcı etkinliklerini çözümlerken yönetici etkinliklerini atlayabilir veya bunları ayrı olarak analiz edebilirsiniz.

Örnek 3: N gün için bir etkinliği görüntüleme

Bazen belirli bir etkinlik türünü bir dizi gün boyunca araştırmak isteyebilirsiniz. Bu örnekte, öğe başına rapor paylaşım etkinliklerini alma gösterilmektedir. Önceki yedi günün etkinliklerini almak için bir döngü kullanır.

Örnek istek 3

Betik iki değişken bildirir:

  • $ActivityType: Araştırdığınız etkinliğin işlem adı .
  • $NbrOfDaysToCheck: Kontrol etmek istediğiniz gün sayısı. Geçerli günden geriye doğru çalışan bir döngü gerçekleştirir. İzin verilen en yüksek değer 30 gündür (alabildiğiniz en erken tarih geçerli günden 30 gün önce olduğu için).
#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 
}

İpucu

Etkinlik günlüğüne kaydedilen işlemlerden herhangi birini denetlemek için bu döngü tekniğini kullanabilirsiniz.

Örnek yanıt 3

Örnek bir JSON yanıtı aşağıda verilmiştır. Kullanıcının gerçekleştirdiği iki etkinliği içerir:

  • İlk etkinlik, bir kullanıcı için paylaşım bağlantısının oluşturulduğunu gösterir. SharingAction değerinin, kullanıcının bağlantı oluşturması, bir bağlantıyı düzenlemesi veya silmesine bağlı olarak farklılık gösterdiğini unutmayın. Kısa olması için yanıtta yalnızca bir paylaşım bağlantısı etkinliği türü gösterilir.
  • İkinci etkinlik, bir grup için doğrudan erişim paylaşımının oluşturulduğunu gösterir. SharingInformation değerinin gerçekleştirilen eyleme bağlı olarak farklılık gösterdiğini unutmayın. Kısa olması için yanıtta yalnızca bir tür doğrudan erişim paylaşım etkinliği gösterilir.
[
  {
    "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"
  }
]

Not

Bu JSON yanıtı, veri yapısının olay türüne göre farklı olduğunu gösterir. Aynı olay türü bile biraz farklı bir çıkış üreten farklı özelliklere sahip olabilir. Bu makalenin önceki bölümlerinde önerilen şekilde ham verileri almaya alışmalısınız.

Örnek 4: N gün için üç etkinliği görüntüleme

Bazen çeşitli ilgili etkinlikleri araştırmak isteyebilirsiniz. Bu örnekte, önceki yedi gün için üç belirli etkinliğin nasıl alınıyor olduğu gösterilmektedir. Uygulama oluşturma, uygulama güncelleştirme ve uygulama yükleme gibi Power BI uygulamalarıyla ilgili etkinliklere odaklanır.

Örnek istek 4

Betik aşağıdaki değişkenleri bildirir:

  • $NbrOfDaysToCheck: Kontrol etmek istediğiniz gün sayısı. Geçerli günden geriye doğru çalışan bir döngü gerçekleştirir. İzin verilen en yüksek değer 30 gündür (alabildiğiniz en erken tarih geçerli günden 30 gün önce olduğu için).
  • $Activity1: araştırdığınız ilk etkinliğin işlem adı . Bu örnekte Power BI uygulama oluşturma etkinlikleri aranmaktadır.
  • $Activity2: İkinci işlem adı. Bu örnekte Power BI uygulama güncelleştirme etkinlikleri aranmaktadır.
  • $Activity3: Üçüncü işlem adı. Bu örnekte Power BI uygulama yükleme etkinlikleri aranmaktadır.

Bir kerede yalnızca bir etkinlik için etkinlik olaylarını alabilirsiniz. Bu nedenle, betik her işlemi ayrı olarak arar. Arama sonuçlarını adlı $FullResultsbir değişkende birleştirir ve ardından ekrana çıkışını alır.

Dikkat

Birçok döngünün birçok kez çalıştırılması, API azaltma olasılığını büyük ölçüde artırır. Azaltma, belirli bir süre içinde yapmanıza izin verilen istek sayısını aştığınızda gerçekleşebilir. Etkinlik Olaylarını Al işlemi saatte 200 istekle sınırlıdır. Betiklerinizi tasarlarken, özgün verileri ihtiyacınızdan daha fazla almamaya dikkat edin. Genel olarak, ham verilerin tümünü günde bir kez ayıklamak ve ardından bu verileri ayrı ayrı sorgulamak, dönüştürmek, filtrelemek veya biçimlendirmek daha iyi bir uygulamadır.

Betik geçerli günün sonuçlarını gösterir.

Not

Yalnızca önceki günün sonuçlarını almak için (kısmi gün sonuçlarından kaçınmak) önceki N gün için tüm etkinlikleri dışarı aktarma örneğine bakın.)

#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

Örnek yanıt 4

Örnek bir JSON yanıtı aşağıda verilmiştır. Kullanıcının gerçekleştirdiği üç etkinliği içerir:

  • İlk etkinlik bir Power BI uygulamasının oluşturulduğunu gösterir.
  • İkinci etkinlik bir Power BI uygulamasının güncelleştirildiğini gösterir.
  • Üçüncü etkinlik, bir Power BI uygulamasının bir kullanıcı tarafından yüklendiğini gösterir.

Uyarı

Yanıt yalnızca değiştirilmiş olan kullanıcı izinlerini içerir. Örneğin, bir CreateApp etkinliğinde üç hedef kitle oluşturulmuş olabilir. UpdateApp olayında yalnızca bir hedef kitle değiştiyse OrgAppPermission verilerinde yalnızca bir hedef kitle görünür. Bu nedenle, etkinlik günlüğü yalnızca değiştirilenleri gösterdiğinden, tüm uygulama izinlerini izlemek için UpdateApp olayına güvenmek eksiktir.

Tüm Power BI uygulama izinlerinin anlık görüntüsü için bunun yerine Uygulama Kullanıcılarını API olarak Yönetici alma işlemini kullanın.

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

Örnek 5: Bir çalışma alanının tüm etkinliklerini bir gün boyunca görüntüleme

Bazen belirli bir çalışma alanıyla ilgili etkinlikleri araştırmak isteyebilirsiniz. Bu örnek, bir gün boyunca tüm kullanıcılar için tüm etkinlikleri alır. Ardından sonuçları filtreler, böylece bir çalışma alanından etkinlikleri analiz etmek için odaklanabilirsiniz.

Örnek istek 5

Betik iki değişken bildirir:

  • $ActivityDate: İlgilendiğiniz tarih. Biçim YYYY-AA-GG'dir. Geçerli tarihten 30 günden önceki bir tarihi isteyemezsiniz.
  • $WorkspaceName: İlgilendiğiniz çalışma alanının adı.

Betik sonuçları değişkeninde $Results depolar. Ardından JSON verilerini bir nesneye dönüştürerek sonuçların ayrıştırılabilmesini sağlar. Ardından beş belirli sütunu almak için sonuçları filtreler. CreationTime verileri ActivityDateTime olarak yeniden adlandırılır. Sonuçlar çalışma alanı adına göre filtrelenir ve ardından ekrana çıkışlanır.

Get-PowerBIActivityEvent cmdlet'i için etkinlik günlüğünü denetlerken çalışma alanı belirtmenize olanak tanıyan bir parametre yoktur (bu makaledeki önceki örneklerde belirli bir kullanıcı, tarih veya etkinlik adını ayarlamak için PowerShell parametreleri kullanılmıştır). Bu örnekte betik tüm verileri alır ve ardından belirli bir çalışma alanının sonuçlarını filtrelemek için JSON yanıtını ayrıştırmaktadır.

Dikkat

Günde yüzlerce veya binlerce etkinliği olan büyük bir kuruluştaysanız, sonuçların alındıktan sonra filtrelenmesi çok verimsiz olabilir. Etkinlik Olaylarını Al işleminin saatte 200 istekle sınırlı olduğunu unutmayın.

API azaltmasını önlemek için (belirli bir süre içinde yapmanıza izin verilen istek sayısını aştığınızda), özgün verileri gerekenden daha fazla almayın. Sonuçları yeniden almak için betiği çalıştırmadan filtrelenmiş sonuçlarla çalışmaya devam edebilirsiniz. Devam eden ihtiyaçlar için, tüm verileri günde bir kez ayıklamak ve sonra birçok kez sorgulamak daha iyi bir uygulamadır.

#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

Örnek yanıt 5

Aşağıda, özelliklerin küçük bir alt kümesini içeren filtrelenmiş sonuçlar yer alır. Zaman zaman analiz için biçimi okumak daha kolaydır. Ancak, sonuçları depolamayı planlıyorsanız JSON biçimine geri dönüştürmenizi öneririz.

Not

JSON sonuçları bir PowerShell nesnesine dönüştürüldükten sonra, zaman değerleri yerel saate dönüştürülür. Özgün denetim verileri her zaman Eşgüdümlü Evrensel Saat (UTC) saatinde kaydedilir, bu nedenle yalnızca UTC saatini kullanmaya alışmanızı öneririz.

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

İpucu

Sonuçları sonuçlardaki herhangi bir özelliğe göre filtrelemek için bu tekniği kullanabilirsiniz. Örneğin, belirli bir olayı RequestId kullanarak yalnızca bir olayı analiz edebilirsiniz.

Örnek 6: Önceki N gündeki tüm etkinlikleri dışarı aktarma

Bazen, PowerShell dışındaki verilerle çalışabilmek için tüm etkinlik verilerini bir dosyaya aktarmak isteyebilirsiniz. Bu örnek, 30 güne kadar tüm kullanıcılar için tüm etkinlikleri alır. Verileri günde bir JSON dosyasına aktarır.

Önemli

Etkinlik günlüğü verileri en fazla 30 gün kullanılabilir. Geçmiş analizi gerçekleştirebilmeniz için verileri dışarı aktarmanız ve saklamanız önemlidir. Şu anda etkinlik günlüğü verilerini dışarı aktarmıyor ve depolamıyorsanız, bunu yapmaya öncelik vermenizi kesinlikle öneririz.

Örnek istek 6

Betik, bir dizi gün boyunca tüm etkinlikleri alır. Üç değişken bildirir:

  • $NbrDaysDaysToExtract: Dışarı aktarmayla ilgilendiğiniz gün sayısı. Önceki günden geriye doğru çalışan bir döngü gerçekleştirir. İzin verilen en yüksek değer 30 gündür (alabildiğiniz en erken tarih geçerli günden 30 gün önce olduğu için).
  • $ExportFileLocation: Dosyaları kaydetmek istediğiniz klasör yolu. Betiği çalıştırmadan önce klasör mevcut olmalıdır. Klasör yolunun sonuna ters eğik çizgi (\) karakteri eklemeyin (çalışma zamanında otomatik olarak eklendiğinden). Ham veri dosyalarını depolamak için ayrı bir klasör kullanmanızı öneririz.
  • $ExportFileName: Her dosya adının ön eki. Günlük bir dosya kaydedildiğinden, betik dosyada yer alan verileri ve verilerin alındığı tarihi ve saati belirtmek için bir sonek ekler. Örneğin, 23 Nisan 2023'e ilişkin etkinlik verilerini ayıklamak için 25 Nisan 2023'te saat 09:00'da (UTC) bir betik çalıştırdıysanız, dosya adı şu olur: PBIActivityEvents-202304250900. Depolandığı klasör yapısı yararlı olsa da, her dosya adının tamamen kendi kendine açıklayıcı olması gerekir.

Geçerli günden en az bir gün önce olan verileri ayıklamanızı öneririz. Bu şekilde, kısmi gün olaylarını almaktan kaçınabilir ve her dışarı aktarma dosyasının 24 saatlik verilerin tamamını içerdiğinden emin olabilirsiniz.

Betik, önceki güne kadar 30 güne kadar veri toplar. Denetlenen olaylar için zaman damgaları her zaman UTC'dedir. Tüm denetim işlemlerinizi yerel saatiniz yerine UTC saati temelinde oluşturmanızı öneririz.

Betik, günde bir JSON dosyası oluşturur. Dosya adının son eki, ayıklanan verilerin zaman damgasını (UTC biçiminde) içerir. Aynı günlük verileri birden çok kez ayıklarsanız, dosya adındaki sonek daha yeni dosyayı belirlemenize yardımcı olur.

#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

Etkinlik Olaylarını Al REST API işlemi yerine Get-PowerBIActivityEvent PowerShell cmdlet'ini kullanmanın çeşitli avantajları vardır.

  • cmdlet'i, cmdlet'ini kullanarak her çağrı yaptığınızda bir günlük etkinlik isteğinde bulunmanıza olanak tanır. Api ile doğrudan iletişim kurarken, API isteği başına yalnızca bir saat isteyebilirsiniz.
  • cmdlet'i sizin için devamlılık belirteçlerini işler. API'yi doğrudan kullanıyorsanız, gelecek başka sonuç olup olmadığını belirlemek için devamlılık belirtecini denetlemeniz gerekir. Bazı API'lerin büyük miktarda veri döndürdüğü performans nedenleriyle sayfalandırma ve devam belirteçleri kullanması gerekir. İlk kayıt kümesini döndürürler, ardından bir devamlılık belirteci ile sonraki kayıt kümesini almak için sonraki BIR API çağrısı yapabilirsiniz. Devam belirteci döndürülene kadar API'yi çağırmaya devam edebilirsiniz. Devamlılık belirtecini kullanmak, mantıksal bir sonuç kümesini birleştirebilmeniz için birden çok API isteğini birleştirmenin bir yoludur. Devamlılık belirteci kullanma örneği için bkz . Etkinlik Olayları REST API'si.
  • Cmdlet sizin için Microsoft Entra Id (eski adıyla Azure Active Directory) erişim belirteci süre sonunu işler. Kimlik doğrulaması yaptıktan sonra erişim belirtecinizin süresi bir saat sonra dolar (varsayılan olarak). Bu durumda, cmdlet sizin için otomatik olarak bir yenileme belirteci istemektedir. API ile doğrudan iletişim kurarsanız yenileme belirteci istemeniz gerekir.

Daha fazla bilgi için bkz . API'leri veya PowerShell cmdlet'lerini seçme.

Not

Önceki örneklerde gösterilen yanıtlara benzer bir çıkış olduğundan örnek yanıt atlanır.

Bu makaleyle ilgili daha fazla bilgi için aşağıdaki kaynaklara göz atın: