@Override
 protected Set<PortletExecutionAggregationKey> createAggregationsQueryKeyset(
     Set<PortletExecutionAggregationDiscriminator> columnDiscriminators,
     PortletExecutionReportForm form) {
   // Create keys (that exclude the temporal date/time information) from the interval
   // and the data in the column discriminators.
   final AggregationInterval interval = form.getInterval();
   final HashSet<PortletExecutionAggregationKey> keys =
       new HashSet<PortletExecutionAggregationKey>();
   for (PortletExecutionAggregationDiscriminator discriminator : columnDiscriminators) {
     keys.add(
         new PortletExecutionAggregationKeyImpl(
             interval,
             discriminator.getAggregatedGroup(),
             discriminator.getPortletMapping(),
             discriminator.getExecutionType()));
   }
   return keys;
 }
  /**
   * Create column descriptions for the portlet report using the configured report labelling
   * strategy.
   *
   * @param reportColumnDiscriminator
   * @param form The original query form
   * @return
   */
  @Override
  protected List<ColumnDescription> getColumnDescriptions(
      PortletExecutionAggregationDiscriminator reportColumnDiscriminator,
      PortletExecutionReportForm form) {
    int groupSize = form.getGroups().size();
    int portletSize = form.getPortlets().size();
    int executionTypeSize = form.getExecutionTypeNames().size();

    String portletName = reportColumnDiscriminator.getPortletMapping().getFname();
    String groupName = reportColumnDiscriminator.getAggregatedGroup().getGroupName();
    String executionTypeName = reportColumnDiscriminator.getExecutionType().getName();

    TitleAndCount[] items =
        new TitleAndCount[] {
          new TitleAndCount(portletName, portletSize),
          new TitleAndCount(executionTypeName, executionTypeSize),
          new TitleAndCount(groupName, groupSize)
        };

    return titleAndColumnDescriptionStrategy.getColumnDescriptions(
        items, showFullColumnHeaderDescriptions(form), form);
  }