Requête Analytics personnalisée
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
query_requests: [
{
data_source: '<string>',
selections: [{field: '<string>', name: '<string>', aggregation_function: '<string>'}],
filters: [{name: '<string>', filter: '<string>', value: '<string>'}],
aggregations: [{field: '<string>', name: '<string>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'query_requests' => [
[
'data_source' => '<string>',
'selections' => [
[
'field' => '<string>',
'name' => '<string>',
'aggregation_function' => '<string>'
]
],
'filters' => [
[
'name' => '<string>',
'filter' => '<string>',
'value' => '<string>'
]
],
'aggregations' => [
[
'field' => '<string>',
'name' => '<string>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Analytics API
Requête Analytics personnalisée
Requêtes Analytics flexibles avec selections, filtres et aggregations personnalisés pour les données Autocomplete, Chat, Command et PCW.
POST
/
api
/
v1
/
Analytics
Requête Analytics personnalisée
curl --request POST \
--url https://server.codeium.com/api/v1/Analytics \
--header 'Content-Type: application/json' \
--data '
{
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
'import requests
url = "https://server.codeium.com/api/v1/Analytics"
payload = {
"service_key": "<string>",
"group_name": "<string>",
"query_requests": [
{
"data_source": "<string>",
"selections": [
{
"field": "<string>",
"name": "<string>",
"aggregation_function": "<string>"
}
],
"filters": [
{
"name": "<string>",
"filter": "<string>",
"value": "<string>"
}
],
"aggregations": [
{
"field": "<string>",
"name": "<string>"
}
]
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
service_key: '<string>',
group_name: '<string>',
query_requests: [
{
data_source: '<string>',
selections: [{field: '<string>', name: '<string>', aggregation_function: '<string>'}],
filters: [{name: '<string>', filter: '<string>', value: '<string>'}],
aggregations: [{field: '<string>', name: '<string>'}]
}
]
})
};
fetch('https://server.codeium.com/api/v1/Analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.codeium.com/api/v1/Analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'service_key' => '<string>',
'group_name' => '<string>',
'query_requests' => [
[
'data_source' => '<string>',
'selections' => [
[
'field' => '<string>',
'name' => '<string>',
'aggregation_function' => '<string>'
]
],
'filters' => [
[
'name' => '<string>',
'filter' => '<string>',
'value' => '<string>'
]
],
'aggregations' => [
[
'field' => '<string>',
'name' => '<string>'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://server.codeium.com/api/v1/Analytics"
payload := strings.NewReader("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://server.codeium.com/api/v1/Analytics")
.header("Content-Type", "application/json")
.body("{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.codeium.com/api/v1/Analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"service_key\": \"<string>\",\n \"group_name\": \"<string>\",\n \"query_requests\": [\n {\n \"data_source\": \"<string>\",\n \"selections\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\",\n \"aggregation_function\": \"<string>\"\n }\n ],\n \"filters\": [\n {\n \"name\": \"<string>\",\n \"filter\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"aggregations\": [\n {\n \"field\": \"<string>\",\n \"name\": \"<string>\"\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"queryResults": [
{
"responseItems": [
{
"item": {}
}
]
}
]
}Aperçu
Requête
string
requis
Votre clé de service avec l’autorisation « Analytics Read »
string
Limiter les résultats aux utilisateurs d’un groupe spécifique (facultatif)
array
requis
Tableau d’objets de requête définissant les données à récupérer
Afficher Objet de requête
Afficher Objet de requête
string
requis
Source de données à interroger. Options :
QUERY_DATA_SOURCE_USER_DATA- Données AutocompleteQUERY_DATA_SOURCE_CHAT_DATA- Données ChatQUERY_DATA_SOURCE_COMMAND_DATA- Données CommandQUERY_DATA_SOURCE_PCW_DATA- Données Percent Code Written
array
requis
Tableau de selections de champs à récupérer
Afficher Objet Selection
Afficher Objet Selection
string
requis
Nom du champ à sélectionner (voir la section Available Fields)
string
Alias du champ. S’il n’est pas renseigné, la valeur par défaut est
{aggregation_function}_{field_name} (en minuscules)string
Fonction d’agrégation à appliquer :
QUERY_AGGREGATION_UNSPECIFIED(valeur par défaut)QUERY_AGGREGATION_COUNTQUERY_AGGREGATION_SUMQUERY_AGGREGATION_AVGQUERY_AGGREGATION_MAXQUERY_AGGREGATION_MIN
array
Tableau de filtres à appliquer
Afficher Objet Filter
Afficher Objet Filter
Structure de la requête
- data_source (obligatoire) : Source de données à interroger
- selections (obligatoire) : Tableau des sélections de champs à récupérer
- filters (facultatif) : Tableau de filtres à appliquer
- aggregations (facultatif) : Tableau d’agrégations pour le regroupement
Selections
- field (obligatoire) : Nom du champ à sélectionner
- name (optionnel) : Alias du champ
- aggregation_function (optionnel) : Fonction d’agrégation à appliquer
Exemple de sélection
{
"field": "num_acceptances",
"name": "acceptances_totales",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
Filtres
- name (obligatoire) : Nom du champ à filtrer
- filter (obligatoire) : Opération de filtrage
- value (obligatoire) : Valeur à comparer
Exemple de filtre
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
Aggregations
- field (requis) : Nom du champ sur lequel effectuer le regroupement
- name (requis) : Alias du champ d’aggregation
Exemple d’agrégation
{
"field": "ide",
"name": "type_ide"
}
Champs disponibles
Données utilisateur
| Nom du champ | Description | Agrégations valides |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
date | Date UTC de l’autocomplétion | UNSPECIFIED, COUNT |
date UTC-x | Date avec décalage de fuseau horaire (p. ex. « date UTC-8 » pour le PST) | UNSPECIFIED, COUNT |
hour | Heure UTC de l’autocomplétion | UNSPECIFIED, COUNT |
language | Langage de programmation | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de Windsurf | UNSPECIFIED, COUNT |
num_acceptances | Nombre d’acceptations Autocomplete | SUM, MAX, MIN, AVG |
num_lines_accepted | Lignes de code acceptées | SUM, MAX, MIN, AVG |
num_bytes_accepted | Octets acceptés | SUM, MAX, MIN, AVG |
distinct_users | Utilisateurs distincts | UNSPECIFIED, COUNT |
distinct_developer_days | Couples distincts (utilisateur, jour) | UNSPECIFIED, COUNT |
distinct_developer_hours | Couples distincts (utilisateur, heure) | UNSPECIFIED, COUNT |
Données de Chat
Les données de Chat sont distinctes des données Cascade et correspondent à l’usage de nos plugins hérités non agentiques
| Field Name | Description | Valid Aggregations |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
model_id | ID du modèle de Chat | UNSPECIFIED, COUNT |
date | Date UTC de la réponse de chat | UNSPECIFIED, COUNT |
date UTC-x | Date avec décalage de fuseau horaire | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de Windsurf | UNSPECIFIED, COUNT |
latest_intent_type | Type d’intention du Chat (voir Types d’intention ci-dessous) | UNSPECIFIED, COUNT |
num_chats_received | Nombre de messages de chat reçus | SUM, MAX, MIN, AVG |
chat_accepted | Indique si le chat a été accepté (pouce levé) | SUM, COUNT |
chat_inserted_at_cursor | Indique si le bouton « Insert » a été cliqué | SUM, COUNT |
chat_applied | Indique si le bouton « Apply Diff » a été cliqué | SUM, COUNT |
chat_loc_used | Lignes de code utilisées à partir du chat | SUM, MAX, MIN, AVG |
Types d’intentions Chat
CHAT_INTENT_GENERIC- Chat standardCHAT_INTENT_FUNCTION_EXPLAIN- CodeLens d’explication de fonctionCHAT_INTENT_FUNCTION_DOCSTRING- CodeLens de docstring de fonctionCHAT_INTENT_FUNCTION_REFACTOR- CodeLens de refactorisation de fonctionCHAT_INTENT_CODE_BLOCK_EXPLAIN- CodeLens d’explication de bloc de codeCHAT_INTENT_CODE_BLOCK_REFACTOR- CodeLens de refactorisation de bloc de codeCHAT_INTENT_PROBLEM_EXPLAIN- CodeLens d’explication de problèmeCHAT_INTENT_FUNCTION_UNIT_TESTS- CodeLens de tests unitaires de fonction
Données Command
accepted pour filtrer les seules commandes acceptées.
| Field Name | Description | Valid Aggregations |
|---|---|---|
api_key | Hachage de la clé API de l’utilisateur | UNSPECIFIED, COUNT |
date | Date UTC de la commande | UNSPECIFIED, COUNT |
timestamp | Horodatage UTC de la commande | UNSPECIFIED, COUNT |
language | Langage de programmation | UNSPECIFIED, COUNT |
ide | IDE utilisé | UNSPECIFIED, COUNT |
version | Version de Windsurf | UNSPECIFIED, COUNT |
command_source | Source du déclenchement de Command (voir Command Sources ci-dessous) | UNSPECIFIED, COUNT |
provider_source | Mode de génération ou d’édition | UNSPECIFIED, COUNT |
lines_added | Lignes de code ajoutées | SUM, MAX, MIN, AVG |
lines_removed | Lignes de code supprimées | SUM, MAX, MIN, AVG |
bytes_added | Octets ajoutés | SUM, MAX, MIN, AVG |
bytes_removed | Octets supprimés | SUM, MAX, MIN, AVG |
selection_lines | Lignes sélectionnées (zéro pour les générations) | SUM, MAX, MIN, AVG |
selection_bytes | Octets sélectionnés (zéro pour les générations) | SUM, MAX, MIN, AVG |
accepted | Indique si la commande a été acceptée | SUM, COUNT |
Sources de Command
COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENSCOMMAND_REQUEST_SOURCE_DEFAULT- Utilisation classique de CommandCOMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTORCOMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENSCOMMAND_REQUEST_SOURCE_FOLLOWUPCOMMAND_REQUEST_SOURCE_CLASS_CODE_LENSCOMMAND_REQUEST_SOURCE_PLANCOMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS
Sources du fournisseur
PROVIDER_SOURCE_COMMAND_GENERATE- Mode de générationPROVIDER_SOURCE_COMMAND_EDIT- Mode d’édition
Données PCW
| Nom du champ | Description | Agrégations valides |
|---|---|---|
percent_code_written | Calculé comme codeium_bytes / (codeium_bytes + user_bytes) | UNSPECIFIED |
codeium_bytes | Nombre total d’octets générés par Codeium | UNSPECIFIED |
user_bytes | Nombre total d’octets écrits par l’utilisateur | UNSPECIFIED |
total_bytes | codeium_bytes + user_bytes | UNSPECIFIED |
codeium_bytes_by_autocomplete | Octets Codeium provenant d’Autocomplete | UNSPECIFIED |
codeium_bytes_by_command | Octets Codeium provenant de Command | UNSPECIFIED |
Filtres PCW
| Nom du champ | Description | Exemples |
|---|---|---|
language | Langage de programmation | KOTLIN, GO, JAVA |
ide | IDE utilisé | jetbrains, vscode |
version | Version de Windsurf | 1.28.0, 130.0 |
start_timestamp et end_timestamp dans le corps de la requête.
Exemples de demandes
Exemple de données utilisateur
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "votre_cle_de_service_ici",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "total_lines",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "date",
"filter": "QUERY_FILTER_GE",
"value": "2024-01-01"
},
{
"name": "date",
"filter": "QUERY_FILTER_LE",
"value": "2024-02-01"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Exemple de données de Chat
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
"selections": [
{
"field": "chat_loc_used",
"name": "lines_used",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "latest_intent_type",
"filter": "QUERY_FILTER_EQUAL",
"value": "CHAT_INTENT_FUNCTION_DOCSTRING"
}
],
"aggregations": [
{
"field": "ide",
"name": "ide_type"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Exemple de données pour Command
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
"selections": [
{
"field": "lines_added",
"name": "total_lines_added",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "lines_removed",
"name": "total_lines_removed",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "provider_source",
"filter": "QUERY_FILTER_EQUAL",
"value": "PROVIDER_SOURCE_COMMAND_EDIT"
},
{
"name": "accepted",
"filter": "QUERY_FILTER_EQUAL",
"value": "true"
}
],
"aggregations": [
{
"field": "language",
"name": "programming_language"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Exemple de données PCW
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-22T00:00:00Z",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_PCW_DATA",
"selections": [
{
"field": "percent_code_written",
"name": "pcw"
},
{
"field": "codeium_bytes",
"name": "ai_bytes"
},
{
"field": "total_bytes",
"name": "total"
},
{
"field": "codeium_bytes_by_autocomplete",
"name": "autocomplete_bytes"
},
{
"field": "codeium_bytes_by_command",
"name": "command_bytes"
}
],
"filters": [
{
"filter": "QUERY_FILTER_EQUAL",
"name": "language",
"value": "GO"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
Réponse
array
Exemples de réponses
Réponse de données utilisateur
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
Réponse de données de Chat
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
Réponse de données Command
{
"queryResults": [
{
"responseItems": [
{
"item": {
"programming_language": "PYTHON",
"total_lines_added": "21",
"total_lines_removed": "5"
}
},
{
"item": {
"programming_language": "GO",
"total_lines_added": "31",
"total_lines_removed": "27"
}
}
]
}
]
}
Réponse de données PCW
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
Notes importantes
- PCW (Percent Code Written) présente une forte variabilité au cours d’une même journée ou pour un même utilisateur ; agrégerez les données sur plusieurs semaines pour obtenir des insights plus pertinents
- Tous les champs de sélection doivent soit avoir des fonctions d’agrégation, soit n’en avoir aucune (pas de mélange possible)
- Les champs avec le motif “distinct_*” ne peuvent pas être utilisés dans des agrégations
- Les alias de champs doivent être uniques dans l’ensemble des selections et aggregations
- Si aucune fonction d’agrégation n’est spécifiée, la valeur par défaut est UNSPECIFIED