Power Automate中统计Graph API返回结果指定skuId的出现次数
统计Graph API返回结果中特定skuId的出现次数
问题背景
通过Graph API获取的用户许可数据结构如下(简化示例):
{ "value": [ { "userPrincipalName": "user@domain.com", "assignedLicenses": [ { "disabledPlans": [], "skuId": "4b585984-651b-448a-9e53-3b10f069cf7f" }, { "disabledPlans": [], "skuId": "26d45bd9-adf1-46cd-a9e1-51e9a5524128" } ] } // 更多用户对象 ] }
需要统计指定skuId(如4b585984-651b-448a-9e53-3b10f069cf7f)的出现次数,尝试用sub(length(split('@outputs','4b585984-651b-448a-9e53-3b10f069cf7f')),1)未成功,以下是正确实现方法。
正确实现方案
方案1:使用XPath精准统计(Power Automate Premium可用)
将JSON转换为XML后,用XPath匹配目标skuId的节点,直接获取数量:
length(xpath(xml(json(concat('{"root":', outputs('Get_users')?['body'], '}'))), '//skuId[text()="4b585984-651b-448a-9e53-3b10f069cf7f"]'))
- 原理:把Graph API返回的JSON包裹在
root节点下转成XML,再用XPath筛选所有值为目标skuId的skuId元素,最后取元素长度即为出现次数。 - 优势:无需循环,效率高,无字符串误判风险。
方案2:循环累加计数(无Premium限制)
如果没有Power Automate Premium权限,可通过双层循环实现:
- 初始化一个整数变量
licenseCount,默认值设为0。 - 添加「Apply to each」动作,遍历Graph API返回的
value数组(所有用户)。 - 在内层添加第二个「Apply to each」,遍历当前用户的
assignedLicenses数组。 - 内层循环中添加「Condition」,判断当前
skuId是否等于目标值。 - 若条件成立,执行「Increment variable」动作,将
licenseCount加1。 - 优势:无需高级功能,逻辑直观,适合简单场景。
方案3:修正字符串分割法(不推荐)
之前的公式失败原因是引用格式错误,修正后可临时使用,但存在误判风险(如其他字段包含相同字符串会被统计):
sub(length(split(string(outputs('Get_users')?['body']), '4b585984-651b-448a-9e53-3b10f069cf7f')), 1)
- 注意:必须用
string(outputs('Get_users')?['body'])将JSON转为字符串,且确保outputs('Get_users')是正确的动作名称。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

