Programos gyvavimo ciklo valdymas, skirtas duomenų modelio tinkinimų analizei
Taikoma: Dynamics 365 klientų aptarnavimas
Šiame straipsnyje pateikiama išsami informacija apie programos ciklo valdymą (ALM) pasirinktinėms ataskaitoms, pagrįstoms "Dynamics 365 klientų aptarnavimas" daugiakanalio duomenų modelio tinkinimais.
ALM apžvalga
ALM yra svarbus veiksmas, kai norite perkelti pakeitimus, reikalingus tinkintoms ataskaitoms iš vienos aplinkos į kitą, bet taip pat norite minimalaus neautomatinio dalyvavimo. Tinkamai sukonfigūruotas ALM gali padėti sumažinti rankinių klaidų skaičių ir sutaupyti laiko.
Norėdami tinkinti ataskaitą, apsvarstykite ataskaitų diegimo Power BI ALM. Šį diegimą galite pasiekti įvairiais būdais:
- Galite perkelti Power BI ataskaitas iš vienos aplinkos į kitą naudodami Power BI diegimo srautus. Arba galite rankiniu būdu įdiegti Power BI ataskaitas, nukreipdami žymiklį į teisingus duomenų šaltinius.
- Kadangi klientų aptarnavimas administravimo centras yra modeliu pagrįsta programa, į jį galite įterpti tinkintas ataskaitas.
ALM for Dynamics 365 apima ataskaitų konfigūravimą klientų aptarnavimas administravimo centre.
Toliau pateiktoje diagramoje pavaizduoti veiksmai. Mėlyni laukai, kuriuose yra baltas tekstas, nurodo užduotis, kurias atliekate programoje "Dynamics 365". Geltoni laukeliai, kuriuose yra juodas tekstas, nurodo užduotis, kurias atliekate Power BI.
Ataskaitos konfigūracijos perkėlimas
Ataskaitos, įtrauktos į "Dynamics 365", saugomos objektuose Dataverse .
Toliau nurodyti objektai / lentelės naudojami tinkintai ataskaitos informacijai saugoti:
msdyn_dataanalyticsworkspaces
turi darbo srities informaciją, kuri sukonfigūruota atliekant pradinę sąranką, kad būtų galima atlikti retrospektyvinę / realaus laiko analizę.msdyn_dataanalyticsreport
Saugo tinkintas ataskaitas, pridėtas svetainės struktūroje.msdyn_reportid
: ataskaitos ID Power BI darbo srityje.msdyn_dataanalyticsreportid
: "Dynamics 365" pirminis raktas.msdyn_displayname
: rodomas pavadinimas, rodomas tinkintoje ataskaitoje klientų aptarnavimas darbo srities modeliu pagrįstoje programoje.msdyn_name
: ataskaitos Power BI pavadinimas darbo srityje.msdyn_workspaceid
: darbo srities, Power BI kuri buvo sukonfigūruota atliekant ankstesnį veiksmą, darbo srities ID.msdyn_datainsightsandanalyticsfeatureid
: f2266eb4-226f-4cf1-b422-89c5f48b40cb yra istorinio duomenų modelio tinkinimo funkcijos ID ir 09c168be-efe2-4f08-a986-3aab7095c863 funkcijos ID, skirtas duomenų modelio tinkinimui realiuoju laiku.
Norėdami perkelti ataskaitas, kurios pridedamos prie svetainės struktūros, turite perkelti duomenis iš objektų / lentelių. Šiuo tikslu galite naudoti konfigūracijos perkėlimo įrankį . Šiame straipsnyje pateikiamas schemos failo pavyzdys. Sužinokite daugiau apsilankę Konfigūracijos duomenų perkėlimas iš vienos aplinkos į kitą ir organizacijos naudojant konfigūracijos perkėlimo įrankį.
Po perkėlimo turite atnaujinti ataskaitos nuorodas. Kitaip tariant, turite atnaujinti darbo sritį, Power BI kurioje nuomojama ataskaita, ir ataskaitos ID iš darbo srities. Šiame straipsnyje pateikiamas "PowerShell" scenarijaus pavyzdys, tačiau tą patį rezultatą galite pasiekti naudodami bet kurią kalbą.
Scenarijų pavyzdžiai
Šiame skyriuje pateikiami šie scenarijų pavyzdžiai:
Schemos failo pavyzdys
Šį XML schemos failą sudaro pasirinktinės ataskaitos, kurios sukuriamos ir įdiegiamos Power BI darbo srityje. Jį galite naudoti norėdami eksportuoti duomenis iš konfigūracijos perkėlimo įrankio. Sužinokite daugiau apsilankę Konfigūracijos duomenų perkėlimas iš vienos aplinkos ir organizacijos į kitą naudojant konfigūracijos perkėlimo įrankį ir Konfigūracijos duomenų eksportavimo schemos kūrimas.
<entities>
<entity name="msdyn_dataanalyticsreport" displayname="Data Analytics Report" etc="10427" primaryidfield="msdyn_dataanalyticsreportid" primarynamefield="msdyn_name" disableplugins="false">
<fields>
<field displayname="Report Id" name="msdyn_reportid" type="string" customfield="true" />
<field displayname="Data Analytics Report" name="msdyn_dataanalyticsreportid" type="guid" primaryKey="true" />
<field displayname="Display name" name="msdyn_displayname" type="string" customfield="true" />
<field displayname="Name" name="msdyn_name" type="string" customfield="true" />
<field displayname="Report Display Order" name="msdyn_displayorder" type="number" customfield="true" />
<field displayname="Report Provision Status" name="msdyn_provisionstatus" type="bool" customfield="true" />
<field displayname="Report Page" name="msdyn_reportpage" type="string" customfield="true" />
<field displayname="Report Group" name="msdyn_reportgroup" type="string" customfield="true" />
<field displayname="Report Entity Name" name="msdyn_reportentityname" type="string" customfield="true" />
<field displayname="Report Template Id" name="msdyn_reporttemplateid" type="string" customfield="true" />
<field displayname="Dataset Id" name="msdyn_datasetid" type="string" customfield="true" />
<field displayname="Is Enabled" name="msdyn_isenabled" type="bool" customfield="true" />
<field displayname="Workspace Id" name="msdyn_workspaceid" type="string" customfield="true" />
<field displayname="datainsightsandanalyticsfeatureId" name="msdyn_datainsightsandanalyticsfeatureid" type="entityreference" lookupType="msdyn_datainsightsandanalyticsfeature" customfield="true" />
<field displayname="Analytics Checksum" name="msdyn_analyticschecksum" type="number" customfield="true" />
</fields>
<filter><filter type = 'and'>
<condition attribute = 'msdyn_datainsightsandanalyticsfeatureid' operator = 'eq' value = '<<Feature ID of the model customization>> '/>
<condition attribute = 'msdyn_displayname' operator = 'eq' value = '<<custom report name>>'/>
</filter></filter>
</entity>
</entities>
Naudokite f2266eb4-226f-4cf1-b422-89c5f48b40cb kaip istorinių duomenų funkcijos ID, o xxxx – kaip funkcijos ID duomenims realiuoju laiku.
"PowerShell" scenarijaus pavyzdys
Šis scenarijus naudoja kliento ID slapto autentifikavimo mechanizmą. Tačiau modifikuodami scenarijų galite naudoti bet kokio tipo autentifikavimą.
Šis scenarijus prisijungia per Power BI Power BI poilsio API. Jis prisijungia per Dataverse Dataverse žiniatinklio API.
#Get Power BI access token
function Get-PBIAccessToken {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$TenantId,
[Parameter(Mandatory=$true)]
$PBIAppId,
[Parameter(Mandatory=$true)]
$PBIClientSecret
)
$authority = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$resource = "https://analysis.windows.net/powerbi/api"
$body = @{
"grant_type" = "client_credentials"
"client_id" = $PBIAppId
"client_secret" = $PBIClientSecret
"resource" = $resource
}
Write-Host "Retreiving PBI Access Token"
$tokenResponse = Invoke-RestMethod -Method Post -Uri $authority -Body $body
return $tokenResponse.access_token
}
#Get Dataverse access token
function Get-DVAccessToken{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$tenantId,
[Parameter(Mandatory=$true)]
$clientId,
[Parameter(Mandatory=$true)]
$clientSecret,
[Parameter(Mandatory=$true)]
$dataVerseURL
)
$oAuthTokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token"
# OAuth Body Access Token Request
$authBody = @{
client_id = $clientId;
client_secret = $ClientSecret;
scope = "$($dataVerseURL)/.default"
grant_type = 'client_credentials'
}
# Parameters for OAuth Access Token Request
$authParams = @{
URI = $oAuthTokenEndpoint
Method = 'POST'
ContentType = 'application/x-www-form-urlencoded'
Body = $authBody
}
Write-Host "Retreiving CRM Access Token"
# Get Access Token
$authResponseObject = Invoke-RestMethod @authParams -ErrorAction Stop
return $authResponseObject
}
function Get-DVWorkspaceId {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$dvAuthResponseObject,
[Parameter(Mandatory=$true)]
$dataVerseURL
)
$getDataRequestUri = 'msdyn_dataanalyticsworkspaces?$top=5&$select=msdyn_workspaceid,msdyn_name&$filter=(msdyn_name ne ''Customer Service Managed Workspace'' and _msdyn_datainsightsandanalyticsfeatureid_value eq ''f2266eb4-226f-4cf1-b422-89c5f48b40cb'')'
# Set up web API call parameters, including a header for the access token
$getApiCallParams = @{
URI = "$($dataVerseURL)/api/data/v9.1/$($getDataRequestUri)"
Headers = @{
"Authorization" = "$($dvAuthResponseObject.token_type) $($dvAuthResponseObject.access_token)"
"Accept" = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
Method = 'GET'
}
Write-Host "Retreiving Dataverse DCCP Workspace Id"
# Call API to Get Response
$getApiResponseObject = Invoke-RestMethod @getApiCallParams -ErrorAction Stop
return $getApiResponseObject.value[0].msdyn_workspaceid
}
function Get-DVDCCPReports {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$dvAuthResponseObject,
[Parameter(Mandatory=$true)]
$workspaceId,
[Parameter(Mandatory=$true)]
$dataVerseURL
)
Write-Host "Retreiving DV DCCP Reports"
$getDataRequestUri = 'msdyn_dataanalyticsreports?$select=msdyn_dataanalyticsreportid,msdyn_name,msdyn_workspaceid&$filter=(msdyn_workspaceid ne '''+$workspaceId+''' and _msdyn_datainsightsandanalyticsfeatureid_value eq ''f2266eb4-226f-4cf1-b422-89c5f48b40cb'')'
# Set up web API call parameters, including a header for the access token
$getApiCallParams = @{
URI = "$($dataVerseURL)/api/data/v9.1/$($getDataRequestUri)"
Headers = @{
"Authorization" = "$($dvAuthResponseObject.token_type) $($dvAuthResponseObject.access_token)"
"Accept" = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
}
Method = 'GET'
}
$getApiResponseObject = Invoke-RestMethod @getApiCallParams -ErrorAction Stop
# Output
$dvReports = $getApiResponseObject.value
return $dvReports
}
function Get-PBIReports {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$accessToken,
[Parameter(Mandatory=$true)]
$workspaceId
)
Write-Host "Retreiving PBI Workspace Reports"
$headers = @{
"Authorization" = "Bearer $accessToken"
'Content-Type' = 'application/json'
}
$uri = "https://api.powerbi.com/v1.0/myorg/groups/$workspaceId/reports"
$response = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
$pbiReports = $response.value
return $pbiReports
}
function Update-DVReportReferences
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
$pbiAccessToken,
[Parameter(Mandatory=$true)]
$dvAuthResponseObject,
[Parameter(Mandatory=$true)]
$workspaceId,
[Parameter(Mandatory=$true)]
$dataVerseURL
)
$pbiReports = Get-PBIReports -accessToken $pbiAccessToken -workspaceId $workspaceId
Write-Host $pbiReports.Count
$dvReports = Get-DVDCCPReports -dvAuthResponseObject $dvAuthResponseObject -workspaceId $workspaceId -dataVerseURL $dataVerseURL
Write-Host $dvReports.Count
Write-Host "Updating DCCP report references"
$pbiReports
foreach ($item in $dvReports)
{
$item.msdyn_name
$report = $pbiReports.value | Where-Object {$_.name -eq $item.msdyn_name}
if($report -ne $null)
{
Write-Host "Updating report reference for $($item.msdyn_name) with PBI $($report.id)"
$dvReportId = $item.msdyn_dataanalyticsreportid
$patchRequestUri = "msdyn_dataanalyticsreports($($dvReportId))"+'?$select=msdyn_workspaceid,msdyn_dataanalyticsreportid'
$updateBody = @{
'msdyn_workspaceid' = ''+$workspaceId+''
'msdyn_reportid' = ''+$report.id+''
} | ConvertTo-Json
# Set up web API call parameters, including a header for the access token
$patchApiCallParams = @{
URI = "$($dataVerseURL)/api/data/v9.1/$($patchRequestUri)"
Headers = @{
"Authorization" = "$($dvAuthResponseObject.token_type) $($dvAuthResponseObject.access_token)"
"Accept" = "application/json"
"OData-MaxVersion" = "4.0"
"OData-Version" = "4.0"
"Content-Type" = "application/json; charset=utf-8"
"Prefer" = "return=representation" # in order to return data
"If-Match" = "*"
}
Method = 'PATCH'
Body = $updateBody
}
$patchApiResponseObject = Invoke-RestMethod @patchApiCallParams -ErrorAction Stop
}
else
{
Write-Host "Corresponding PBI report not found in PBI workspace with name $($item.msdyn_name)"
}
}
return $pbiReports
}
###Sample usage########
#$PBIAppId = '<<Client ID which has access to Power BI workspace>>'
#$TenantId = '<<Tenant Id of the DV/PBI organization>>'
#$PBIClientSecret = "<<Secret of application user PBI>>"
#$AppId = '<<Dataverse App id>>'
#$ClientSecret = '<<DV client Secret>>'
#$PowerPlatformEnvironmentUrl = "<<DV URL>>"
#$PBIAccessToken = Get-PBIAccessToken -TenantId $TenantId -PBIAppId $PBIAppId -PBIClientSecret $PBIClientSecret
#$CRMAccessToken = Get-DVAccessToken -tenantId $TenantId -dataVerseURL $PowerPlatformEnvironmentUrl -clientId $AppId -clientSecret $ClientSecret
#$workspaceId = Get-DVWorkspaceId -dvAuthResponseObject $CRMAccessToken -dataVerseURL $PowerPlatformEnvironmentUrl
#Update-DVReportReferences -pbiAccessToken $PBIAccessToken -dvAuthResponseObject $CRMAccessToken -workspaceId $workspaceId -dataVerseURL $PowerPlatformEnvironmentUrl
YAML vamzdyno pavyzdys Azure DevOps
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
- main
pool:
vmImage: windows-latest
steps:
- task: CopyFiles@2
inputs:
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
CleanTargetFolder: true
ignoreMakeDirErrors: true
displayName: 'Copy files from Repo'
- task: PowerPlatformToolInstaller@2
inputs:
DefaultVersion: true
- task: PowerPlatformExportData@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'Optimize25CRM'
Environment: '$(BuildTools.EnvironmentUrl)'
SchemaFile: '$(Build.ArtifactStagingDirectory)\source\Optimize25Schema\schema_sample.xml'
DataFile: 'data.zip'
displayName: 'Export reports sitemap data from Source'
- task: PowerPlatformImportData@2
inputs:
authenticationType: 'PowerPlatformSPN'
PowerPlatformSPN: 'Optimize25POC'
Environment: '$(BuildTools.EnvironmentUrl)'
DataFile: 'data.zip'
displayName: 'Import reports sitemap data to Target'
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$ScriptContent = Get-Content "$(Build.ArtifactStagingDirectory)\source\automation\PipelineScript.ps1" -Raw
Invoke-Expression $ScriptContent
# Write your PowerShell commands here.
Write-Host "Assigning connection variables"
$PBIAppId = '$(PBIClientId)'
$PBIClientSecret = '$(PBIClientSecret)'
$TenantId = '$(TenantId)'
$AppId = '$(CRMClientId)'
$ClientSecret = '$(CRMClientSecret)'
$PowerPlatformEnvironmentUrl = '$(GetConnectionVar.PowerPlatformEnvironmentUrl)'
$PBIAccessToken = Get-PBIAccessToken -TenantId $TenantId -PBIAppId $PBIAppId -PBIClientSecret $PBIClientSecret
$CRMAccessToken = Get-DVAccessToken -tenantId $TenantId -dataVerseURL $PowerPlatformEnvironmentUrl -clientId $AppId -clientSecret $ClientSecret
$featureId = 'f2266eb4-226f-4cf1-b422-89c5f48b40cb'
$workspaceId = Get-DVWorkspaceId -dvAuthResponseObject $CRMAccessToken -dataVerseURL $PowerPlatformEnvironmentUrl -featureId $featureId
Write-Host $workspaceId
Update-DVReportReferences -pbiAccessToken $PBIAccessToken -dvAuthResponseObject $CRMAccessToken -workspaceId $workspaceId -dataVerseURL $PowerPlatformEnvironmentUrl -featureId $featureId
Susiję ištekliai
Toliau pateikti ištekliai gali padėti sužinoti daugiau apie įtaisytąsias "Dynamics 365 klientų aptarnavimas" daugiakanalio analizės galimybes.
- Realiojo laiko analizės ataskaitų srities apžvalga
- Istorinė analizė, skirta suvienodintam maršruto parinkimui daugiakanaliame kanale, skirtame klientų aptarnavimas
- Istorinės ir realiojo laiko analizės ataskaitų tinkinimo modelis naudojant klientų aptarnavimas
- Microsoft Power Platform Sukurkite įrankius, skirtus Azure DevOps
- Konfigūracijos duomenų perkėlimas iš vienos organizacijos į kitą
- Microsoft Power Platform CLI duomenų komandų grupė
- Diegimo vamzdynų Power BI apžvalga
- Power BI REST API, skirtos įterptajai analizei ir automatizavimui