Public/Get-FDACostUsage.ps1
|
function Get-FDACostUsage { <# .SYNOPSIS Cost & token usage rollups. .PARAMETER GroupBy User | Day | Model | Agent | None .PARAMETER Last Window (default 30d). .PARAMETER UserPrincipalName Limit to one user. #> [CmdletBinding()] param( [ValidateSet('User', 'Day', 'Model', 'Agent', 'None')] [string] $GroupBy = 'User', [string] $Last = '30d', [string] $UserPrincipalName, [int] $Top = 50 ) $clauses = @("Timestamp > ago($Last)") if ($UserPrincipalName) { $clauses += "UserPrincipalName =~ '$($UserPrincipalName.Replace("'","''"))'" } $where = 'where ' + ($clauses -join ' and ') $groupExpr = switch ($GroupBy) { 'User' { 'UserPrincipalName' } 'Day' { 'bin(Timestamp, 1d)' } 'Model' { 'ModelName' } 'Agent' { 'InteractionId' } 'None' { $null } } if ($groupExpr) { $kql = "FDACostMetering | $where | summarize Calls = count(), Tokens = sum(TotalTokens), EstCU = sum(EstimatedCapacityUnits), EstUSD = sum(EstimatedCostUSD) by $groupExpr | top $Top by EstUSD desc" } else { $kql = "FDACostMetering | $where | summarize Calls = count(), Tokens = sum(TotalTokens), EstCU = sum(EstimatedCapacityUnits), EstUSD = sum(EstimatedCostUSD)" } Invoke-KQLQuery -Query $kql } |