Hi!
I encounter a problem whith pivot table :
request works fine (metabse or phpmyadmin), graph work fine, but pivot table crash ... i do not understand : is it a "null" value causing the crash ? something else ?
sql :
SELECT
MAKEDATE(YEAR(__mb_source.datef), 1) AS datef,
__mb_source.Llx Categorie - Fk Categorie__label AS Llx Categorie - Fk Categorie__label,
__mb_source.Llx Categorie - Rowid__label AS Llx Categorie - Rowid__label,
__mb_source.Llx Societe - Fk Soc__nom AS Llx Societe - Fk Soc__nom,
__mb_source.Llx Product - Fk Product__ref AS Llx Product - Fk Product__ref,
SUM(__mb_source.Llx Facturedet - Rowid__total_ht) AS sum,
SUM(__mb_source.Marge) AS sum_2,
SUM(__mb_source.Llx Facturedet - Rowid__qty) AS sum_3
FROM
(
SELECT
Llx Facturedet - Rowid.total_ht AS Llx Facturedet - Rowid__total_ht,
Llx Facturedet - Rowid.total_ht - (
Llx Facturedet - Rowid.buy_price_ht * Llx Facturedet - Rowid.qty
) AS Marge,
Llx Facturedet - Rowid.qty AS Llx Facturedet - Rowid__qty,
llx_facture.datef AS datef,
Llx Categorie - Fk Categorie.label AS Llx Categorie - Fk Categorie__label,
Llx Categorie - Rowid.label AS Llx Categorie - Rowid__label,
Llx Societe - Fk Soc.nom AS Llx Societe - Fk Soc__nom,
Llx Product - Fk Product.ref AS Llx Product - Fk Product__ref
FROM
llx_facture
LEFT JOIN (
SELECT
llx_facturedet.rowid AS rowid,
llx_facturedet.fk_facture AS fk_facture,
llx_facturedet.fk_parent_line AS fk_parent_line,
llx_facturedet.fk_product AS fk_product,
llx_facturedet.label AS label,
llx_facturedet.description AS description,
llx_facturedet.tva_tx AS tva_tx,
llx_facturedet.vat_src_code AS vat_src_code,
llx_facturedet.localtax1_tx AS localtax1_tx,
llx_facturedet.localtax1_type AS localtax1_type,
llx_facturedet.localtax2_tx AS localtax2_tx,
llx_facturedet.localtax2_type AS localtax2_type,
llx_facturedet.qty AS qty,
llx_facturedet.remise_percent AS remise_percent,
llx_facturedet.remise AS remise,
llx_facturedet.fk_remise_except AS fk_remise_except,
llx_facturedet.subprice AS subprice,
llx_facturedet.price AS price,
llx_facturedet.total_ht AS total_ht,
llx_facturedet.total_tva AS total_tva,
llx_facturedet.total_localtax1 AS total_localtax1,
llx_facturedet.total_localtax2 AS total_localtax2,
llx_facturedet.total_ttc AS total_ttc,
llx_facturedet.product_type AS product_type,
llx_facturedet.date_start AS date_start,
llx_facturedet.date_end AS date_end,
llx_facturedet.info_bits AS info_bits,
llx_facturedet.buy_price_ht AS buy_price_ht,
llx_facturedet.fk_product_fournisseur_price AS fk_product_fournisseur_price,
llx_facturedet.fk_code_ventilation AS fk_code_ventilation,
llx_facturedet.special_code AS special_code,
llx_facturedet.rang AS rang,
llx_facturedet.fk_contract_line AS fk_contract_line,
llx_facturedet.import_key AS import_key,
llx_facturedet.situation_percent AS situation_percent,
llx_facturedet.fk_prev_id AS fk_prev_id,
llx_facturedet.fk_unit AS fk_unit,
llx_facturedet.fk_user_modif AS fk_user_modif,
llx_facturedet.fk_user_author AS fk_user_author,
llx_facturedet.fk_multicurrency AS fk_multicurrency,
llx_facturedet.multicurrency_code AS multicurrency_code,
llx_facturedet.multicurrency_subprice AS multicurrency_subprice,
llx_facturedet.multicurrency_total_ht AS multicurrency_total_ht,
llx_facturedet.multicurrency_total_tva AS multicurrency_total_tva,
llx_facturedet.multicurrency_total_ttc AS multicurrency_total_ttc,
llx_facturedet.ref_ext AS ref_ext
FROM
llx_facturedet
) AS Llx Facturedet - Rowid ON llx_facture.rowid = Llx Facturedet - Rowid.fk_facture
LEFT JOIN (
SELECT
llx_societe.rowid AS rowid,
llx_societe.nom AS nom,
llx_societe.name_alias AS name_alias,
llx_societe.entity AS entity,
llx_societe.ref_ext AS ref_ext,
llx_societe.ref_int AS ref_int,
llx_societe.statut AS statut,
llx_societe.parent AS parent,
llx_societe.tms AS tms,
llx_societe.datec AS datec,
llx_societe.status AS status,
llx_societe.code_client AS code_client,
llx_societe.code_fournisseur AS code_fournisseur,
llx_societe.code_compta AS code_compta,
llx_societe.code_compta_fournisseur AS code_compta_fournisseur,
llx_societe.address AS address,
llx_societe.zip AS zip,
llx_societe.town AS town,
llx_societe.fk_departement AS fk_departement,
llx_societe.fk_pays AS fk_pays,
llx_societe.phone AS phone,
llx_societe.fax AS fax,
llx_societe.url AS url,
llx_societe.email AS email,
llx_societe.socialnetworks AS socialnetworks,
llx_societe.fk_effectif AS fk_effectif,
llx_societe.fk_typent AS fk_typent,
llx_societe.fk_forme_juridique AS fk_forme_juridique,
llx_societe.fk_currency AS fk_currency,
llx_societe.siren AS siren,
llx_societe.siret AS siret,
llx_societe.ape AS ape,
llx_societe.idprof4 AS idprof4,
llx_societe.idprof5 AS idprof5,
llx_societe.idprof6 AS idprof6,
llx_societe.tva_intra AS tva_intra,
llx_societe.capital AS capital,
llx_societe.fk_stcomm AS fk_stcomm,
llx_societe.note_private AS note_private,
llx_societe.note_public AS note_public,
llx_societe.model_pdf AS model_pdf,
llx_societe.last_main_doc AS last_main_doc,
llx_societe.prefix_comm AS prefix_comm,
llx_societe.client AS client,
llx_societe.fournisseur AS fournisseur,
llx_societe.supplier_account AS supplier_account,
llx_societe.fk_prospectlevel AS fk_prospectlevel,
llx_societe.fk_incoterms AS fk_incoterms,
llx_societe.location_incoterms AS location_incoterms,
llx_societe.customer_bad AS customer_bad,
llx_societe.customer_rate AS customer_rate,
llx_societe.supplier_rate AS supplier_rate,
llx_societe.fk_user_creat AS fk_user_creat,
llx_societe.fk_user_modif AS fk_user_modif,
llx_societe.remise_client AS remise_client,
llx_societe.remise_supplier AS remise_supplier,
llx_societe.mode_reglement AS mode_reglement,
llx_societe.cond_reglement AS cond_reglement,
llx_societe.deposit_percent AS deposit_percent,
llx_societe.transport_mode AS transport_mode,
llx_societe.mode_reglement_supplier AS mode_reglement_supplier,
llx_societe.cond_reglement_supplier AS cond_reglement_supplier,
llx_societe.transport_mode_supplier AS transport_mode_supplier,
llx_societe.fk_shipping_method AS fk_shipping_method,
llx_societe.tva_assuj AS tva_assuj,
llx_societe.localtax1_assuj AS localtax1_assuj,
llx_societe.localtax1_value AS localtax1_value,
llx_societe.localtax2_assuj AS localtax2_assuj,
llx_societe.localtax2_value AS localtax2_value,
llx_societe.barcode AS barcode,
llx_societe.fk_barcode_type AS fk_barcode_type,
llx_societe.price_level AS price_level,
llx_societe.outstanding_limit AS outstanding_limit,
llx_societe.order_min_amount AS order_min_amount,
llx_societe.supplier_order_min_amount AS supplier_order_min_amount,
llx_societe.default_lang AS default_lang,
llx_societe.logo AS logo,
llx_societe.canvas AS canvas,
llx_societe.import_key AS import_key,
llx_societe.webservices_url AS webservices_url,
llx_societe.webservices_key AS webservices_key,
llx_societe.accountancy_code_sell AS accountancy_code_sell,
llx_societe.accountancy_code_buy AS accountancy_code_buy,
llx_societe.fk_multicurrency AS fk_multicurrency,
llx_societe.multicurrency_code AS multicurrency_code,
llx_societe.fk_account AS fk_account,
llx_societe.fk_warehouse AS fk_warehouse,
llx_societe.logo_squarred AS logo_squarred
FROM
llx_societe
) AS Llx Societe - Fk Soc ON llx_facture.fk_soc = Llx Societe - Fk Soc.rowid
LEFT JOIN (
SELECT
llx_categorie_societe.fk_categorie AS fk_categorie,
llx_categorie_societe.fk_soc AS fk_soc,
llx_categorie_societe.import_key AS import_key
FROM
llx_categorie_societe
) AS Llx Categorie Societe - Fk Soc ON llx_facture.fk_soc = Llx Categorie Societe - Fk Soc.fk_soc
LEFT JOIN (
SELECT
llx_categorie.rowid AS rowid,
llx_categorie.entity AS entity,
llx_categorie.fk_parent AS fk_parent,
llx_categorie.label AS label,
llx_categorie.type AS type,
llx_categorie.description AS description,
llx_categorie.color AS color,
llx_categorie.fk_soc AS fk_soc,
llx_categorie.visible AS visible,
llx_categorie.import_key AS import_key,
llx_categorie.ref_ext AS ref_ext,
llx_categorie.date_creation AS date_creation,
llx_categorie.tms AS tms,
llx_categorie.fk_user_creat AS fk_user_creat,
llx_categorie.fk_user_modif AS fk_user_modif
FROM
llx_categorie
) AS Llx Categorie - Fk Categorie ON Llx Categorie Societe - Fk Soc.fk_categorie = Llx Categorie - Fk Categorie.rowid
LEFT JOIN (
SELECT
llx_categorie.rowid AS rowid,
llx_categorie.entity AS entity,
llx_categorie.fk_parent AS fk_parent,
llx_categorie.label AS label,
llx_categorie.type AS type,
llx_categorie.description AS description,
llx_categorie.color AS color,
llx_categorie.fk_soc AS fk_soc,
llx_categorie.visible AS visible,
llx_categorie.import_key AS import_key,
llx_categorie.ref_ext AS ref_ext,
llx_categorie.date_creation AS date_creation,
llx_categorie.tms AS tms,
llx_categorie.fk_user_creat AS fk_user_creat,
llx_categorie.fk_user_modif AS fk_user_modif
FROM
llx_categorie
) AS Llx Categorie - Rowid ON Llx Categorie - Fk Categorie.fk_parent = Llx Categorie - Rowid.rowid
LEFT JOIN (
SELECT
llx_product.rowid AS rowid,
llx_product.ref AS ref,
llx_product.entity AS entity,
llx_product.ref_ext AS ref_ext,
llx_product.datec AS datec,
llx_product.tms AS tms,
llx_product.fk_parent AS fk_parent,
llx_product.label AS label,
llx_product.description AS description,
llx_product.note_public AS note_public,
llx_product.note AS note,
llx_product.customcode AS customcode,
llx_product.fk_country AS fk_country,
llx_product.fk_state AS fk_state,
llx_product.price AS price,
llx_product.price_ttc AS price_ttc,
llx_product.price_min AS price_min,
llx_product.price_min_ttc AS price_min_ttc,
llx_product.price_base_type AS price_base_type,
llx_product.cost_price AS cost_price,
llx_product.default_vat_code AS default_vat_code,
llx_product.tva_tx AS tva_tx,
llx_product.recuperableonly AS recuperableonly,
llx_product.localtax1_tx AS localtax1_tx,
llx_product.localtax1_type AS localtax1_type,
llx_product.localtax2_tx AS localtax2_tx,
llx_product.localtax2_type AS localtax2_type,
llx_product.fk_user_author AS fk_user_author,
llx_product.fk_user_modif AS fk_user_modif,
llx_product.tosell AS tosell,
llx_product.tobuy AS tobuy,
llx_product.onportal AS onportal,
llx_product.tobatch AS tobatch,
llx_product.sell_or_eat_by_mandatory AS sell_or_eat_by_mandatory,
llx_product.fk_product_type AS fk_product_type,
llx_product.duration AS duration,
llx_product.seuil_stock_alerte AS seuil_stock_alerte,
llx_product.url AS url,
llx_product.barcode AS barcode,
llx_product.fk_barcode_type AS fk_barcode_type,
llx_product.accountancy_code_sell AS accountancy_code_sell,
llx_product.accountancy_code_sell_intra AS accountancy_code_sell_intra,
llx_product.accountancy_code_sell_export AS accountancy_code_sell_export,
llx_product.accountancy_code_buy AS accountancy_code_buy,
llx_product.accountancy_code_buy_intra AS accountancy_code_buy_intra,
llx_product.accountancy_code_buy_export AS accountancy_code_buy_export,
llx_product.partnumber AS partnumber,
llx_product.weight AS weight,
llx_product.weight_units AS weight_units,
llx_product.length AS length,
llx_product.length_units AS length_units,
llx_product.width AS width,
llx_product.width_units AS width_units,
llx_product.height AS height,
llx_product.height_units AS height_units,
llx_product.surface AS surface,
llx_product.surface_units AS surface_units,
llx_product.volume AS volume,
llx_product.volume_units AS volume_units,
llx_product.stock AS stock,
llx_product.pmp AS pmp,
llx_product.fifo AS fifo,
llx_product.lifo AS lifo,
llx_product.canvas AS canvas,
llx_product.finished AS finished,
llx_product.hidden AS hidden,
llx_product.import_key AS import_key,
llx_product.model_pdf AS model_pdf,
llx_product.fk_price_expression AS fk_price_expression,
llx_product.desiredstock AS desiredstock,
llx_product.fk_unit AS fk_unit,
llx_product.price_autogen AS price_autogen,
llx_product.fk_default_warehouse AS fk_default_warehouse,
llx_product.fk_project AS fk_project,
llx_product.net_measure AS net_measure,
llx_product.net_measure_units AS net_measure_units,
llx_product.stock_available AS stock_available,
llx_product.batch_mask AS batch_mask,
llx_product.lifetime AS lifetime,
llx_product.qc_frequency AS qc_frequency,
llx_product.mandatory_period AS mandatory_period,
llx_product.fk_default_bom AS fk_default_bom,
llx_product.fk_default_workstation AS fk_default_workstation
FROM
llx_product
) AS Llx Product - Fk Product ON Llx Facturedet - Rowid.fk_product = Llx Product - Fk Product.rowid
WHERE
llx_facture.datef > date '2023-01-01'
) AS __mb_source
GROUP BY
MAKEDATE(YEAR(__mb_source.datef), 1),
__mb_source.Llx Categorie - Fk Categorie__label,
__mb_source.Llx Categorie - Rowid__label,
__mb_source.Llx Societe - Fk Soc__nom,
__mb_source.Llx Product - Fk Product__ref
ORDER BY
MAKEDATE(YEAR(__mb_source.datef), 1) ASC,
__mb_source.Llx Categorie - Fk Categorie__label ASC,
__mb_source.Llx Categorie - Rowid__label ASC,
__mb_source.Llx Societe - Fk Soc__nom ASC,
__mb_source.Llx Product - Fk Product__ref ASC
log :
2026-05-26T16:00:15+02:00 ERROR metabase.query-processor.middleware.catch-exceptions Error processing query: Error running query
{:database_id 2,
:parameterized false,
:started_at #t "2026-05-26T16:00:12.145700083+02:00[Europe/Paris]",
:via
[{:status :failed,
:class clojure.lang.ExceptionInfo,
:error "Erreur lors de la réduction des lignes de résultats : null",
:stacktrace
["--> query_processor.pivot$append_queries_reduce_fn$multiple_reducing__106049$respond_STAR___106051.invoke(pivot.clj:263)"
"driver.sql_jdbc.execute$execute_reducible_query$fn__110636.invoke(execute.clj:836)"
"driver.sql_jdbc.execute$fn__110341$fn__110342.invoke(execute.clj:450)"
"driver.sql_jdbc.execute$do_with_resolved_connection.invokeStatic(execute.clj:366)"
"driver.sql_jdbc.execute$do_with_resolved_connection.invoke(execute.clj:338)"
"driver.sql_jdbc.execute$fn__110341.invokeStatic(execute.clj:444)"
"driver.sql_jdbc.execute$fn__110341.invoke(execute.clj:442)"
"driver.sql_jdbc.execute$execute_reducible_query.invokeStatic(execute.clj:815)"
"driver.sql_jdbc.execute$execute_reducible_query.invoke(execute.clj:803)"
"driver.sql_jdbc$fn__113840.invokeStatic(sql_jdbc.clj:90)"
"driver.sql_jdbc$fn__113840.invoke(sql_jdbc.clj:88)"
"query_processor.pipeline$STAR_execute_STAR.invokeStatic(pipeline.clj:59)"
"query_processor.pipeline$STAR_execute_STAR.invoke(pipeline.clj:44)"
"query_processor.pivot$append_queries_reduce_fn$multiple_reducing__106049$fn__106057.invoke(pivot.clj:274)"
"query_processor.pivot$append_queries_reduce_fn$multiple_reducing__106049.invoke(pivot.clj:270)"
"query_processor.pipeline$STAR_run_STAR$respond__68010.invoke(pipeline.clj:117)"
"query_processor.pivot$append_queries_execute_fn$multiple_execute__106044.invoke(pivot.clj:234)"
"query_processor.pipeline$STAR_run_STAR.invokeStatic(pipeline.clj:119)"
"query_processor.pipeline$STAR_run_STAR.invoke(pipeline.clj:108)"
"query_processor.execute$run.invokeStatic(execute.clj:77)"
"query_processor.execute$run.invoke(execute.clj:67)"
"query_processor.middleware.process_userland_query$capture_execution_context_middleware$fn__79713.invoke(process_userland_query.clj:210)"
"query_processor.middleware.enterprise$swap_destination_db_middleware$fn__77602.invoke(enterprise.clj:101)"
"query_processor.middleware.enterprise$apply_impersonation_postprocessing_middleware$fn__77577.invoke(enterprise.clj:70)"
"query_processor.middleware.update_used_cards$update_used_cards_BANG_$fn__79763.invoke(update_used_cards.clj:67)"
"query_processor.execute$add_native_form_to_result_metadata$fn__79803.invoke(execute.clj:28)"
"query_processor.execute$add_preprocessed_query_to_result_metadata_for_userland_query$fn__79810.invoke(execute.clj:40)"
"query_processor.middleware.cache$maybe_return_cached_results$maybe_return_cached_results_STAR___79610.invoke(cache.clj:280)"
"query_processor.middleware.permissions$check_query_permissions$fn__76647.invoke(permissions.clj:160)"
"query_processor.middleware.enterprise$check_download_permissions_middleware$fn__77612.invoke(enterprise.clj:118)"
"query_processor.execute$execute$fn__79850.invoke(execute.clj:104)"
"query_processor.setup$do_with_qp_setup.invokeStatic(setup.clj:232)"
"query_processor.setup$do_with_qp_setup.invoke(setup.clj:223)"
"query_processor.execute$execute.invokeStatic(execute.clj:103)"
"query_processor.execute$execute.invoke(execute.clj:99)"
"query_processor$process_query_STAR__STAR_.invokeStatic(query_processor.clj:55)"
"query_processor$process_query_STAR__STAR_.invoke(query_processor.clj:46)"
"query_processor.middleware.enterprise$fn__77629$handle_audit_app_internal_queries__77630$fn__77632.invoke(enterprise.clj:150)"
"query_processor.middleware.enterprise$handle_audit_app_internal_queries_middleware$fn__77640.invoke(enterprise.clj:157)"
"query_processor.middleware.process_userland_query$process_userland_query_middleware$fn__79719.invoke(process_userland_query.clj:255)"
"que...