API de Phrase TMS

Analytics Aggregations (TMS)

Le contenu est traduit de l’anglais par Phrase Language AI.

Le magasin de données exécutant des requêtes d'agrégation est construit sur Elasticsearch (actuellement version 1.7.x). Elasticsearch fournit des recherches en temps réel et des capacités d’agrégation, l’API analytique formant une couche fine et renforcée en matière de sécurité au-dessus de celui-ci. Le langage de requête et d'agrégation d'Elasticsearch est utilisé dans les exemples.

  • Le langage utilisé dans le champ filtre du JSON de requête est décrit dans la documentation Elasticsearch Query DSL.

  • Le langage utilisé dans le champ agrégations du JSON de requête est entièrement décrit dans la documentation Elasticsearch Aggregations.

Indexes

Différents types de données sont stockés dans différents index. Par exemple, les données tâche vivent dans l'index jobPart, et les données coûts vivent dans l'index coûts. Les données requises peuvent être spécifiées en indiquant l'index dans l'URL du point de terminaison de l'API d'agrégation.

Documents parent-enfant

Des parties de l'information sur une tâche vivent dans deux documents différents dans la base de données Elasticsearch. Ces documents sont dans une relation parent-enfant. Par exemple, les informations sur le projet d'une tâche vivent dans le document parent, tandis que les informations sur la tâche elle-même vivent dans le document enfant. En fonction des informations requises, les agrégations sont soit avant l'agrégation parent-enfant des données, soit après, mais l'agrégation des données elle-même doit être présente dans toutes les requêtes.

Modèles de données d’index

Données Communes

Analyse

{
  "identifiant": chaîne,
  "createdBy": <Utilisateur>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "innerId": nombre,
  "nom": chaîne,
  "tags": balise[],
  "jeté": booléen,
  "jetéPar": <Utilisateur>,
  "type": chaîne
}

Assignation

{
  "nom": chaîne,
  "linguist": <Linguiste>,
  "vendor": <Prestataire>
}

submitter portal

{
  "identifiant": chaîne,
  "createdBy": <User>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": booléen,
  "nom": chaîne,
  "tags": chaîne[],
  "trashed": booléen,
  "urlId": chaîne
}

Acheteur

{
  "id": chaîne,
  "nom": chaîne
}

Client

{
  "identifiant": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "idExterne": chaîne,
  "nom": chaîne,
  "tags": balise[],
  "jeté": booléen,
}

CostCenter

{
  "identifiant": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "nom": chaîne,
  "tags": balise[],
  "trashed": booléen,
}

Domaine

{
  "id": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "deleted": booléen,
  "nom": chaîne,
  "tags": balise[],
  "trashed": booléen
}

Tâche

{
  "identifiant": chaîne,
  "createdBy": <Utilisateur>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "extension": chaîne,
  "fileName": chaîne,
  "groupCount": nombre,
  "innerId": "1",
  "languagePair": chaîne,
  "lastModified": Date,
  "localePair": chaîne,
  "sourceLanguage": chaîne,
  "sourceLocale": chaîne,
  "tags": chaîne[],
  "targetLanguage": chaîne,
  "targetLocale": chaîne,
  "taskId": chaîne,
  "trashed": booléen,
  "trashedBy": <Utilisateur>,
  "uid": chaîne
}

Tâche

{
  "id": "19",
  "assignedTo": <Assignation>,
  "beginIndex": nombre,
  "buyer": <Acheteur>,
  "createdBy": <Utilisateur>,
  "dateCreated": Date,
  "dateDue": Date,
  "endIndex": nombre,
  "groupCount": nombre,
  "innerId": chaîne,
  "lastModified": Date,
  "level": nombre,
  "status": chaîne,
  "tags": [],
  "uid": chaîne,
  "workflowStep": <WorkflowStep>
}

TaEngine

{
  "identifiant": chaîne,
  "supprimé": booléen,
  "default_: booléen,
  "includeTags": booléen,
  "nom": chaîne,
  "tags": balise[],
  "type": chaîne,
}

NetRateScheme

{
  "id": Identifiant,
  "createdBy": <Utilisateur>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "default_": booléen,
  "supprimé": booléen,
  "idExterne": chaîne,
  "nom": chaîne,
  "tags": balise[],
}

PriceList

{
  "identifiant": chaîne,
  "createdBy": <Utilisateur>,
  "currency": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "default_": booléen,
  "supprimé": booléen,
  "nom": chaîne,
  "tags": balise[],
  "trashed": booléen,
  "unit": chaîne
}

Projet

{
  "identifiant": chaîne,
  "buyer": <Acheteur>,
  "client": <Client>,
  "costCenter": <CostCenter>,
  "createdBy": <Utilisateur>,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateDue": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "domaine": <Domaine>,
  "innerId": nombre,
  "languagePairs": chaîne[],
  "localePairs": paramètre linguistique[],
  "mtEngine": <TaEngine>,
  "nom": chaîne,
  "note": chaîne,
  "responsable": <Utilisateur>,
  "langueSource": chaîne,
  "paramètre linguistique source": chaîne,
  "statut": chaîne,
  "sous-domaine": <Sous-domaine>,
  "tags": balise[],
  "targetLanguages": string[],
  "targetLocales": paramètre linguistique[],
  "jeté": booléen,
  "jetéPar": <Utilisateur>,
  "uid": chaîne,
  "vendor": <Prestataire>
}

devis

{
  "identifiant": chaîne,
  "createdBy": <Utilisateur>,
  "currency": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "innerId": chaîne,
  "nom": chaîne,
  "statut": chaîne,
  "tags": balise[],
  "jeté": booléen,
  "jetéPar": <Utilisateur>,
  "unit": chaîne
}

service

{
  "identifiant": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "nom": chaîne,
  "publicName": chaîne,
  "tags": balise[],
  "jeté": booléen,
  "type": chaîne
}

sous-domaine

{
  "identifiant": chaîne,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "nom": chaîne,
  "tags": balise[],
  "jeté": booléen
}

Utilisateur

{
  "identifiant": nombre,
  "actif": booléen,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "email": e-mail,
  "firstName": chaîne,
  "fullName": chaîne,
  "innerId": nombre,
  "jobTitle": chaîne.
  "lastName": chaîne,
  "locale": paramètre linguistique,
  "note": chaîne,
  "role": chaîne,
  "tags": balise[],
  "timeZone": chaîne,
  "trashed": booléen,
  "userName": chaîne
}

prestataire

{
  "id": Identifiant,
  "candidate": booléen,
  "dateCreated": Date,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "supprimé": booléen,
  "tags": balise[],
  "token": jeton,
  "trashed": booléen
}

Étape de flux de travail

{
  "id": Identifiant,
  "abbreviation": chaîne,
  "dateDeleted": Date,
  "dateTrashed": Date,
  "nom": chaîne,
  "order": commande,
  "tags": balise[],
  "trashed": booléen
}

Indice d'analyse

Agrégation de données

"data": {
  "children": {
    "type": "analysisType"
  }
}

Document parent

{
  "automationWidget": <AutomationWidget>,
  "project": <Projet>,
  "service": <Service>
}

Enfant Document

{
  "analyse": <Analyse>,
  "jobPart": <JobPart>,
  "job": <Job>,
  "netRateScheme": <NetRateScheme>,

  "priorité": nombre,
  "data": {
    "TA": {
      "correspondance0": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance100": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance50": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance75": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance85": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance95": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      }
    },
    "répétitions": {
      "caractères": nombre,
      "pages": nombre,
      "pourcentage": nombre,
      "segments": nombre,
      "mots": nombre
    },
    "MT": {
      "correspondance0": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance100": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance101": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance50": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance75": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance85": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      },
      "correspondance95": {
        "caractères": nombre,
        "pages": nombre,
        "pourcentage": nombre,
        "segments": nombre,
        "mots": nombre
      }
    },
    "total": {
      "caractères": nombre,
      "pages": nombre,
      "pourcentage": nombre,
      "segments": nombre,
      "mots": nombre
    }
  }
}

Index API

Agrégation de données

"data": {
  "children": {
    "type": "apiType"
  }
}

Document parent

{
  "user": <utilisateur>
}

Document enfant

{
  "request": {
    "date": Date,
    "host": chaîne,
    "ipv4": chaîne,
    "ipv6": chaîne,
    "location": chaîne,
    "method": chaîne
  },
  "response": {
    "date": Date,
    "duration": nombre,
    "status": nombre
  },
  "api": {
    "action": chaîne,
    "asynch": booléen,
    "type": chaîne,
    "uri": chaîne,
    "ver": chaîne
  }
}

Indice des coûts

Agrégation de données

"data": {
  "children": {
    "type": "costsType"
  }
}

Document parent

{
  "automationWidget": <AutomationWidget>,
  "project": <Projet>,
  "service": <Service>
}

Document enfant

{
  "analyse": <Analyse>,
  "job": <Tâche>,
  "jobPart": <JobPart>,
  "netRateScheme": <NetRateScheme>,
  "priceList": <PriceList>,
  "quote": <Devis>,
  "workflowStep": <Flux de travaux>,
  
  "priorité": nombre,
  "data": {
    "TA": {
      "correspondance0": number,
      "correspondance100": number,
      "correspondance50": number,
      "correspondance75": number,
      "correspondance85": number,
      "correspondance95": number
    },
    "répétitions": number
    "TM": {
      "correspondance0": number,
      "correspondance100": number,
      "correspondance101": number,
      "correspondance50": number,
      "correspondance75": number,
      "correspondance85": number,
      "correspondance95": number
    },
    "total": nombre
  }
}

Index de jobPart

Agrégation de données

"data": {
  "children": {
    "type": "jobPartType"
  }
}

Document parent

{
  "automationWidget": <AutomationWidget>,
  "project": <Projet>,
  "service": <Service>
}

Document enfant

{
  "job": <Tâche>,
  "jobPart": <JobPart>

  "data": {
    "counts": {
      "chars": {
      "total": nombre,
      "confirmed": nombre,
      "notConfirmed": nombre,
      "verrouillé": nombre,
      "nonVerrouillé": nombre,
      "confirméEtVerrouillé": nombre,
      "nonConfirméEtVerrouillé": nombre,
      "terminé": nombre,
      "nonTerminé": nombre
    },
    "groups": {
      "total": nombre
    },
    "segments": {
      "total": nombre,
      "confirmed": nombre,
      "notConfirmed": nombre,
      "verrouillé": nombre,
      "nonVerrouillé": nombre,
      "confirméEtVerrouillé": nombre,
      "nonConfirméEtVerrouillé": nombre,
      "terminé": nombre,
      "nonTerminé": nombre,
      "TA": {
        "postÉdité": nombre,
        "pertinent": nombre,
        "nonPertinent": nombre,
      },
      "qa": {
        "vérifié": nombre,
        "nonVérifié": nombre,
      }
    },
    "mots": {
      "total": nombre,
      "confirmé": nombre,
      "nonConfirmé": nombre,
      "verrouillé": nombre,
      "nonVerrouillé": nombre,
      "confirméEtVerrouillé": nombre,
      "nonConfirméEtVerrouillé": nombre,
      "terminé": nombre,
      "nonTerminé": nombre,
    },
    "qa": {
      "avertissements": nombre,
      "avertissements ignorés": nombre,
      "avertissements non ignorés": nombre
    }
  }
}

Exemples

  • Les requêtes HTTP sont exécutées dans Postman.

  • Connectez-vous via un profil PM ou administrateur, et obtenez un jeton de connexion en utilisant une API de connexion.

  • Requêtes POST à api/v3/analytics/jobPart?token=&lt;votre_jeton_de_connexion&gt;

Nombre total de tâches

Requête

{
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "data": {
      "doc_count": 14417
    }
  }
}

Sous le champ agrégations, l'agrégation data a répondu avec 14 417 documents de correspondance affichés dans le champ doc_count.

Nombre total de mots source

Requête

{
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      },
      "aggs": {
        "wordCount": {
          "sum": {
            "field": "data.volume.words"
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "data": {
      "doc_count": 14417,
      "wordCount": {
        "value": 6893067
      }
    }
  }
}

Nombre total de mots source divisé par langue cible

Requête

{
  "agrégations": {
    "data": {
      "enfants": {
        "type": "jobPartType"
      },
      "aggs": {
        "byTargetLanguage": {
          "terms": {
            "field": "job.targetLanguage",
            "size": 3
          },
          "aggs": {
            "wordCount": {
              "sum": {
                "field": "data.volume.words"
              }
            }
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "data": {
      "byTargetLanguage": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 10071,
        "buckets": [
          {
            "doc_count": 1835,
            "wordCount": {
              "value": 702721
            },
            "key": "cs"
          },
          {
            "doc_count": 1491,
            "wordCount": {
              "value": 2602529
            },
            "key": "de"
          },
          {
            "doc_count": 1020,
            "wordCount": {
              "value": 92676
            },
            "key": "fi"
          }
        ]
      },
      "doc_count": 14417
    }
  }
}

L'entité buckets est affichée dans la réponse. Lorsque le module analytique est sollicité pour diviser les données par une certaine catégorie, le résultat est représenté sous la forme d'une liste de buckets. Chaque bucket contient une clé qui définit quelles données ce bucket représente (dans ce cas, une langue cible) et une valeur (autres agrégations) propre à cette partie de l'ensemble de données.

Nombre total de tâches divisé par le statut du projet

Requête

{
  "agrégations": {
    "projectStatus": {
      "terms": {
        "field": "project.status"
      },
      "aggs": {
        "data": {
          "children": {
            "type": "jobPartType"
          }
        }
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 359
  },
  "agrégations": {
    "projectStatus": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "doc_count": 326,
          "data": {
            "doc_count": 14318
          },
          "key": "NEW"
        },
        {
          "doc_count": 31,
          "data": {
            "doc_count": 89
          },
          "key": "TERMINÉ"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 4
          },
          "key": "ASSIGNÉ"
        },
        {
          "doc_count": 1,
          "data": {
            "doc_count": 6
          },
          "key": "DECLINED_BY_VENDOR"
        }
      ]
    }
  }
}

Le module Analytics a été informé de diviser les données par le statut du projet avant l'agrégation data.

Nombre total de tâches provenant de nouveaux projets

Requête

{
  "filtre": {
    "terme": {
      "project.status": "NEW"
    }
  },
  "agrégations": {
    "data": {
      "children": {
        "type": "jobPartType"
      }
    }
  }
}

Réponse

{
  "hits": {
    "total": 326
  },
  "aggregations": {
    "data": {
      "doc_count": 14318
    }
  }
}

Le champ filtre est utilisé dans la requête. Cela réduit les données avant les agrégations suivantes.

Cet article vous a-t-il été utile ?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.