public/policy/Get-ArgPolicyComplianceByPolicyAssignment.ps1

function Get-ArgPolicyComplianceByPolicyAssignment {
    $query = @"
PolicyResources
| where type startswith 'microsoft.policyinsights/policystates'
| extend complianceState = tostring(properties.complianceState),
         resourceId = tostring(properties.resourceId),
         policyAssignmentId = tostring(properties.policyAssignmentId),
         policyAssignmentScope = tostring(properties.policyAssignmentScope),
         policyAssignmentName = tostring(properties.policyAssignmentName),
         policyDefinitionId = tostring(properties.policyDefinitionId),
         policyDefinitionReferenceId= tostring(properties.policyDefinitionReferenceId)
| extend stateWeight = case(
        complianceState == 'NonCompliant', 300,
        complianceState == 'Compliant', 200,
        complianceState == 'Conflict', 100,
        complianceState == 'Exempt', 50,
        0)
| summarize max_stateWeight = max(stateWeight)
    by resourceId, policyAssignmentId, policyAssignmentScope, policyAssignmentName
| summarize counts = count()
    by policyAssignmentId, policyAssignmentScope, policyAssignmentName, max_stateWeight
| summarize overallStateWeight = max(max_stateWeight),
          nonCompliantCount = sumif(counts, max_stateWeight == 300),
          compliantCount = sumif(counts, max_stateWeight == 200),
          conflictCount = sumif(counts, max_stateWeight == 100),
          exemptCount = sumif(counts, max_stateWeight == 50)
  by policyAssignmentId, policyAssignmentScope, policyAssignmentName
| extend totalResources = todouble(nonCompliantCount + compliantCount + conflictCount + exemptCount)
| extend compliancePercentage = iif(totalResources == 0, 100.0, 100.0 * todouble(compliantCount + exemptCount) / totalResources)
| extend complianceStateFinal = case(
        overallStateWeight == 300, 'noncompliant',
        overallStateWeight == 200, 'compliant',
        overallStateWeight == 100, 'conflict',
        overallStateWeight == 50, 'exempt',
        'notstarted')
| project policyAssignmentName,
          scope = policyAssignmentScope,
          complianceState = complianceStateFinal,
          compliancePercentage,
          compliantCount,
          nonCompliantCount,
          conflictCount,
          exemptCount
| order by policyAssignmentName asc
"@

    Search-AzGraph -Query $query
}