code: protected void validateParams() {
          // Event collection name is required.
          if (null == this.collectionName || this.collectionName.trim().isEmpty()) {
              throw new IllegalArgumentException(
                      "There must be an event collection name set to perform a CollectionAnalysis.");
          }
  
          // Timeframe is required.
          if (null == this.timeframe) {
              throw new IllegalArgumentException(
                      "A 'timeframe' parameter is required for a CollectionAnalysis");
          }
  
          // Group by does not support geo-filtering.
          if (null != this.groupBy && null != this.filters) {
              for (Filter filter : this.filters) {
                  if (filter.isGeoFilter()) {
                      throw new IllegalArgumentException("The 'group_by' parameter cannot be used " +
                              "in conjunction with geo-filtering.");
                  }
              }
          }
      }
docs: Ensures that all the parameters provided by the Builder when constructing this analysis
  follow the rules set forth in the <a href="https://keen.io/docs/api/#analyses">API Docs</a>.
  
  Some parameters require others, some are required always for certain analysis types, and
  some things are forbidden or just don't make sense, which could indicate an error in client
  code that needs addressing.
  
  @throws KeenQueryClientException if validation fails with specific reason for failure.