我对每个 API 计数占 API 总数的百分比有疑问。 我通过 Mixpanel JQL 来达到这个目的遇到了挑战,我也使用了减速器。 现在我已经知道每个项目总是携带特定“api_endpoint”的数据,所以这是否意味着我永远不能在“计数”列前面的列中拥有每个 API 的百分比?
function main() {
return Events({
from_date: '2024-08-01',
to_date: '2024-08-15'
})
.filter(function(event) {
return event.name === "api_response" && event.properties.api_response_type === "success";
})
.groupBy(['properties.api_endpoint'], mixpanel.reducer.count())
.map(function(item) {
var apiName = item.key[0];
return {
"API Name": apiName,
"Counts": item.value
};
});
}
我的期望是拥有这个:
API名称 | 计数 | 百分比 |
---|---|---|
api_name_01 | 8 | 20.51% |
api_name_02 | 13 | 33.33% |
api_name_03 | 3 | 7.69% |
api_name_04 | 9 | 23.07% |
api_name_05 | 6 | 15.38% |
我通过在“groupBy”之后仅使用“reduce”而不是“map”来修复它。
function main() {
return Events({
from_date: '2024-08-01',
to_date: '2024-08-15'
})
.filter(function(event) {
return event.name === "api_response";
})
.groupBy(['properties.api_endpoint'], mixpanel.reducer.count())
.reduce(function(acu, events) {
var total = events.reduce(function(acu, item) {
return acu += item.value
}, 0)
var generateApiName = function(endpoint) {
return endpointToName[endpoint] || endpoint
}
var generatePercentage = function(apiCount) {
var percNum = (apiCount * 100) / total
return `${parseFloat(percNum.toFixed(2))}%`;
};
var modifiedEvents = events.map(function(event) {
var endpoint = generateApiName(event.key[0]);
var counts = event.value;
var percentage = generatePercentage(counts)
return {
"API Name": endpoint,
Counts: counts,
Percentage: percentage
}
})
return modifiedEvents
});
}
我已经知道,在整个reduce中,我们可以同时访问过滤和分组的事件,因此我们可以按照我们想要的方式生成数据。