Excel Export failing with "missing-required-parameter"

Since one of the recent updates in December, the export to excel (or other formats) has started giving empty files for SQL questions with parameters. In digging further, we realised that this happens to mainly saved queries that have mandatory parameters.

Steps to repro -

  1. Pick a saved query that has "required" parameters. Fill those parameters and then run the query.

  2. Once the data is shown, export to excel and save to local system.

  3. Open excel file.

Workaround:

  • If we remove the parameters from the SQL and then hard-code the values within the SQL query, and then fetch data - then doing excel export after that works.

Feature used to work properly earlier (before 0.41.3), stopped working since we updated to 0.41.3, still broken on 0.41.5.

  • Screenshot of the parameters selected, and even data showing, just before export (please ignore the scribbles below!)

Logs:

[66d8ab8f-2779-49f6-b187-4eadbd969732] 2021-12-24T00:19:39+05:30 DEBUG metabase.server.middleware.log GET /api/card/529 200 42.7 ms (11 DB calls) App DB connections: 1/4 Jetty threads: 3/50 (4 idle, 0 queued) (113 total active threads) Queries in flight: 0 (0 queued)
[66d8ab8f-2779-49f6-b187-4eadbd969732] 2021-12-24T00:19:40+05:30 DEBUG metabase.server.middleware.log GET /api/alert/question/529 200 10.6 ms (1 DB calls) App DB connections: 0/4 Jetty threads: 3/50 (4 idle, 0 queued) (113 total active threads) Queries in flight: 0 (0 queued)
[66d8ab8f-2779-49f6-b187-4eadbd969732] 2021-12-24T00:19:40+05:30 DEBUG metabase.server.middleware.log GET /api/collection 200 9.8 ms (3 DB calls) App DB connections: 0/4 Jetty threads: 3/50 (4 idle, 0 queued) (113 total active threads) Queries in flight: 0 (0 queued)

[66d8ab8f-2779-49f6-b187-4eadbd969732] 2021-12-24T00:19:43+05:30 ERROR metabase.query-processor.middleware.catch-exceptions Error processing query: null
{:database_id 3,
 :started_at #t "2021-12-23T18:49:42.648277Z[GMT]",
 :via
 [{:status :failed,
   :class clojure.lang.ExceptionInfo,
   :error
   "Error determining value for parameter: You'll need to pick a value for 'From date' before this query can run.",
   :stacktrace
   ["--> driver.common.parameters.values$fn__81635$value_for_tag__81640$fn__81641.invoke(values.clj:331)"
    "driver.common.parameters.values$fn__81635$value_for_tag__81640.invoke(values.clj:324)"
    "driver.common.parameters.values$fn__81659$query__GT_params_map__81664$fn__81668$iter__81670__81674$fn__81675.invoke(values.clj:346)"
    "driver.common.parameters.values$fn__81659$query__GT_params_map__81664$fn__81668.invoke(values.clj:345)"
    "driver.common.parameters.values$fn__81659$query__GT_params_map__81664.invoke(values.clj:336)"
    "driver.sql$fn__81743$substitute_native_parameters__81736__81748$fn__81752.invoke(sql.clj:46)"
    "driver.sql$fn__81743$substitute_native_parameters__81736__81748.invoke(sql.clj:42)"
    "query_processor.middleware.parameters.native$expand_inner.invokeStatic(native.clj:39)"
    "query_processor.middleware.parameters.native$expand_inner.invoke(native.clj:30)"
    "query_processor.middleware.parameters$expand_one.invokeStatic(parameters.clj:50)"
    "query_processor.middleware.parameters$expand_one.invoke(parameters.clj:41)"
    "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
    "mbql.util.match.impl$replace_in_collection$iter__25741__25745$fn__25746.invoke(impl.cljc:44)"
    "mbql.util.match.impl$replace_in_collection.invokeStatic(impl.cljc:43)"
    "mbql.util.match.impl$replace_in_collection.invoke(impl.cljc:38)"
    "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:59)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:56)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
    "query_processor.middleware.parameters$expand_parameters.invokeStatic(parameters.clj:77)"
    "query_processor.middleware.parameters$expand_parameters.invoke(parameters.clj:73)"
    "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086$fn__48087.invoke(parameters.clj:82)"
    "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086.invoke(parameters.clj:79)"
    "query_processor.middleware.parameters$substitute_parameters$fn__48107.invoke(parameters.clj:111)"
    "query_processor.middleware.resolve_referenced$resolve_referenced_card_resources$fn__45315.invoke(resolve_referenced.clj:79)"
    "query_processor.middleware.expand_macros$expand_macros$fn__51425.invoke(expand_macros.clj:184)"
    "query_processor.middleware.add_timezone_info$add_timezone_info$fn__47886.invoke(add_timezone_info.clj:15)"
    "query_processor.middleware.splice_params_in_response$splice_params_in_response$fn__50370.invoke(splice_params_in_response.clj:32)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864$fn__49868.invoke(resolve_database_and_driver.clj:31)"
    "driver$do_with_driver.invokeStatic(driver.clj:60)"
    "driver$do_with_driver.invoke(driver.clj:56)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864.invoke(resolve_database_and_driver.clj:25)"
    "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__45865.invoke(fetch_source_query.clj:274)"
    "query_processor.middleware.store$initialize_store$fn__46053$fn__46054.invoke(store.clj:11)"
    "query_processor.store$do_with_store.invokeStatic(store.clj:44)"
    "query_processor.store$do_with_store.invoke(store.clj:38)"
    "query_processor.middleware.store$initialize_store$fn__46053.invoke(store.clj:10)"
    "query_processor.middleware.validate$validate_query$fn__50153.invoke(validate.clj:10)"
    "query_processor.middleware.normalize_query$normalize$fn__50160.invoke(normalize_query.clj:22)"
    "query_processor.middleware.add_rows_truncated$add_rows_truncated$fn__47832.invoke(add_rows_truncated.clj:35)"
    "query_processor.middleware.results_metadata$record_and_return_metadata_BANG_$fn__49130.invoke(results_metadata.clj:147)"
    "query_processor.middleware.constraints$add_default_userland_constraints$fn__47850.invoke(constraints.clj:42)"
    "query_processor.middleware.process_userland_query$process_userland_query$fn__50139.invoke(process_userland_query.clj:146)"
    "query_processor.middleware.catch_exceptions$catch_exceptions$fn__50450.invoke(catch_exceptions.clj:169)"
    "query_processor.reducible$async_qp$qp_STAR___42500$thunk__42501.invoke(reducible.clj:103)"
    "query_processor.reducible$async_qp$qp_STAR___42500$fn__42503.invoke(reducible.clj:108)"],
   :error_type :missing-required-parameter,
   :ex-data
   {:tag
    {:id "dd64d1d7-b7d7-51ec-7597-28ac88e25b0b",
     :name "from_date",
     :display-name "From date",
     :type :date,
     :required true},
    :type :missing-required-parameter}}
  {:status :failed,
   :class clojure.lang.ExceptionInfo,
   :error
   "Error building query parameter map: Error determining value for parameter: You'll need to pick a value for 'From date' before this query can run.",
   :stacktrace
   ["--> driver.common.parameters.values$fn__81659$query__GT_params_map__81664$fn__81668.invoke(values.clj:354)"
    "driver.common.parameters.values$fn__81659$query__GT_params_map__81664.invoke(values.clj:336)"
    "driver.sql$fn__81743$substitute_native_parameters__81736__81748$fn__81752.invoke(sql.clj:46)"
    "driver.sql$fn__81743$substitute_native_parameters__81736__81748.invoke(sql.clj:42)"
    "query_processor.middleware.parameters.native$expand_inner.invokeStatic(native.clj:39)"
    "query_processor.middleware.parameters.native$expand_inner.invoke(native.clj:30)"
    "query_processor.middleware.parameters$expand_one.invokeStatic(parameters.clj:50)"
    "query_processor.middleware.parameters$expand_one.invoke(parameters.clj:41)"
    "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
    "mbql.util.match.impl$replace_in_collection$iter__25741__25745$fn__25746.invoke(impl.cljc:44)"
    "mbql.util.match.impl$replace_in_collection.invokeStatic(impl.cljc:43)"
    "mbql.util.match.impl$replace_in_collection.invoke(impl.cljc:38)"
    "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:59)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:56)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
    "query_processor.middleware.parameters$expand_parameters.invokeStatic(parameters.clj:77)"
    "query_processor.middleware.parameters$expand_parameters.invoke(parameters.clj:73)"
    "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086$fn__48087.invoke(parameters.clj:82)"
    "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086.invoke(parameters.clj:79)"
    "query_processor.middleware.parameters$substitute_parameters$fn__48107.invoke(parameters.clj:111)"
    "query_processor.middleware.resolve_referenced$resolve_referenced_card_resources$fn__45315.invoke(resolve_referenced.clj:79)"
    "query_processor.middleware.expand_macros$expand_macros$fn__51425.invoke(expand_macros.clj:184)"
    "query_processor.middleware.add_timezone_info$add_timezone_info$fn__47886.invoke(add_timezone_info.clj:15)"
    "query_processor.middleware.splice_params_in_response$splice_params_in_response$fn__50370.invoke(splice_params_in_response.clj:32)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864$fn__49868.invoke(resolve_database_and_driver.clj:31)"
    "driver$do_with_driver.invokeStatic(driver.clj:60)"
    "driver$do_with_driver.invoke(driver.clj:56)"
    "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864.invoke(resolve_database_and_driver.clj:25)"
    "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__45865.invoke(fetch_source_query.clj:274)"
    "query_processor.middleware.store$initialize_store$fn__46053$fn__46054.invoke(store.clj:11)"
    "query_processor.store$do_with_store.invokeStatic(store.clj:44)"
    "query_processor.store$do_with_store.invoke(store.clj:38)"
    "query_processor.middleware.store$initialize_store$fn__46053.invoke(store.clj:10)"
    "query_processor.middleware.validate$validate_query$fn__50153.invoke(validate.clj:10)"
    "query_processor.middleware.normalize_query$normalize$fn__50160.invoke(normalize_query.clj:22)"
    "query_processor.middleware.add_rows_truncated$add_rows_truncated$fn__47832.invoke(add_rows_truncated.clj:35)"
    "query_processor.middleware.results_metadata$record_and_return_metadata_BANG_$fn__49130.invoke(results_metadata.clj:147)"
    "query_processor.middleware.constraints$add_default_userland_constraints$fn__47850.invoke(constraints.clj:42)"
    "query_processor.middleware.process_userland_query$process_userland_query$fn__50139.invoke(process_userland_query.clj:146)"
    "query_processor.middleware.catch_exceptions$catch_exceptions$fn__50450.invoke(catch_exceptions.clj:169)"
    "query_processor.reducible$async_qp$qp_STAR___42500$thunk__42501.invoke(reducible.clj:103)"
    "query_processor.reducible$async_qp$qp_STAR___42500$fn__42503.invoke(reducible.clj:108)"],
   :error_type :missing-required-parameter,
   :ex-data
   {:type :missing-required-parameter,
    :tags
    {"campaign_name"
     {:id "afe46f0f-aa64-97ba-8b31-498a803d7d7f", :name "campaign_name", :display-name "Campaign name", :type :text},
     "ad_group_name"
     {:id "0a3a9b24-3d7d-6bf5-5eec-de216b0cfde1", :name "ad_group_name", :display-name "Ad group name", :type :text},
     "keyword_name"
     {:id "bbffd06e-95ed-3cc8-4b76-65aa5a895da7", :name "keyword_name", :display-name "Keyword name", :type :text},
     "from_date"
     {:id "dd64d1d7-b7d7-51ec-7597-28ac88e25b0b",
      :name "from_date",
      :display-name "From date",
      :type :date,
      :required true},
     "to_date"
     {:id "9f66b506-b454-cdaa-2d1b-8156d39c606a",
      :name "to_date",
      :display-name "To date",
      :type :date,
      :required true}},
    :params nil}}],
 :error_type :missing-required-parameter,
 :json_query
 {:constraints {:max-results 10000, :max-results-bare-rows 2000},
  :type :native,
  :middleware {:js-int-to-string? true, :ignore-cached-results? false, :process-viz-settings? false},
  :native
  {:query
   "with \n\n------------------------------------------------------------------\n-- Step 1: Get the users who have First Launch or Purchased events falling in the date range specified\nfirst_launch_users as\n(Select analytics_user_id, app_code, geo_country, min(dvce_created_tstamp) first_launch_date,\ngeo_country as currency_code,\nmax(case when(analytics.events.name = 'Purchased') then (case \nwhen analytics.events.event_properties is not null then json_extract_path_text(analytics.events.event_properties, 'Amount') \nelse '0' end) else '0' end) as amount\nfrom analytics.events\nwhere analytics.events.name in ('First Launch', 'Purchased')\nand analytics.events.dvce_created_tstamp >= {{from_date}} and analytics.events.dvce_created_tstamp < DATEADD(day, 1, {{to_date}})\ngroup by analytics_user_id,app_code,geo_country),\n\n------------------------------------------------------------------\n-- Step 2: Get the campaign details from the campaign detail table for matching campaign, ad group and keyword names.\nsearch_ads_table as (\nSELECT analytics.ad_group_campaign_detail.ad_group_id AS ad_group_id, analytics.ad_group_campaign_detail.ad_group_name AS ad_group_name, \nanalytics.ad_group_campaign_detail.campaign_id AS campaign_id, analytics.ad_group_campaign_detail.campaign_name AS campaign_name, analytics.ad_group_campaign_detail.keyword_id AS keyword_id,\nanalytics.ad_group_campaign_detail.keyword_name AS keyword_name\nFROM analytics.ad_group_campaign_detail\nWHERE true\n   [[AND (lower(analytics.ad_group_campaign_detail.campaign_name) like concat(concat('%',lower({{campaign_name}})),'%'))]]\n   [[and (lower(analytics.ad_group_campaign_detail.ad_group_name) like concat(concat('%',lower({{ad_group_name}})),'%'))]]\n   [[AND (lower(analytics.ad_group_campaign_detail.keyword_name) like concat(concat('%',lower({{keyword_name}})),'%'))]]\n   ),\n\n------------------------------------------------------------------\n-- Step 3: For users from Step 1, get the attribution details in the old way.\nold_attribution_data as\n(SELECT distinct f.analytics_user_id, f.app_code, f.geo_country, f.currency_code, f.first_launch_date, f.amount, max(\"analytics\".\"events\".event_properties) as event_properties,\n(case \nwhen is_valid_json(event_properties) and json_extract_path_text(REPLACE(json_extract_path_text(event_properties, 'attributionDetails'), '\\\\\"', '\"'), 'Version3.1') <> '' then json_extract_path_text(REPLACE(json_extract_path_text(event_properties, 'attributionDetails'), '\\\\\"', '\"'), 'Version3.1') \nwhen is_valid_json(event_properties) then event_properties \nelse '{}' end) as parsed_properties\nFROM first_launch_users f\njoin \"analytics\".\"events\" on f.analytics_user_id =  \"analytics\".\"events\".analytics_user_id and f.app_code = \"analytics\".\"events\".app_code\nWHERE (\"analytics\".\"events\".\"name\" = 'Install Attributed'\n   AND \"analytics\".\"events\".\"event_properties\" IS NOT NULL\n   AND (\"analytics\".\"events\".\"event_properties\" not like '%iad-attribution__:__false%')\n   AND (\"analytics\".\"events\".\"event_properties\" not like '%{\"attributionDetails\":\"{}\"}%')\n   AND (\"analytics\".\"events\".\"event_properties\" not like '{}')\n   AND (NOT (\"analytics\".\"events\".\"event_properties\" like '%1234567890%'))) \n   group by f.\"analytics_user_id\", f.app_code, f.geo_country, f.currency_code, f.first_launch_date, f.amount, \"analytics\".\"events\".event_properties),\n   \nold_parsed_attribution_data as  \n(select\nanalytics_user_id,\napp_code,\ngeo_country,\ncurrency_code,\nfirst_launch_date, \namount,\ncase when json_extract_path_text(parsed_properties, 'iad-campaign-id') <> '' then json_extract_path_text(parsed_properties, 'iad-campaign-id') else json_extract_path_text(parsed_properties, 'CampaignId') end as campaign_id, \ncase when json_extract_path_text(parsed_properties, 'iad-adgroup-id') <> '' then json_extract_path_text(parsed_properties, 'iad-adgroup-id') else  json_extract_path_text(parsed_properties, 'AdgroupId') end as ad_group_id, \ncase when json_extract_path_text(parsed_properties, 'iad-keyword-id') <> '' then json_extract_path_text(parsed_properties, 'iad-keyword-id') else json_extract_path_text(parsed_properties, 'KeywordId') end as keyword_id\nfrom old_attribution_data\n),\n\nold_final_attribution_data as(\nselect sat.campaign_name,sat.ad_group_name,sat.keyword_name,aid.*\nfrom \nold_parsed_attribution_data aid\njoin search_ads_table sat \non \naid.campaign_id=sat.campaign_id and aid.ad_group_id=sat.ad_group_id and aid.keyword_id = sat.keyword_id\n),\n\n------------------------------------------------------------------\n-- Step 4: For users from Step 1, get the attribution details in the new way.\nnew_attribution_data as (\n select distinct f.analytics_user_id, f.app_code, f.geo_country, f.currency_code, f.first_launch_date, f.amount,\n json_extract_path_text(u.attributes, 'campaignId') as campaign_id, \n json_extract_path_text(u.attributes, 'adGroupId')  as ad_group_id, \n json_extract_path_text(u.attributes, 'keywordId')  as keyword_id\n from first_launch_users f\n join atomic.user_attribution_details u on f.analytics_user_id = u.analytics_id and f.app_code = (case when u.app_code IS NULL or u.app_code = '' THEN 'mm1_free' else u.app_code end) \n WHERE  (u.attributes like '%\"attribution\":true%')\n    and (u.attributes not like '%\"campaignId\":1234567890%')\n    and (u.attributes not like '%\"adGroupId\":1234567890%')\n    and (u.attributes not like '%\"keywordId\":12323222%')\n    and (u.attributes <>'')\n group by f.analytics_user_id, f.app_code, f.geo_country, f.currency_code, f.first_launch_date, f.amount, u.attributes\n),\n\nnew_final_attribution_data as(\nselect sat.campaign_name,sat.ad_group_name,sat.keyword_name,aid.*\nfrom \nnew_attribution_data aid\njoin search_ads_table sat \non \naid.campaign_id=sat.campaign_id and aid.ad_group_id=sat.ad_group_id and aid.keyword_id = sat.keyword_id\n),\n\n----------------------------------------------------------------------\n-- Step 5: Merge old and new way users.\nfinal_merged_attribution_data as (\nselect * from old_final_attribution_data  \nunion\nselect * from new_final_attribution_data\n),\n\n----------------------------------------------------------------------\n-- Step 6: Get customer_type from user subscription details table.\nfinal_subscriber_attribution_data as  \n(Select distinct flu.*, usd.customer_type, usd.original_purchase_date\nfrom final_merged_attribution_data as flu\nleft join analytics.user_subscripton_details usd on flu.analytics_user_id = usd.analytics_id and flu.app_code = usd.app_code)\n\n----------------------------------------------------------------------\n-- Step 7: Final report query.\nselect\ncampaign_name,\nad_group_name,\nkeyword_name,\ncount(distinct analytics_user_id) total_users,\nsum(case when ((first_launch_date <= original_purchase_date) and (customer_type = 'TRIAL_SUBSCRIPTION' or customer_type = 'SUBSCRIPTION' or customer_type = 'EXPIRED_SUBSCRIPTION' or customer_type = 'CANCELLED_SUBSCRIPTION' or customer_type = 'NAR_SUBSCRIPTION' or customer_type = 'NAR_TRIAL_SUBSCRIPTION')) then 1 else 0 end) total_activations,\nsum(case when ((first_launch_date <= original_purchase_date) and (customer_type = 'SUBSCRIPTION')) then 1 else 0 end) total_subscribers,\ncurrency_code as country_code,\nsum(case when ((first_launch_date <= original_purchase_date) and (customer_type = 'SUBSCRIPTION')) then CONVERT(numeric(8,2), amount) else 0 end) approx_gross_revenue\nfrom final_subscriber_attribution_data s\ngroup by s.campaign_name, s.ad_group_name, s.keyword_name, s.currency_code\norder by total_subscribers desc, total_activations desc, total_users desc, campaign_name asc, ad_group_name asc, keyword_name asc\n",
   :template-tags
   {"campaign_name"
    {:id "afe46f0f-aa64-97ba-8b31-498a803d7d7f", :name "campaign_name", :display-name "Campaign name", :type :text},
    "ad_group_name"
    {:id "0a3a9b24-3d7d-6bf5-5eec-de216b0cfde1", :name "ad_group_name", :display-name "Ad group name", :type :text},
    "keyword_name"
    {:id "bbffd06e-95ed-3cc8-4b76-65aa5a895da7", :name "keyword_name", :display-name "Keyword name", :type :text},
    "from_date"
    {:id "dd64d1d7-b7d7-51ec-7597-28ac88e25b0b",
     :name "from_date",
     :display-name "From date",
     :type :date,
     :required true},
    "to_date"
    {:id "9f66b506-b454-cdaa-2d1b-8156d39c606a",
     :name "to_date",
     :display-name "To date",
     :type :date,
     :required true}}},
  :database 3,
  :parameters [],
  :async? true,
  :cache-ttl nil},
 :status :failed,
 :class clojure.lang.ExceptionInfo,
 :stacktrace
 ["--> driver.common.parameters.values$missing_required_param_exception.invokeStatic(values.clj:97)"
  "driver.common.parameters.values$missing_required_param_exception.invoke(values.clj:96)"
  "driver.common.parameters.values$fn__81412$default_value_for_tag__81417$fn__81421.invoke(values.clj:197)"
  "driver.common.parameters.values$fn__81412$default_value_for_tag__81417.invoke(values.clj:191)"
  "driver.common.parameters.values$fn__81441$param_value_for_tag__81446$fn__81450.invoke(values.clj:201)"
  "driver.common.parameters.values$fn__81441$param_value_for_tag__81446.invoke(values.clj:199)"
  "driver.common.parameters.values$fn__81469.invokeStatic(values.clj:214)"
  "driver.common.parameters.values$fn__81469.invoke(values.clj:212)"
  "driver.common.parameters.values$fn__81635$value_for_tag__81640$fn__81641.invoke(values.clj:329)"
  "driver.common.parameters.values$fn__81635$value_for_tag__81640.invoke(values.clj:324)"
  "driver.common.parameters.values$fn__81659$query__GT_params_map__81664$fn__81668$iter__81670__81674$fn__81675.invoke(values.clj:346)"
  "driver.common.parameters.values$fn__81659$query__GT_params_map__81664$fn__81668.invoke(values.clj:345)"
  "driver.common.parameters.values$fn__81659$query__GT_params_map__81664.invoke(values.clj:336)"
  "driver.sql$fn__81743$substitute_native_parameters__81736__81748$fn__81752.invoke(sql.clj:46)"
  "driver.sql$fn__81743$substitute_native_parameters__81736__81748.invoke(sql.clj:42)"
  "query_processor.middleware.parameters.native$expand_inner.invokeStatic(native.clj:39)"
  "query_processor.middleware.parameters.native$expand_inner.invoke(native.clj:30)"
  "query_processor.middleware.parameters$expand_one.invokeStatic(parameters.clj:50)"
  "query_processor.middleware.parameters$expand_one.invoke(parameters.clj:41)"
  "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
  "mbql.util.match.impl$replace_in_collection$iter__25741__25745$fn__25746.invoke(impl.cljc:44)"
  "mbql.util.match.impl$replace_in_collection.invokeStatic(impl.cljc:43)"
  "mbql.util.match.impl$replace_in_collection.invoke(impl.cljc:38)"
  "query_processor.middleware.parameters$expand_all$replace_48065__48066.invoke(parameters.clj:59)"
  "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:59)"
  "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
  "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:56)"
  "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:53)"
  "query_processor.middleware.parameters$expand_parameters.invokeStatic(parameters.clj:77)"
  "query_processor.middleware.parameters$expand_parameters.invoke(parameters.clj:73)"
  "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086$fn__48087.invoke(parameters.clj:82)"
  "query_processor.middleware.parameters$fn__48081$substitute_parameters_STAR___48086.invoke(parameters.clj:79)"
  "query_processor.middleware.parameters$substitute_parameters$fn__48107.invoke(parameters.clj:111)"
  "query_processor.middleware.resolve_referenced$resolve_referenced_card_resources$fn__45315.invoke(resolve_referenced.clj:79)"
  "query_processor.middleware.expand_macros$expand_macros$fn__51425.invoke(expand_macros.clj:184)"
  "query_processor.middleware.add_timezone_info$add_timezone_info$fn__47886.invoke(add_timezone_info.clj:15)"
  "query_processor.middleware.splice_params_in_response$splice_params_in_response$fn__50370.invoke(splice_params_in_response.clj:32)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864$fn__49868.invoke(resolve_database_and_driver.clj:31)"
  "driver$do_with_driver.invokeStatic(driver.clj:60)"
  "driver$do_with_driver.invoke(driver.clj:56)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__49864.invoke(resolve_database_and_driver.clj:25)"
  "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__45865.invoke(fetch_source_query.clj:274)"
  "query_processor.middleware.store$initialize_store$fn__46053$fn__46054.invoke(store.clj:11)"
  "query_processor.store$do_with_store.invokeStatic(store.clj:44)"
  "query_processor.store$do_with_store.invoke(store.clj:38)"
  "query_processor.middleware.store$initialize_store$fn__46053.invoke(store.clj:10)"
  "query_processor.middleware.validate$validate_query$fn__50153.invoke(validate.clj:10)"
  "query_processor.middleware.normalize_query$normalize$fn__50160.invoke(normalize_query.clj:22)"
  "query_processor.middleware.add_rows_truncated$add_rows_truncated$fn__47832.invoke(add_rows_truncated.clj:35)"
  "query_processor.middleware.results_metadata$record_and_return_metadata_BANG_$fn__49130.invoke(results_metadata.clj:147)"
  "query_processor.middleware.constraints$add_default_userland_constraints$fn__47850.invoke(constraints.clj:42)"
  "query_processor.middleware.process_userland_query$process_userland_query$fn__50139.invoke(process_userland_query.clj:146)"
  "query_processor.middleware.catch_exceptions$catch_exceptions$fn__50450.invoke(catch_exceptions.clj:169)"
  "query_processor.reducible$async_qp$qp_STAR___42500$thunk__42501.invoke(reducible.clj:103)"
  "query_processor.reducible$async_qp$qp_STAR___42500$fn__42503.invoke(reducible.clj:108)"],
 :card_id 529,
 :context :question,
 :error "You'll need to pick a value for 'From date' before this query can run.",
 :row_count 0,
 :running_time 0,
 :ex-data {:type :missing-required-parameter},
 :data {:rows [], :cols []}}

Hi @shenoyroopesh

A couple of things.

Your description of empty files sounds like this:
https://github.com/metabase/metabase/issues/19465 - upvote by clicking :+1: on the first post
But the rest sounds like another problem. Perhaps the problem is just empty export, nothing else?

Though, I'm noticing that your question is unsaved (I can see the Save button in the screenshot). Does it make any difference if your question is saved or unsaved?

I cannot reproduce by taking a question with required filters and trying to export.
But your stacktrace doesn't look like it's from when you tried to export, but just viewed the question normally.