public/policy/Get-ArgPolicyComplianceByPolicyAssignment.ps1

function Get-ArgPolicyComplianceByPolicyAssignment {
    $query = @"
PolicyResources
| where type =~ '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),
         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
}