組織の実績工数の取得
工数分析 API を使用することで、指定した組織に所属するユーザーが入力した実績工数を集計できます。
POST /analytics/timeEntities
集計対象の指定
リクエストボディの fields パラメータに集計対象のフィールドとフィールドの集計方法を指定します。
実績工数を集計する場合、集計対象のフィールドの名前 name には actualTime、フィールドの集計方 法 calcBy には sum を指定します。
  "fields": [
    {
      "name": "actualTime",
      "calcBy": "sum"
    }
  ],
分析軸の指定
リクエストボディの groups パラメータに分析軸となるディメンションとグループ化の粒度を指定します。
組織ごとの実績工数を集計する場合、ディメンションの名前 name には user、グループ化の粒度 granularity には organization を指定します。
  "groups": [
    {
      "name": "user",  
      "granularity": "organization"
    }
  ],
ここではさらに実績工数を月単位で集計するために、groups パラメータにディメンションの名前 date、グループ化の粒度 month の指定を追加します。
  "groups": [
    {
      "name": "user",  
      "granularity": "organization"
    },
    {
      "name": "date",
      "granularity": "month"
    }
  ],
日単位での集計の場合は date、週単位での集計の場合は week を指定します。
条件式の指定
リクエストボディの filterBy パラメータに集計の条件を指定します。
条件は、対象となるフィールドの名前、演算子、値を用いて true または false に評価される式で表します。
<フィールド名> <演算子> <値>
Web API では条件式を JSON オブジェクトで表現するため、上記の条件式は Web API のリクエストでは以下のようになります。
{
  "type": <演算子>,
  "left": {
    "type": "field",
    "name": <フィールド名>
  },
  "right": {
    "type": "value",
    "value": <値>
  }
}
複数の条件式を論理演算子(AND や OR)を用いて組み合わせることもできます。
条件式1 AND 条件式2
上記の条件式の JSON オブジェクトでの表現は次のようになります。
{
  "type": "and",
  "children": [
    条件式1,
    条件式2
  ]
}
ここでは、実績工数を集計する期間を指定します。
これは date フィールドに対して ge 演算子と le 演算子を使用した次のような条件式で表せます。
{
  "type": "and",
  "children": [
    {
      "type": "ge",
      "left": {
        "type": "field",
        "name": "date"
      },
      "right": {
        "type": "value",
        "value": "2022-04-01"
      }
    },
    {
      "type": "le",
      "left": {
        "type": "filed",
        "name": "date"
      },
      "right": {
        "type": "value",
        "value": "2022-09-30"
      }
    }
  ]
}
geは greater than or equal to の略で「大きいか等しい(以上)」を表し、左辺(left)に指定したフィールドの値が右辺(right)に指定した値以上の場合に true となります。leは less than or equal to の略で「小さいか等しい(以下)」を表し、左辺に指定したフィールドの値が右辺に指定した値以下の場合に true となります。
さらに集計対象の組織を指定する場合は、次のような条件式を追加します。
{
  "type": "in",
  "left": {
    "type": "field",
    "name": "organizationId"
  },
  "right": {
    "type": "value",
    "value": "72"
  }
}
in 演算子は、左辺に指定したフィールドが、右辺に指定したいずれかの値に等しい  場合に true となります。
値はカンマ区切りで複数指定できます。
in 演算子を organizationId フィールドとともに使用した場合は特別な意味となり、指定したいずれかの ID の組織またはその配下の組織に一致する場合に true となります。
この例の場合、ID:72 の組織または ID:72 の組織の配下にあるいずれかの組織に所属するユーザーの実績工数が集計対象となります。
Web API を実行する
リクエストは次のようになります。
POST /analytics/timeEntities
{
  "fields": [
    {
      "name": "actualTime",
      "calcBy": "sum"
    }
  ],
  "groups": [
    {
      "name": "user",
      "granularity": "organization"
    },
    {
      "name": "date",
      "granularity": "month"
    }
  ],
  "filterBy": {
    "type": "and",
    "children": [
      {
        "type": "ge",
        "left": {
          "type": "field",
          "name": "date"
        },
        "right": {
          "type": "value",
          "value": "2022-04-01"
        }
      },
      {
        "type": "le",
        "left": {
          "type": "filed",
          "name": "date"
        },
        "right": {
          "type": "value",
          "value": "2022-09-30"
        }
      },
      {
        "type": "in",
        "left": {
          "type": "field",
          "name": "organizationId"
        },
        "right": {
          "type": "value",
          "value": "72"
        }
      }
    ]
  }
}
次のようなレスポンスが返ります。
{
  "factData": [
    {
      "values": {
        "date": "2022/04/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "31200"
      }
    },
    {
      "values": {
        "date": "2022/04/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "25260"
      }
    },
    {
      "values": {
        "date": "2022/05/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "52800"
      }
    },
    {
      "values": {
        "date": "2022/05/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "41790"
      }
    },
    {
      "values": {
        "date": "2022/06/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "52800"
      }
    },
    {
      "values": {
        "date": "2022/06/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "46260"
      }
    },
    {
      "values": {
        "date": "2022/07/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "49530"
      }
    },
    {
      "values": {
        "date": "2022/07/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "43410"
      }
    },
    {
      "values": {
        "date": "2022/08/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "55230"
      }
    },
    {
      "values": {
        "date": "2022/08/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "44640"
      }
    },
    {
      "values": {
        "date": "2022/09/01 0:00:00",
        "organizationId": "6",
        "organizationName": "開発1課",
        "actualTime": "58380"
      }
    },
    {
      "values": {
        "date": "2022/09/01 0:00:00",
        "organizationId": "7",
        "organizationName": "開発2課",
        "actualTime": "48030"
      }
    }
  ]
}
レスポンスに含まれるフィールドはリクエストの groups パラメータの指定によって異なります。
詳細は次のリンクを参照ください。:分析APIのファクトとディメンション」