A Power BI tevékenységnaplójának elérése

Ez a cikk olyan Power BI-rendszergazdákat céloz meg, akiknek a Power BI-tevékenységnaplóból származó adatforrásokat kell elérni és elemezni. A Power BI-tevékenységek programozott lekérésére összpontosít a Power BI Management modul Get-PowerBIActivityEvent parancsmagjának használatával. Legfeljebb 30 napnyi előzmény áll rendelkezésre. Ez a parancsmag a Tevékenységesemények lekérése Power BI REST API-műveletet használja, amely egy rendszergazdai API. A PowerShell-parancsmagok absztrakciós réteget adnak hozzá a mögöttes API-khoz. Ezért a PowerShell-parancsmag leegyszerűsíti a Power BI tevékenységnaplóhoz való hozzáférést.

A Power BI-tevékenységek lekérésének egyéb manuális és programozott módjai is vannak. További információt az Access felhasználói tevékenységadataiban talál.

A Power BI tevékenységnaplójának elemzése kulcsfontosságú az irányítás, a megfelelőség és a bevezetési erőfeszítések nyomon követése szempontjából. A Power BI tevékenységnaplójáról további információt a Felhasználói tevékenységek nyomon követése a Power BI-ban című témakörben talál.

Tipp.

Javasoljuk, hogy teljes mértékben tekintse át a bérlőszintű naplózási cikket. Ez a cikk a tervezést, a legfontosabb döntéseket, az előfeltételeket és a kulcsfontosságú megoldásfejlesztési tevékenységeket ismerteti, amelyeket érdemes figyelembe venni a végpontok közötti naplózási megoldások létrehozásakor.

Elérhető példák

A cikk célja, hogy példákkal szolgáljon az első lépésekhez. Ilyenek például azok a szkriptek, amelyek adatokat kérnek le a tevékenységnaplóból a Power BI Management PowerShell-modul használatával.

Figyelmeztetés

A szkriptek nem éles üzemkészek, mert csak oktatási célokra készültek. A szkripteket azonban éles célokra is módosíthatja, ha hozzáadja a naplózási, hibakezelési, riasztási és újrabontási logikát a kód újrafelhasználása és modularizálása érdekében.

Mivel a tanulásra szolgálnak, a példák egyszerűek, mégis valósak. Javasoljuk, hogy tekintse át az összes példát, hogy megértse, hogyan alkalmazzák a különböző technikákat. Miután azonosította a szükséges tevékenységadatokat, kombinálhatja és megfeleltetheti a technikákat a követelményeknek leginkább megfelelő szkript létrehozásához.

Ez a cikk az alábbi példákat tartalmazza.

Példa neve Tevékenységadatok típusa
Hitelesítés a Power BI szolgáltatás n/a
Egy felhasználó összes tevékenységének megtekintése egy napra Összes
Tevékenység megtekintése N napra Jelentés megosztása (hivatkozás vagy közvetlen hozzáférés)
Három tevékenység megtekintése N napra Alkalmazás létrehozása, frissítése és alkalmazás telepítése
Munkaterület összes tevékenységének megtekintése egy napra Összes
Az előző N nap összes tevékenységének exportálása Összes

Az egyszerűség kedvéért a legtöbb példa a képernyőn adja ki az eredményt. A Visual Studio Code-ban például az adatok a terminálpanelre kerülnek, amely egy pufferkészletet tárol a memóriában.

A legtöbb példa nyers JSON-adatokat kér le. A nyers JSON-adatok használata számos előnnyel jár.

  • Az egyes tevékenységeseményekhez elérhető összes információ vissza lesz adva. Ez hasznos a rendelkezésre álló adatok megismeréséhez. Ne feledje, hogy az API-válaszok tartalma a tényleges tevékenységeseménytől függően eltérő. A CreateApp-eseményhez elérhető adatok például eltérnek a ViewReport eseményétől.
  • Mivel a tevékenységnaplóban elérhető adatok a Power BI időbeli fejlődésével változnak, az API-válaszok is változhatnak. Így a bevezetett új adatok nem maradnak le. A folyamat rugalmasabb a változáshoz, és kevésbé valószínű, hogy sikertelen lesz.
  • Az API-válaszok részletei eltérhetnek a Power BI kereskedelmi felhője és az országos/regionális felhők esetében.
  • Ha különböző csapattagok (például adatmérnökök) vesznek részt ebben a folyamatban, az adatok kinyerési folyamatának egyszerűsítése megkönnyíti a több csapat együttműködését.

Tipp.

Javasoljuk, hogy a lehető legegyszerűbben tartsa meg az adatokat kinyerő szkripteket. Ezért kerülje a tevékenységnapló adatainak elemzését, szűrését vagy formázását a kinyerés során. Ez a megközelítés egy ELT-módszertant használ, amely külön lépéseket tartalmaz az adatok kinyeréséhez, betöltéséhez és átalakításához. Ez a cikk csak az első lépésre összpontosít, amely az adatok kinyerésével foglalkozik.

Követelmények

A példaszkriptek használatához meg kell felelnie az alábbi követelményeknek.

  • PowerShell-ügyféleszköz: Használja az előnyben részesített eszközt a PowerShell-parancsok futtatásához. Az összes példát a Visual Studio Code-hoz készült PowerShell-bővítmény és a PowerShell 7 használatával teszteltük. Az ügyféleszközökkel és a PowerShell-verziókkal kapcsolatos információkért lásd a bérlői szintű naplózást.
  • Power BI Felügyeleti modul: Telepítse az összes Power BI PowerShell-modult. Ha korábban telepítette őket, javasoljuk, hogy frissítse a modulokat, hogy biztosan a legújabb közzétett verziót használja.
  • Hálóadminisztrátori szerepkör: A példaszkripteket interaktív hitelesítési folyamat használatára tervezték. Ezért a PowerShell-példaszkripteket futtató felhasználónak be kell jelentkeznie a Power BI REST API-k használatához. A tevékenységnapló adatainak lekéréséhez a hitelesítést végző felhasználónak a Power BI rendszergazdai szerepköréhez kell tartoznia (mivel a tevékenységesemények lekérése rendszergazdai API-val történik). A szolgáltatásnév hitelesítése nem terjed ki ezekre a tanulási példákra.

A cikk további része olyan példaszkripteket tartalmaz, amelyek a tevékenységnapló-adatok lekérésének különböző módjait mutatják be.

1. példa: Hitelesítés a Power BI szolgáltatás

Minden Power BI REST API-művelethez be kell jelentkeznie. A hitelesítést (aki a kérelmet küldi) és az engedélyezést (amit a felhasználónak engedélye van) a Microsoft Identitásplatform kezeli. Az alábbi példa a Power BI Management modul Csatlakozás-PowerBIServiceAccount parancsmagot használja. Ez a parancsmag egy egyszerű bejelentkezési módszert támogat.

Mintakérés 1

Az első szkript átirányítja a böngészőbe a bejelentkezési folyamat befejezéséhez. A többtényezős hitelesítést (MFA) engedélyező felhasználói fiókok ezt az interaktív hitelesítési folyamatot használhatják a bejelentkezéshez.

Connect-PowerBIServiceAccount

Fontos

A Power BI rendszergazdai jogosultságokkal nem rendelkező felhasználók nem futtathatnak a cikkben szereplő példaszkripteket. A Power BI-rendszergazdák jogosultak a Power BI szolgáltatás kezelésére és a bérlői szintű metaadatok (például a tevékenységnapló adatainak) lekérésére. Bár a szolgáltatásnév-hitelesítés használata nem terjed ki ezekre a példákra, határozottan javasoljuk, hogy állítson be egy szolgáltatásnevet az üzemkész, felügyelet nélküli szkriptekhez, amelyek ütemezés szerint fognak futni.

A következő szkriptek futtatása előtt mindenképpen jelentkezzen be.

2. példa: Egy felhasználó összes tevékenységének megtekintése egy napra

Néha ellenőriznie kell azokat a tevékenységeket, amelyeket egy adott felhasználó adott napon végzett.

Tipp.

Amikor adatokat nyer ki a tevékenységnaplóból a PowerShell-parancsmag használatával, minden kérés egy napig (legfeljebb 24 óráig) képes adatokat kinyerni. Ezért ennek a példának a célja az, hogy egyszerűen egy felhasználó egy napra történő ellenőrzésével kezdjen. A cikk későbbi részében további példák is bemutatják, hogyan exportálhat több napig egy hurkot az adatok exportálásához.

Mintakérés 2

Ez a szkript két PowerShell-változót deklarál, hogy megkönnyítse a szkript újrafelhasználását:

  • $UserEmailAddr: Az önt érdeklő felhasználó e-mail-címe.
  • $ActivityDate: Az a dátum, amely érdekli. A formátum YYYYY-MM-DD (ISO 8601 formátum). Az aktuális dátum előtti 30 napnál régebbi dátum nem kérhető le.
#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

Feljegyzés

Előfordulhat, hogy a PowerShell-szkriptek egyes sorainak végén egy háttérjel (') karakter látható. A PowerShellben a háttérkaraktér egyik módja a vonal folytatási karaktere. A cikkben szereplő szkriptek olvashatóságának javítása érdekében használtuk.

Tipp.

A szkriptben az egyes PowerShell-változók a Get-PowerBIActivityEvent parancsmag kötelező vagy nem kötelező paraméterértékével egyeznek meg. A változóhoz $UserEmailAddr hozzárendelt érték például a paraméternek -User lesz átadva. A PowerShell-változók ilyen módon történő deklarálása egyszerű módszer a szkriptben esetleg változó, kemény kódolású értékek elkerülésére. Ez egy jó szokás az örökbefogadáshoz, és hasznos lesz, mivel a szkriptek összetettebbé válnak. A PowerShell-paraméterek robusztusabbak, mint a változók, de a jelen cikk hatókörén kívül vannak.

Mintaválasz 2

Íme egy JSON-mintaválasz. Két olyan tevékenységet tartalmaz, amelyeket a felhasználó végzett:

  • Az első tevékenység azt mutatja, hogy egy felhasználó megtekintett egy jelentést.
  • A második tevékenység azt mutatja, hogy egy rendszergazda exportált adatokat a Power BI tevékenységnaplójából.
[
  {
    "Id": "10af656b-b5a2-444c-bf67-509699896daf",
    "RecordType": 20,
    "CreationTime": "2023-03-15T15:18:30Z",
    "Operation": "ViewReport",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 0,
    "UserKey": "100FFF92C7717B",
    "Workload": "PowerBI",
    "UserId": "jordan@contoso.com",
    "ClientIP": "192.168.1.1",
    "Activity": "ViewReport",
    "ItemName": "Gross Margin Analysis",
    "WorkSpaceName": "Sales Analytics",
    "DatasetName": "Sales Data",
    "ReportName": "Gross Margin Analysis",
    "WorkspaceId": "e380d1d0-1fa6-460b-9a90-1a5c6b02414c",
    "ObjectId": "Gross Margin Analysis",
    "DatasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
    "ReportId": "94e57e92-Cee2-486d-8cc8-218c97200579",
    "ArtifactId": "94e57e92-Cee2-486d-8cc8-218c97200579",
    "ArtifactName": "Gross Margin Analysis",
    "IsSuccess": true,
    "ReportType": "PowerBIReport",
    "RequestId": "53451b83-932b-f0b0-5328-197133f46fa4",
    "ActivityId": "beb41a5d-45d4-99ee-0e1c-b99c451e9953",
    "DistributionMethod": "Workspace",
    "ConsumptionMethod": "Power BI Web",
    "SensitivityLabelId": "e3dd4e72-5a5d-4a95-b8b0-a0b52b827793",
    "ArtifactKind": "Report"
  },
  {
    "Id": "5c913f29-502b-4a1a-a089-232edaf176f7",
    "RecordType": 20,
    "CreationTime": "2023-03-15T17:22:00Z",
    "Operation": "ExportActivityEvents",
    "OrganizationId": "927c6607-8060-4f4a-a5f8-34964ac78d70",
    "UserType": 2,
    "UserKey": "100FFF92C7717B",
    "Workload": "PowerBI",
    "UserId": "jordan@contoso.com",
    "ClientIP": "192.168.1.1",
    "UserAgent": "MicrosoftPowerBIMgmt/1.2.1111.0",
    "Activity": "ExportActivityEvents",
    "IsSuccess": true,
    "RequestId": "2af6a22d-6f24-4dc4-a26a-5c234ab3afad",
    "ActivityId": "00000000-0000-0000-0000-000000000000",
    "ExportEventStartDateTimeParameter": "2023-03-17T00:00:00Z",
    "ExportEventEndDateTimeParameter": "2023-03-17T23:59:59.999Z"
  }
]

Tipp.

A Power BI tevékenységnapló-adatainak kinyerése szintén naplózott művelet, ahogyan az az előző válaszban is látható. A felhasználói tevékenységek elemzésekor célszerű kihagyni a rendszergazdai tevékenységeket– vagy külön elemezni őket.

3. példa: Tevékenység megtekintése N napra

Előfordulhat, hogy egy adott tevékenységtípust napokig szeretne megvizsgálni. Ez a példa bemutatja, hogyan kérhető le elemenkénti jelentésmegosztási tevékenységek. Ciklust használ az előző hét nap tevékenységeinek lekéréséhez.

Mintakérés 3

A szkript két változót deklarál:

  • $ActivityType: A vizsgált tevékenység műveletneve .
  • $NbrOfDaysToCheck: Hány napot szeretne ellenőrizni. Az aktuális naptól visszafelé működő hurkot hajt végre. Az engedélyezett maximális érték 30 nap (mivel a legkorábbi beolvasható dátum az aktuális nap előtt 30 nap).
#Input values before running the script:
$ActivityType = 'ShareReport' 
$NbrOfDaysToCheck = 7 
#-----------------------------------------------------------------------

#Use today to start counting back the number of days to check:
$DayUTC = (([datetime]::Today.ToUniversalTime()).Date)

#Iteratively loop through each of the last N days to view events:
For($LoopNbr=0; $LoopNbr -le $NbrOfDaysToCheck; $LoopNbr++)
{
    $PeriodStart=$DayUTC.AddDays(-$LoopNbr)
    $ActivityDate=$PeriodStart.ToString("yyyy-MM-dd")
    Write-Verbose "Checking $ActivityDate" -Verbose 

    #Check activity events once per loop (once per day):
    Get-PowerBIActivityEvent `
        -StartDateTime ($ActivityDate + 'T00:00:00.000') `
        -EndDateTime ($ActivityDate + 'T23:59:59.999') `
        -ActivityType $ActivityType 
}

Tipp.

Ezzel a hurokozási technikával ellenőrizheti a tevékenységnaplóban rögzített műveletek bármelyikét.

Mintaválasz 3

Íme egy JSON-mintaválasz. Két olyan tevékenységet tartalmaz, amelyeket a felhasználó végzett:

  • Az első tevékenység azt mutatja, hogy létre lett hozva egy megosztási hivatkozás egy felhasználó számára. Vegye figyelembe, hogy a SharingAction értéke attól függően különbözik, hogy a felhasználó létrehozott-e hivatkozást, szerkesztett-e egy hivatkozást, vagy törölte-e a hivatkozást. A rövidség kedvéért a válaszban csak egy megosztási hivatkozási tevékenység jelenik meg.
  • A második tevékenység azt mutatja, hogy egy csoport közvetlen hozzáférés-megosztást hozott létre. Vegye figyelembe, hogy a SharingInformation értéke a végrehajtott művelettől függően eltérő. A rövidség kedvéért a válaszban csak egy típusú közvetlen hozzáférés-megosztási tevékenység jelenik meg.
[
  {
    "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"
  }
]

Feljegyzés

Ez a JSON-válasz azt mutatja, hogy az adatstruktúra az esemény típusától függően eltérő. Még ugyanannak az eseménytípusnak is lehetnek különböző jellemzői, amelyek kissé eltérő kimenetet eredményeznek. A cikk korábbi részében leírtaknak megfelelően meg kell szoknia a nyers adatok lekérését.

4. példa: Három tevékenység megtekintése N napra

Néha érdemes lehet több kapcsolódó tevékenységet is megvizsgálni. Ez a példa bemutatja, hogyan kérdezhet le három konkrét tevékenységet az előző hét napban. A Power BI-alkalmazásokkal kapcsolatos tevékenységekre összpontosít, beleértve az alkalmazások létrehozását, az alkalmazások frissítését és az alkalmazások telepítését.

Mintakérés 4

A szkript a következő változókat deklarálja:

  • $NbrOfDaysToCheck: Hány napot szeretne ellenőrizni. Az aktuális naptól visszafelé működő hurkot hajt végre. Az engedélyezett maximális érték 30 nap (mivel a legkorábbi beolvasható dátum az aktuális nap előtt 30 nap).
  • $Activity1: A vizsgált első tevékenység műveletneve . Ebben a példában a Power BI alkalmazáslétrehozási tevékenységeit keresi.
  • $Activity2: A második művelet neve. Ebben a példában a Power BI alkalmazásfrissítési tevékenységeit keresi.
  • $Activity3: A harmadik művelet neve. Ebben a példában a Power BI alkalmazástelepítési tevékenységeit keresi.

Egyszerre csak egy tevékenység tevékenységeseményei kérhetők le. A szkript tehát külön-külön keres minden műveletet. A keresési eredményeket egy névvel ellátott $FullResultsváltozóba egyesíti, amelyet aztán a képernyőn ad ki.

Figyelem

A számos ciklus többszöri futtatása jelentősen növeli az API szabályozásának valószínűségét. Szabályozás akkor fordulhat elő, ha túllépi az adott időszakban engedélyezett kérelmek számát. A Tevékenységesemények lekérése művelet óránként 200 kérésre korlátozódik. A szkriptek tervezésekor ügyeljen arra, hogy a szükségesnél többször ne kérje le az eredeti adatokat. Általában célszerű naponta egyszer kinyerni az összes nyers adatot, majd külön lekérdezni, átalakítani, szűrni vagy formázni az adatokat.

A szkript az aktuális napra vonatkozó eredményeket jeleníti meg.

Feljegyzés

Ha csak az előző napra vonatkozó eredményeket szeretné lekérni – a részleges napi eredmények elkerülése érdekében – tekintse meg az Előző N nap összes tevékenységének exportálása című példát.)

#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

Mintaválasz 4

Íme egy JSON-mintaválasz. Három tevékenységet tartalmaz, amelyeket a felhasználó hajtott végre:

  • Az első tevékenység egy Power BI-alkalmazás létrehozását mutatja.
  • A második tevékenység azt mutatja, hogy egy Power BI-alkalmazás frissült.
  • A harmadik tevékenység azt mutatja, hogy egy felhasználó telepített egy Power BI-alkalmazást.

Figyelmeztetés

A válasz csak a módosított felhasználói engedélyeket tartalmazza. Lehetséges például, hogy három célközönség hozható létre egy CreateApp-eseményben . Az UpdateApp eseményben, ha csak egy célközönség változott, akkor csak egy célközönség jelenik meg az OrgAppPermission adataiban. Emiatt az UpdateApp eseményre támaszkodva az összes alkalmazásengedély nyomon követése nem teljes, mert a tevékenységnapló csak a megváltozott elemeket jeleníti meg.

Az összes Power BI-alkalmazásengedély pillanatképéhez használja az Alkalmazásfelhasználók lekérése Rendszergazda API-műveletet.

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

5. példa: Egy munkaterület összes tevékenységének megtekintése egy napra

Előfordulhat, hogy egy adott munkaterülethez kapcsolódó tevékenységeket szeretne kivizsgálni. Ez a példa egy napra lekéri az összes tevékenységet az összes felhasználó számára. Ezután szűri az eredményeket, hogy egy munkaterület tevékenységeinek elemzésére összpontosíthasson.

Mintakérés 5

A szkript két változót deklarál:

  • $ActivityDate: Az a dátum, amely érdekli. A formátum YYYYY-MM-DD. Az aktuális dátum előtti 30 napnál régebbi dátum nem kérhető le.
  • $WorkspaceName: Annak a munkaterületnek a neve, amely érdekli.

A szkript az eredményeket a $Results változóban tárolja. Ezután átalakítja a JSON-adatokat egy objektummá, hogy az eredmények elemezhetők legyenek. Ezután szűri az eredményeket öt adott oszlop lekéréséhez. A CreationTime-adatok átnevezése ActivityDateTime néven történik. Az eredményeket a munkaterület neve, majd a kimenet szűri a képernyőn.

A Get-PowerBIActivityEvent parancsmagnak nincs olyan paramétere, amely lehetővé teszi munkaterület megadását a tevékenységnapló ellenőrzésekor (a cikk korábbi példái a PowerShell-paramétereket használták egy adott felhasználó, dátum vagy tevékenységnév beállításához). Ebben a példában a szkript lekéri az összes adatot, majd elemzi a JSON-választ egy adott munkaterület eredményeinek szűréséhez.

Figyelem

Ha olyan nagy szervezetnél dolgozik, amely naponta több száz vagy több ezer tevékenységet végez, az eredmények szűrése a lekérés után nagyon nem hatékony lehet. Ne feledje, hogy a Tevékenységesemények lekérése művelet óránként 200 kérésre korlátozódik.

Az API szabályozásának elkerülése érdekében (ha túllépi az adott időszakban engedélyezett kérelmek számát), ne kérje le az eredeti adatokat a szükségesnél többet. A szűrt eredményekkel továbbra is dolgozhat anélkül, hogy a szkript futtatásával újra lekérheti az eredményeket. A folyamatos igények esetén célszerű naponta egyszer kinyerni az összes adatot, majd többször lekérdezni.

#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

Mintaválasz 5

Íme a szűrt eredmények, amelyek a tulajdonságok egy kis részhalmazát tartalmazzák. A formátum könnyebben olvasható alkalmi elemzésekhez. Azt javasoljuk azonban, hogy az eredmények tárolásához konvertálja vissza JSON formátumba.

Feljegyzés

Miután a JSON-eredményeket PowerShell-objektummá konvertálta, az időértékek helyi idővé lesznek konvertálva. Az eredeti naplózási adatok mindig az egyezményes világidő (UTC) időpontban lesznek rögzítve, ezért azt javasoljuk, hogy csak az UTC idő használatát szokja meg.

ActivityDateTime : 4/25/2023 3:18:30 PM
Activity         : ViewReport
UserId           : jordan@contoso.com
ArtifactName     : Gross Margin Analysis
WorkSpaceName    : Sales Analytics

CreationTime     : 4/25/2023 5:32:10 PM
Activity         : ShareReport
UserId           : ellis@contoso.com
ArtifactName     : Call Center Stats
WorkSpaceName    : Sales Analytics

CreationTime     : 4/25/2023 9:03:05 PM
Activity         : ViewReport
UserId           : morgan@contoso.com
ArtifactName     : Call Center Stats
WorkSpaceName    : Sales Analytics

Tipp.

Ezzel a technikával az eredmények bármelyik tulajdonsága alapján szűrheti az eredményeket. Egy adott esemény RequestId használatával például csak egy adott eseményt elemezhet.

6. példa: Az előző N napok összes tevékenységének exportálása

Előfordulhat, hogy minden tevékenységadatot exportálni szeretne egy fájlba, hogy a PowerShellen kívül is működjön az adatokkal. Ez a példa lekéri az összes tevékenységet az összes felhasználó számára legfeljebb 30 napig. Naponta egy JSON-fájlba exportálja az adatokat.

Fontos

A tevékenységnapló adatai legfeljebb 30 napig érhetők el. Fontos, hogy exportálja és megőrizze az adatokat, hogy elvégezhesse az előzményelemzést. Ha jelenleg nem exportálja és tárolja a tevékenységnapló adatait, javasoljuk, hogy ezt rangsorolja.

Mintakérés 6

A szkript több napig lekéri az összes tevékenységet. Három változót deklarál:

  • $NbrDaysDaysToExtract: Hány napig szeretne exportálni. Egy hurkot hajt végre, amely az előző naptól visszafelé működik. Az engedélyezett maximális érték 30 nap (mivel a legkorábbi beolvasható dátum az aktuális nap előtt 30 nap).
  • $ExportFileLocation: A mappa elérési útja, ahová menteni szeretné a fájlokat. A mappának léteznie kell a szkript futtatása előtt. Ne tartalmazzon fordított perjelet (\) a mappa elérési útja végén (mert futásidőben automatikusan hozzáadja). Javasoljuk, hogy a nyers adatfájlok tárolásához külön mappát használjon.
  • $ExportFileName: Az egyes fájlnevek előtagja. Mivel naponta egy fájlt ment a rendszer, a szkript hozzáad egy utótagot, amely jelzi a fájlban lévő adatokat, valamint az adatok lekérésének dátumát és időpontját. Ha például 2023. április 25-én 9 órakor (UTC) futtatott egy szkriptet a 2023. április 23-i tevékenységadatok kinyeréséhez, a fájl neve: PBIActivityEvents-20230423-202304250900. Bár a mappastruktúra, ahol tárolja, hasznos, minden fájlnévnek teljesen önleírónak kell lennie.

Javasoljuk, hogy az aktuális nap előtt legalább egy nappal kinyerje az adatokat. Így elkerülheti a részleges napi események beolvasását, és biztos lehet abban, hogy minden egyes exportálási fájl tartalmazza a teljes 24 órányi adatot.

A szkript legfeljebb 30 napnyi adatot gyűjt össze az előző napig. A naplózott események időbélyegei mindig UTC-ben vannak. Javasoljuk, hogy az összes naplózási folyamatot a helyi idő helyett UTC idő alapján hozza létre.

A szkript naponta egy JSON-fájlt állít elő. A fájlnév utótagja tartalmazza a kinyert adatok időbélyegét (UTC formátumban). Ha több alkalommal is kinyeri ugyanazt az adatnapot, a fájlnév utótagja segít azonosítani az újabb fájlt.

#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

A Get-PowerBIActivityEvent PowerShell-parancsmag használatának számos előnye van a Tevékenységesemények lekérése REST API-művelet helyett.

  • A parancsmag lehetővé teszi, hogy a parancsmag használatával minden híváskor egy napi tevékenységet kérjen. Míg amikor közvetlenül kommunikál az API-val, api-kérésenként csak egy órát kérhet.
  • A parancsmag kezeli a folytatási jogkivonatokat. Ha közvetlenül használja az API-t, ellenőriznie kell a folytatási jogkivonatot annak megállapításához, hogy vannak-e további eredmények. Egyes API-knak teljesítménybeli okokból lapozási és folytatási jogkivonatokat kell használniuk, amikor nagy mennyiségű adatot adnak vissza. Visszaadják az első rekordkészletet, majd egy folytatási jogkivonattal további API-hívást kezdeményezhet a következő rekordkészlet lekéréséhez. Addig hívja meg az API-t, amíg nem ad vissza egy folytatási jogkivonatot. A folytatási jogkivonat használatával több API-kérést is összevonhat, így logikai eredmények összesíthetők. A folytatási jogkivonat használatára példa: Tevékenységesemények REST API.
  • A parancsmag kezeli a Microsoft Entra ID (korábbi nevén Azure Active Directory) hozzáférési jogkivonatok lejáratát. A hitelesítés után a hozzáférési jogkivonat egy óra elteltével (alapértelmezés szerint) lejár. Ebben az esetben a parancsmag automatikusan kér egy frissítési jogkivonatot. Ha közvetlenül kommunikál az API-val, frissítési jogkivonatot kell kérnie.

További információ: API-k vagy PowerShell-parancsmagok kiválasztása.

Feljegyzés

A rendszer kihagy egy mintaválaszt, mert az az előző példákban szereplő válaszokhoz hasonló kimenet.

A cikkhez kapcsolódó további információkért tekintse meg a következő forrásokat: