{"record":{"id":"9b03ab4566025832","repo":"apache/superset","slug":"please-choose-at-least-one-groupby","errorCode":null,"errorMessage":"Please choose at least one groupby","messagePattern":"Please choose at least one groupby","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"superset-frontend/plugins/plugin-chart-partition/src/transformData.ts","lineNumber":369,"sourceCode":"    })),\n  }));\n}\n\n/**\n * Ports the legacy PartitionViz.get_data dispatch across the\n * time-series options.\n */\nexport default function transformData(\n  records: Row[],\n  options: Options,\n): PartitionNode[] {\n  const {\n    groupbyLabels,\n    metricLabels,\n    timeSeriesOption = 'not_time',\n  } = options;\n  if (groupbyLabels.length === 0) {\n    throw new Error('Please choose at least one groupby');\n  }\n  if (records.length === 0) {\n    return []; // the legacy endpoint returned no data for an empty frame\n  }\n  if (timeSeriesOption === 'not_time' || timeSeriesOption === 'agg_sum') {\n    return nestAggregates(records, groupbyLabels, metricLabels, 'sum');\n  }\n  if (timeSeriesOption === 'agg_mean') {\n    return nestAggregates(records, groupbyLabels, metricLabels, 'mean');\n  }\n  if (\n    timeSeriesOption === 'point_diff' ||\n    timeSeriesOption === 'point_factor' ||\n    timeSeriesOption === 'point_percent'\n  ) {\n    return nestPointComparison(\n      records,\n      groupbyLabels,","sourceCodeStart":351,"sourceCodeEnd":387,"githubUrl":"https://github.com/apache/superset/blob/f4587218dd19d046c3e4d00063e7d27f8a2ed354/superset-frontend/plugins/plugin-chart-partition/src/transformData.ts#L351-L387","documentation":"The generic Exception handler in update_recipients: any failure that is not NotificationParamException or SlackChannelListingClientError (e.g. DB flush errors, unexpected AttributeError, network stack failure) is logged with full traceback and re-raised as UpdateFailedError with the same 'Failed to update slack recipients to v2: {ex}' message. Because the exception fires before recipient mutation, no recipients are left half-converted.","triggerScenarios":"Exceptions during pending-list building or resolution outside the guarded classes — json.dumps failure on resolved configs, session errors, NoneType bugs on malformed related objects, or Slack HTTP client raising an unexpected error type during channel ID resolution.","commonSituations":"Metadata DB connectivity blips during execution; version skew between superset and the Slack client library; corrupted related ReportRecipients rows causing attribute errors.","solutions":["Pull the full traceback from worker logs (logger.exception wrote it) to find the failing line.","Address the root cause: DB session health, library versions, or the malformed row identified in the trace.","Retry execution — update_recipients is idempotent up to that point (state snapshot _upgraded_recipient_state is only set on success)."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    command.run()\nexcept UpdateFailedError as ex:\n    capture_exception(ex.__cause__)  # real traceback via logger.exception\n    retry_with_backoff()  # safe: recipients are only mutated on success","preventionTips":["Keep metadata DB connectivity stable during scheduled execution windows.","Pin the Slack client library version; upgrade Superset and its deps together.","Note the operation is not applied on failure, so retries are safe."],"tags":["slack","migration","catch-all","recipients"],"backgroundTag":null,"analyzedSha":"f4587218dd19d046c3e4d00063e7d27f8a2ed354","analyzedAt":"2026-08-14T22:39:27.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}