{"record":{"id":"8fc3f87d114ba07b","repo":"getredash/redash","slug":"results-format-not-supported","errorCode":null,"errorMessage":"Results format not supported","messagePattern":"Results format not supported","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"redash/query_runner/google_analytics.py","lineNumber":71,"sourceCode":"\n    rows = []\n    for r in response.get(\"rows\", []):\n        d = {}\n        for c, value in enumerate(r):\n            column_name = response[\"columnHeaders\"][c][\"name\"]\n            column_type = [col for col in columns if col[\"name\"] == column_name][0][\"type\"]\n\n            # mcf results come a bit different than ga results:\n            if isinstance(value, dict):\n                if \"primitiveValue\" in value:\n                    value = value[\"primitiveValue\"]\n                elif \"conversionPathValue\" in value:\n                    steps = []\n                    for step in value[\"conversionPathValue\"]:\n                        steps.append(\"{}:{}\".format(step[\"interactionType\"], step[\"nodeValue\"]))\n                    value = \", \".join(steps)\n                else:\n                    raise Exception(\"Results format not supported\")\n\n            if column_type == TYPE_DATE:\n                value = datetime.strptime(value, \"%Y%m%d\")\n            elif column_type == TYPE_DATETIME:\n                if len(value) == 10:\n                    value = datetime.strptime(value, \"%Y%m%d%H\")\n                elif len(value) == 12:\n                    value = datetime.strptime(value, \"%Y%m%d%H%M\")\n                else:\n                    raise Exception(\"Unknown date/time format in results: '{}'\".format(value))\n\n            d[column_name] = value\n        rows.append(d)\n\n    return {\"columns\": columns, \"rows\": rows}\n\n\nclass GoogleAnalytics(BaseSQLQueryRunner):","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/getredash/redash/blob/ca79fe988d81cdac9675b412f3dfcab107bc1fbc/redash/query_runner/google_analytics.py#L53-L89","documentation":"Google Analytics v3 query runner's parse_ga_response converts each cell value based on its column type. It handles strings, numbers, and mcf: conversionPathValue steps; any other non-scalar structure falls into the else branch and raises 'Results format not supported'.","triggerScenarios":"Selecting mcf: (Multi-Channel Funnels) metrics/dimensions whose values are dicts of a shape other than conversionPathValue, or any GA response cell that arrives as a list/dict the runner does not recognize.","commonSituations":"Mixing mcf: and ga: fields, using newly added GA dimensions that return structured values, querying the MCF reporting API with unsupported metrics.","solutions":["Remove the mcf: metric/dimension producing structured values and re-run","Restructure the query to use only ga: scalar metrics/dimensions","Handle the response client-side via the json_ds runner hitting the GA API directly"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"def is_supported_ga_value(v) -> bool:\n    return v is None or isinstance(v, (str, int, float)) or (isinstance(v, dict) and \"conversionPathValue\" in v)","typeGuard":null,"tryCatchPattern":"try:\n    result = parse_ga_response(columns, rows)\nexcept Exception as e:\n    if \"Results format not supported\" in str(e):\n        drop_structured_metrics_and_retry()","preventionTips":["Avoid mcf: metrics that return structured values","Stick to scalar ga: metrics in visualizations","Preview query results before building dashboards"],"tags":["google-analytics","parsing","mcf"],"backgroundTag":"response-parse-failure","analyzedSha":"ca79fe988d81cdac9675b412f3dfcab107bc1fbc","analyzedAt":"2026-08-28T18:32:34.637Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}