private DataSetBuilder getTrendReportData(
      final StaplerRequest request, String performanceReportNameFile) {

    DataSetBuilder<String, NumberOnlyBuildLabel> dataSet =
        new DataSetBuilder<String, NumberOnlyBuildLabel>();
    List<?> builds = getProject().getBuilds();
    List<Integer> buildsLimits = getFirstAndLastBuild(request, builds);

    int nbBuildsToAnalyze = builds.size();
    for (Iterator<?> iterator = builds.iterator(); iterator.hasNext(); ) {
      AbstractBuild<?, ?> currentBuild = (AbstractBuild<?, ?>) iterator.next();
      if (nbBuildsToAnalyze <= buildsLimits.get(1) && buildsLimits.get(0) <= nbBuildsToAnalyze) {
        NumberOnlyBuildLabel label = new NumberOnlyBuildLabel(currentBuild);
        PerformanceBuildAction performanceBuildAction =
            currentBuild.getAction(PerformanceBuildAction.class);
        if (performanceBuildAction == null) {
          continue;
        }
        PerformanceReport report = null;
        report =
            performanceBuildAction
                .getPerformanceReportMap()
                .getPerformanceReport(performanceReportNameFile);
        if (report == null) {
          nbBuildsToAnalyze--;
          continue;
        }
        dataSet.add(Math.round(report.getAverage()), Messages.ProjectAction_Average(), label);
        dataSet.add(Math.round(report.getMedian()), Messages.ProjectAction_Median(), label);
        dataSet.add(Math.round(report.get90Line()), Messages.ProjectAction_Line90(), label);
        dataSet.add(Math.round(report.getMin()), Messages.ProjectAction_Minimum(), label);
        dataSet.add(Math.round(report.getMax()), Messages.ProjectAction_Maximum(), label);
        dataSet.add(
            Math.round(report.errorPercent()), Messages.ProjectAction_PercentageOfErrors(), label);
        dataSet.add(Math.round(report.countErrors()), Messages.ProjectAction_Errors(), label);
      }
      nbBuildsToAnalyze--;
    }
    return dataSet;
  }