diff --git a/scratchpad/ap.parquet b/scratchpad/ap.parquet new file mode 100644 index 00000000..e4cbbea4 Binary files /dev/null and b/scratchpad/ap.parquet differ diff --git a/scratchpad/bq.py b/scratchpad/bq.py new file mode 100644 index 00000000..62de2d01 --- /dev/null +++ b/scratchpad/bq.py @@ -0,0 +1,7 @@ +import google.auth +from google.cloud import bigquery +_creds, _ = google.auth.default(scopes=['https://www.googleapis.com/auth/bigquery']) +_creds = _creds.with_quota_project(None) +client = bigquery.Client(project='autingo-159109', location='europe-west1', credentials=_creds) +def q(sql): + return client.query(sql).result().to_dataframe() diff --git a/scratchpad/cards.json b/scratchpad/cards.json new file mode 100644 index 00000000..77327412 --- /dev/null +++ b/scratchpad/cards.json @@ -0,0 +1 @@ +{"c1": 12363, "c2": 12364, "c3": 12365} \ No newline at end of file diff --git a/scratchpad/citas_recon.csv b/scratchpad/citas_recon.csv new file mode 100644 index 00000000..488ece8a --- /dev/null +++ b/scratchpad/citas_recon.csv @@ -0,0 +1,61 @@ +ensena,year,mes,diego,bq_neto,match +Aurgi,2023,feb,80.52,, +Aurgi,2023,mar,89.94,, +Aurgi,2023,abr,76.87,, +Aurgi,2023,may,87.95,, +Aurgi,2023,jun,97.84,, +Aurgi,2023,jul,138.24,, +Aurgi,2023,ago,89.7,, +Aurgi,2023,sep,61.53,, +Aurgi,2023,oct,56.48,, +Aurgi,2023,nov,73.2,, +Aurgi,2023,dic,78.81,, +Aurgi,2024,ene,75.34,75.35,100.0 +Aurgi,2024,feb,60.21,60.21,100.0 +Aurgi,2024,mar,70.62,71.26,99.1 +Aurgi,2024,abr,70.46,70.46,100.0 +Aurgi,2024,may,84.76,84.76,100.0 +Aurgi,2024,jun,108.7,108.7,100.0 +Aurgi,2024,jul,141.2,141.2,100.0 +Aurgi,2024,ago,100.18,100.18,100.0 +Aurgi,2024,sep,67.91,67.91,100.0 +Aurgi,2024,oct,81.31,81.31,100.0 +Aurgi,2024,nov,71.57,71.57,100.0 +Aurgi,2024,dic,74.33,74.33,100.0 +Aurgi,2025,ene,86.28,86.28,100.0 +Aurgi,2025,feb,53.05,53.05,100.0 +Aurgi,2025,mar,86.75,86.75,100.0 +Aurgi,2025,abr,83.89,83.89,100.0 +Aurgi,2025,may,84.24,84.24,100.0 +Aurgi,2025,jun,134.46,134.46,100.0 +Aurgi,2025,jul,101.17,174.32,58.0 +MT,2023,feb,30.19,, +MT,2023,mar,41.89,, +MT,2023,abr,36.16,, +MT,2023,may,42.01,, +MT,2023,jun,44.24,, +MT,2023,jul,63.61,, +MT,2023,ago,40.7,, +MT,2023,sep,28.6,, +MT,2023,oct,28.79,, +MT,2023,nov,30.3,, +MT,2023,dic,35.21,, +MT,2024,ene,38.13,38.13,100.0 +MT,2024,feb,32.44,32.44,100.0 +MT,2024,mar,35.17,35.18,100.0 +MT,2024,abr,35.38,35.38,100.0 +MT,2024,may,37.58,37.58,100.0 +MT,2024,jun,44.54,44.54,100.0 +MT,2024,jul,58.92,58.92,100.0 +MT,2024,ago,40.97,40.98,100.0 +MT,2024,sep,35.03,35.03,100.0 +MT,2024,oct,38.86,38.86,100.0 +MT,2024,nov,36.48,36.48,100.0 +MT,2024,dic,40.52,40.52,100.0 +MT,2025,ene,39.16,39.16,100.0 +MT,2025,feb,28.16,28.16,100.0 +MT,2025,mar,42.26,42.26,100.0 +MT,2025,abr,44.04,44.04,100.0 +MT,2025,may,52.71,52.71,100.0 +MT,2025,jun,63.54,63.54,100.0 +MT,2025,jul,49.47,84.94,58.2 diff --git a/scratchpad/dash.txt b/scratchpad/dash.txt new file mode 100644 index 00000000..8886737e --- /dev/null +++ b/scratchpad/dash.txt @@ -0,0 +1 @@ +https://reports.autingo.es/dashboard/1142 \ No newline at end of file diff --git a/scratchpad/diego.parquet b/scratchpad/diego.parquet new file mode 100644 index 00000000..e73a37b6 Binary files /dev/null and b/scratchpad/diego.parquet differ diff --git a/scratchpad/diego_literals.sql b/scratchpad/diego_literals.sql new file mode 100644 index 00000000..5368f447 --- /dev/null +++ b/scratchpad/diego_literals.sql @@ -0,0 +1,60 @@ +STRUCT(DATE(2023,2,1) AS mes, 80.515 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,3,1) AS mes, 89.936 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,4,1) AS mes, 76.866 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,5,1) AS mes, 87.952 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,6,1) AS mes, 97.84 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,7,1) AS mes, 138.24 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,8,1) AS mes, 89.7 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,9,1) AS mes, 61.53 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,10,1) AS mes, 56.48 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,11,1) AS mes, 73.2 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,12,1) AS mes, 78.81 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,1,1) AS mes, 75.345 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,2,1) AS mes, 60.211 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,3,1) AS mes, 70.62 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,4,1) AS mes, 70.456 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,5,1) AS mes, 84.759 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,6,1) AS mes, 108.702 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,7,1) AS mes, 141.204 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,8,1) AS mes, 100.181 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,9,1) AS mes, 67.91 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,10,1) AS mes, 81.307 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,11,1) AS mes, 71.569 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2024,12,1) AS mes, 74.329 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,1,1) AS mes, 86.277 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,2,1) AS mes, 53.054 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,3,1) AS mes, 86.749 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,4,1) AS mes, 83.888 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,5,1) AS mes, 84.24 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,6,1) AS mes, 134.464 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2025,7,1) AS mes, 101.168 AS diego_neto_k, 1 AS company_id), + STRUCT(DATE(2023,2,1) AS mes, 30.189 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,3,1) AS mes, 41.89 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,4,1) AS mes, 36.16 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,5,1) AS mes, 42.011 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,6,1) AS mes, 44.24 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,7,1) AS mes, 63.61 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,8,1) AS mes, 40.7 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,9,1) AS mes, 28.6 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,10,1) AS mes, 28.79 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,11,1) AS mes, 30.3 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2023,12,1) AS mes, 35.207 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,1,1) AS mes, 38.132 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,2,1) AS mes, 32.438 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,3,1) AS mes, 35.174 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,4,1) AS mes, 35.382 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,5,1) AS mes, 37.584 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,6,1) AS mes, 44.54 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,7,1) AS mes, 58.921 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,8,1) AS mes, 40.974 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,9,1) AS mes, 35.029 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,10,1) AS mes, 38.861 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,11,1) AS mes, 36.48 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2024,12,1) AS mes, 40.522 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,1,1) AS mes, 39.161 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,2,1) AS mes, 28.16 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,3,1) AS mes, 42.263 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,4,1) AS mes, 44.04 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,5,1) AS mes, 52.71 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,6,1) AS mes, 63.544 AS diego_neto_k, 2 AS company_id), + STRUCT(DATE(2025,7,1) AS mes, 49.469 AS diego_neto_k, 2 AS company_id) \ No newline at end of file diff --git a/scratchpad/exf/bqq.py b/scratchpad/exf/bqq.py new file mode 100644 index 00000000..0645f397 --- /dev/null +++ b/scratchpad/exf/bqq.py @@ -0,0 +1,8 @@ +import sys, json +from google.cloud import bigquery +import google.auth +creds=google.auth.default(scopes=['https://www.googleapis.com/auth/bigquery'])[0].with_quota_project(None) +c=bigquery.Client(project='autingo-159109', location='europe-west1', credentials=creds) +sql=sys.stdin.read() +for r in c.query(sql).result(): + print(json.dumps(dict(r), default=str)) diff --git a/scratchpad/exf/build.py b/scratchpad/exf/build.py new file mode 100644 index 00000000..1e6ebe43 --- /dev/null +++ b/scratchpad/exf/build.py @@ -0,0 +1,152 @@ +import json, os, urllib.request, sys + +MB = os.environ["MB"]; KEY = os.environ["KEY"] + +def api(method, path, body=None, timeout=180): + data = json.dumps(body).encode() if body is not None else None + req = urllib.request.Request(MB + path, data=data, method=method, + headers={"X-API-KEY": KEY, "Content-Type": "application/json"}) + try: + return json.load(urllib.request.urlopen(req, timeout=timeout)) + except urllib.error.HTTPError as e: + print(f"HTTP {e.code} on {method} {path}:", e.read().decode()[:1200]); raise + +# Bridge documento -> service_request (canal + charged), tal cual 1094 card 11751. +BASE = r""" +WITH vf AS ( + SELECT document_id, LOGICAL_OR(is_pw) is_pw FROM ( + SELECT CAST(document_id AS STRING) document_id, ANY_VALUE(is_precaweb) is_pw + FROM `autingo-159109.anjana_bi_datamart.VENTAS_aurgi` GROUP BY 1 + UNION ALL + SELECT CAST(document_id AS STRING), ANY_VALUE(is_precaweb) + FROM `autingo-159109.anjana_bi_datamart.VENTAS_Motortown` GROUP BY 1 + ) GROUP BY 1 +), +lineas AS ( + SELECT + CAST(s.numeroDocumento AS STRING) AS numdoc, + CAST(s.idCentro AS STRING) AS idcentro, + DATE(s.Fecha) AS fecha, + s.Base_imponible_linea AS bil + FROM {{#4494}} s + WHERE DATE(s.Fecha) >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY) + [[AND DATE(s.Fecha) >= {{fecha_desde}}]] + [[AND DATE(s.Fecha) <= {{fecha_hasta}}]] +), +web AS ( + SELECT l.numdoc, l.fecha, l.bil, oc.name AS centro, oc.Companies__name AS ambito + FROM lineas l + LEFT JOIN vf ON l.numdoc = vf.document_id + LEFT JOIN `autingo-159109.rag_datasets.Objeto_Centros` oc + ON l.idcentro = CAST(oc.nav_id AS STRING) + WHERE (COALESCE(vf.is_pw, FALSE) OR oc.name IN ('Aurgi Web','MT Web')) + AND (oc.Companies__name IS NULL OR oc.Companies__name NOT IN ('Aurgi Glass','MotorTown Glass')) + [[AND oc.name IN ({{centro}})]] + [[AND oc.Companies__name IN ({{ensena}})]] +), +sr_link AS ( + SELECT CAST(inv.nav_id AS STRING) numdoc, CAST(j.service_request_id AS STRING) sr_id + FROM `autingo-159109.psql_dcpublic.tpv_orders_invoice` inv + JOIN `autingo-159109.psql_dcpublic.tpv_precawebs_servicerequestjob` j ON j.order_id = inv.order_id + WHERE inv.nav_id IS NOT NULL + UNION DISTINCT + SELECT CAST(invoice_number AS STRING), CAST(service_request_id AS STRING) + FROM `autingo-159109.psql_dcpublic.logistic_orders` + WHERE invoice_number IS NOT NULL AND invoice_number != '' +), +sr_link1 AS (SELECT numdoc, MIN(sr_id) sr_id FROM sr_link GROUP BY 1), +sr AS ( + SELECT CAST(id AS STRING) sr_id, channel_id, charged + FROM `autingo-159109.psql_dcpublic.service_requests` +), +doc AS ( + SELECT + w.numdoc, + ANY_VALUE(w.fecha) AS fecha, + SUM(w.bil) AS venta, + ANY_VALUE(sl.sr_id) AS sr_id, + ANY_VALUE(sr.channel_id) AS channel_id, + ANY_VALUE(sr.charged) AS charged + FROM web w + LEFT JOIN sr_link1 sl USING (numdoc) + LEFT JOIN sr ON sr.sr_id = sl.sr_id + GROUP BY w.numdoc +), +fin AS ( + SELECT + numdoc, fecha, venta, + CASE WHEN sr_id IS NULL THEN 'Sin solicitud' + WHEN channel_id = 1 THEN 'aurgi.com' + WHEN channel_id = 2 THEN 'motortown.es' + WHEN channel_id = 3 THEN 'Autingo' + WHEN channel_id IN (11,13,14,15,6,8) THEN 'Marketplaces' + WHEN channel_id = 10 THEN 'Talleres Digitales' + ELSE 'Otros' END AS canal, + CASE WHEN sr_id IS NULL THEN 'Sin solicitud' + WHEN charged THEN 'Pago web' + ELSE 'Pago tienda' END AS forma_pago + FROM doc +) +""" + +CARDS = { + "total": { + "name": "Venta web total (facturacion NAV / modelo 4494)", + "sql": BASE + "SELECT ROUND(SUM(venta),0) AS venta_web_eur, COUNT(DISTINCT numdoc) AS documentos FROM fin", + "display": "scalar", + }, + "canal": { + "name": "Venta web por canal", + "sql": BASE + "SELECT canal, ROUND(SUM(venta),0) AS venta_eur, COUNT(DISTINCT numdoc) AS documentos FROM fin GROUP BY canal ORDER BY venta_eur DESC", + "display": "bar", + }, + "pago": { + "name": "Venta web por forma de pago", + "sql": BASE + "SELECT forma_pago, ROUND(SUM(venta),0) AS venta_eur, COUNT(DISTINCT numdoc) AS documentos FROM fin GROUP BY forma_pago ORDER BY venta_eur DESC", + "display": "row", + }, + "matriz": { + "name": "Venta web: matriz canal x forma de pago", + "sql": BASE + "SELECT canal, forma_pago, ROUND(SUM(venta),0) AS venta_eur, COUNT(DISTINCT numdoc) AS documentos FROM fin GROUP BY canal, forma_pago ORDER BY venta_eur DESC", + "display": "table", + }, + "evolutivo": { + "name": "Venta web mensual por canal", + "sql": BASE + "SELECT DATE_TRUNC(fecha, MONTH) AS mes, canal, ROUND(SUM(venta),0) AS venta_eur FROM fin GROUP BY mes, canal ORDER BY mes, venta_eur DESC", + "display": "bar", + }, +} + +TAGS = { + "#4494": {"type":"card","name":"#4494","id":"card__4494","display-name":"#4494","card-id":4494}, + "fecha_desde": {"type":"date","name":"fecha_desde","id":"tag-fecha-desde","display-name":"Fecha desde"}, + "fecha_hasta": {"type":"date","name":"fecha_hasta","id":"tag-fecha-hasta","display-name":"Fecha hasta"}, + "centro": {"type":"text","name":"centro","id":"tag-centro","display-name":"Centro"}, + "ensena": {"type":"text","name":"ensena","id":"tag-ensena","display-name":"Ensena"}, +} + +def dq(sql): + return {"type":"native","database":6,"native":{"query":sql,"template-tags":TAGS}} + +def test_query(sql, params=None): + body = dq(sql) + body["parameters"] = params or [] + r = api("POST", "/api/dataset", body) + if r.get("error"): + print("QUERY ERROR:", r.get("error")); return None + cols = [c["name"] for c in r["data"]["cols"]] + rows = r["data"]["rows"] + return cols, rows + +if __name__ == "__main__": + which = sys.argv[1] if len(sys.argv) > 1 else "all" + # param YTD 2026 para verificar reconciliacion + p_ytd = [{"type":"date/single","value":"2026-01-01","target":["variable",["template-tag","fecha_desde"]]}] + for k, c in CARDS.items(): + if which != "all" and which != k: continue + print(f"\n===== TEST {k}: {c['name']} =====") + res = test_query(c["sql"], p_ytd) + if res: + cols, rows = res + print("cols:", cols) + for row in rows[:15]: print(" ", row) diff --git a/scratchpad/exf/card_11751.json b/scratchpad/exf/card_11751.json new file mode 100644 index 00000000..7dddbb70 --- /dev/null +++ b/scratchpad/exf/card_11751.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-06-17T10:07:56.226564Z","description":null,"archived":false,"view_count":208,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"lib/deduplicated-name":"categoria","lib/original-name":"categoria","name":"categoria","lib/source":"source/native","lib/source-column-alias":"categoria","source":"native","field_ref":["field","categoria",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"categoria","display_name":"categoria","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Text":{"percent-json":0.0,"percent-url":0.0,"percent-email":0.0,"percent-state":0.0,"average-length":9.0}}},"base_type":"type/Text"},{"semantic_type":null,"lib/deduplicated-name":"venta_eur","lib/original-name":"venta_eur","name":"venta_eur","lib/source":"source/native","lib/source-column-alias":"venta_eur","source":"native","field_ref":["field","venta_eur",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"venta_eur","display_name":"venta_eur","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":307659.0,"q1":307659.0,"q3":307659.0,"max":307659.0,"sd":null,"avg":307659.0}}},"base_type":"type/Decimal"},{"semantic_type":null,"lib/deduplicated-name":"pedidos","lib/original-name":"pedidos","name":"pedidos","lib/source":"source/native","lib/source-column-alias":"pedidos","source":"native","field_ref":["field","pedidos",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"pedidos","display_name":"pedidos","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":2512.0,"q1":2512.0,"q3":2512.0,"max":2512.0,"sd":null,"avg":2512.0}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"pct_online","lib/original-name":"pct_online","name":"pct_online","lib/source":"source/native","lib/source-column-alias":"pct_online","source":"native","field_ref":["field","pct_online",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"pct_online","display_name":"pct_online","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":1.0,"q1":1.0,"q3":1.0,"max":1.0,"sd":null,"avg":1.0}}},"base_type":"type/Decimal"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","is_data_analyst":false,"last_login":null,"is_qbnewb":true,"is_superuser":false,"id":301,"last_name":"","tenant_id":null,"date_joined":"2025-09-15T09:45:46.250461Z","common_name":"data_exploration"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":583,"query_type":"native","name":"Venta online por canal de origen","last_query_start":"2026-07-01T15:23:53.070693Z","is_remote_synced":false,"dashboard_count":1,"document_id":null,"last_used_at":"2026-07-01T15:23:53.442369Z","dashboard":null,"type":"question","average_query_time":10844.033519553073,"creator_id":301,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-06-17T10:08:07.916135Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":360,"dataset_query":{"lib/type":"mbql/query","database":6,"stages":[{"template-tags":{"fecha":{"widget-type":"date/range","type":"dimension","name":"fecha","display-name":"Fecha","dimension":["field",{"base-type":"type/DateTime","lib/uuid":"18cf1fcd-1dd8-40de-8ff6-009a77db7028"},109464],"id":"ffff0001-1094-4f00-aaaa-000000000001"},"centro":{"widget-type":"string/=","type":"dimension","name":"centro","display-name":"Centro","dimension":["field",{"base-type":"type/Text","lib/uuid":"2285effb-800b-4c33-9fec-20bca683e188"},278633],"id":"ffff0002-1094-4f00-aaaa-000000000002"},"ensena":{"widget-type":"string/=","type":"dimension","name":"ensena","display-name":"Ensena","dimension":["field",{"base-type":"type/Text","lib/uuid":"a5c35a46-8940-42e3-9bff-73431604ae52"},278634],"id":"ffff0003-1094-4f00-aaaa-000000000003"}},"lib/type":"mbql.stage/native","native":"WITH vf AS (\n SELECT document_id, LOGICAL_OR(is_pw) is_pw FROM (\n SELECT CAST(document_id AS STRING) document_id, ANY_VALUE(is_precaweb) is_pw\n FROM `autingo-159109.anjana_bi_datamart.VENTAS_aurgi` GROUP BY 1\n UNION ALL\n SELECT CAST(document_id AS STRING), ANY_VALUE(is_precaweb)\n FROM `autingo-159109.anjana_bi_datamart.VENTAS_Motortown` GROUP BY 1\n ) GROUP BY 1\n),\nbase AS (\n SELECT\n CAST(`anjana_bi_datamart.Cubo_Ventas_Calculado`.numeroDocumento AS STRING) AS numdoc,\n `rag_datasets.Objeto_Centros`.name AS centro,\n `rag_datasets.Objeto_Centros`.Companies__name AS ambito,\n `anjana_bi_datamart.Cubo_Ventas_Calculado`.PrecioVenta AS pv,\n (COALESCE(vf.is_pw, FALSE) OR `rag_datasets.Objeto_Centros`.name IN ('Aurgi Web','MT Web')) AS is_web_line\n FROM `autingo-159109.anjana_bi_datamart.Cubo_Ventas_Calculado` `anjana_bi_datamart.Cubo_Ventas_Calculado`\n LEFT JOIN vf ON CAST(`anjana_bi_datamart.Cubo_Ventas_Calculado`.numeroDocumento AS STRING) = vf.document_id\n LEFT JOIN `autingo-159109.rag_datasets.Objeto_Centros` `rag_datasets.Objeto_Centros`\n ON `anjana_bi_datamart.Cubo_Ventas_Calculado`.idCentro = `rag_datasets.Objeto_Centros`.nav_id\n WHERE `anjana_bi_datamart.Cubo_Ventas_Calculado`.Dim_NombreTipoMov = 'Venta'\n AND `anjana_bi_datamart.Cubo_Ventas_Calculado`.idCentro NOT IN ('300','301','302','303','304','305','306','307','308','309','310','311','312','314','315','317','318','321','322','323','324','325','326','327','328','329','332','333','335','336','339','340','350','360','361')\n AND (`rag_datasets.Objeto_Centros`.Companies__name IS NULL OR `rag_datasets.Objeto_Centros`.Companies__name NOT IN ('Aurgi Glass','MotorTown Glass'))\n AND `anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)\n [[AND {{fecha}}]]\n [[AND {{centro}}]]\n [[AND {{ensena}}]]\n),\ndoc_web AS (\n SELECT numdoc, ANY_VALUE(centro) centro, ANY_VALUE(ambito) ambito, SUM(pv) venta\n FROM base WHERE is_web_line GROUP BY numdoc\n),\nsr_link AS (\n SELECT CAST(inv.nav_id AS STRING) numdoc, CAST(j.service_request_id AS STRING) sr_id\n FROM `autingo-159109.psql_dcpublic.tpv_orders_invoice` inv\n JOIN `autingo-159109.psql_dcpublic.tpv_precawebs_servicerequestjob` j ON j.order_id = inv.order_id\n WHERE inv.nav_id IS NOT NULL\n UNION DISTINCT\n SELECT CAST(invoice_number AS STRING), CAST(service_request_id AS STRING)\n FROM `autingo-159109.psql_dcpublic.logistic_orders`\n WHERE invoice_number IS NOT NULL AND invoice_number != ''\n),\nsr_link1 AS (SELECT numdoc, MIN(sr_id) sr_id FROM sr_link GROUP BY 1), -- MIN = desempate determinista (doc multi-SR)\nsr_dims AS (\n SELECT CAST(id AS STRING) sr_id,\n CASE WHEN channel_id=1 THEN 'aurgi.com' WHEN channel_id=2 THEN 'motortown.es'\n WHEN channel_id=3 THEN 'Autingo' WHEN channel_id IN (11,13,14,15,6,8) THEN 'Marketplaces'\n WHEN channel_id=10 THEN 'Talleres Digitales' ELSE 'Otros' END AS canal,\n CASE shipping_method WHEN 1 THEN 'Ir a centro (cita)' WHEN 2 THEN 'Envio a domicilio'\n WHEN 0 THEN 'Click & Collect' WHEN 3 THEN 'Servicio digital' ELSE 'Sin definir' END AS modalidad,\n CASE WHEN center_id=160 THEN 'Aurgi Web' WHEN center_id=161 THEN 'MT Web'\n WHEN center_id=167 THEN 'Autingo (virtual)' WHEN center_id=183 THEN 'Aurgi Asociados Gruas'\n WHEN center_id=184 THEN 'Aurgi Asociados' WHEN center_id IS NULL THEN 'Sin centro'\n ELSE 'Centro fisico' END AS centro_tipo,\n CASE state WHEN 'finished_state' THEN 'Finalizado' WHEN 'cancelled_state' THEN 'Cancelado'\n WHEN 'confirmed_state' THEN 'Confirmado' WHEN 'active_state' THEN 'Activo'\n WHEN 'reserved_state' THEN 'Reservado' WHEN 'no_show_state' THEN 'No show' ELSE 'Otro' END AS estado\n FROM `autingo-159109.psql_dcpublic.service_requests`\n),\nj AS (\n SELECT d.numdoc, d.centro, d.ambito, d.venta,\n COALESCE(s.canal,'Sin solicitud') AS canal,\n COALESCE(s.modalidad,'Sin solicitud') AS modalidad,\n COALESCE(s.centro_tipo,'Sin solicitud') AS centro_tipo,\n COALESCE(s.estado,'Sin solicitud') AS estado\n FROM doc_web d\n LEFT JOIN sr_link1 sl USING (numdoc)\n LEFT JOIN sr_dims s ON s.sr_id = sl.sr_id\n),\ncen AS (\n -- por centro: total neto vs neto de docs CON solicitud\n SELECT centro, SUM(venta) total_net, SUM(IF(canal='Sin solicitud',0,venta)) sr_net\n FROM j GROUP BY centro\n),\njadj AS (\n -- reparto: el neto 'Sin solicitud' (devoluciones web sin SR) se absorbe\n -- reescalando los docs CON-SR al mix real canal/modalidad/centro/estado de cada centro.\n -- factor = total_net/sr_net (<=1 cuando hay devoluciones). Sankey queda TODO positivo.\n SELECT j.numdoc, j.centro, j.canal, j.modalidad, j.centro_tipo, j.estado,\n CASE WHEN c.sr_net > 0 THEN j.venta * SAFE_DIVIDE(c.total_net, c.sr_net) ELSE j.venta END AS venta\n FROM j JOIN cen c USING (centro)\n WHERE (c.sr_net > 0 AND j.canal != 'Sin solicitud') OR (c.sr_net <= 0)\n)\nSELECT canal AS categoria,\n ROUND(SUM(venta),0) AS venta_eur,\n COUNT(DISTINCT numdoc) AS pedidos,\n SAFE_DIVIDE(SUM(venta), SUM(SUM(venta)) OVER()) AS pct_online\nFROM jadj GROUP BY 1 ORDER BY 2 DESC"}]},"id":11751,"legacy_query":null,"parameter_mappings":[],"can_manage_db":false,"display":"table","archived_directly":false,"entity_id":"DMX953yN5iDh_PLI6pwaY","collection_preview":true,"last-edit-info":{"id":301,"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","last_name":"","timestamp":"2026-06-17T10:07:56.390157Z"},"visualization_settings":{"table.column_widths":[],"column_settings":{"[\"name\",\"categoria\"]":{"column_title":"Canal"},"[\"name\",\"venta_eur\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0,"column_title":"Venta online (EUR)"},"[\"name\",\"pedidos\"]":{"column_title":"Pedidos"},"[\"name\",\"pct_online\"]":{"number_style":"percent","decimals":1,"column_title":"% del online"}}},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"claude","archive_operation_id":null,"name":"Claude","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":583,"archived_directly":null,"entity_id":"QjYHPvxn1zX2HY5U4QELT","location":"/","namespace":null,"is_personal":false,"created_at":"2026-03-17T15:46:05.729991Z"},"metabase_version":"v0.59.4 (d4fb593)","parameters":[],"dashboard_id":null,"created_at":"2026-06-16T12:02:13.774527Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_11752.json b/scratchpad/exf/card_11752.json new file mode 100644 index 00000000..8e5e2c01 --- /dev/null +++ b/scratchpad/exf/card_11752.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-06-17T10:07:59.487863Z","description":null,"archived":false,"view_count":202,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"lib/deduplicated-name":"categoria","lib/original-name":"categoria","name":"categoria","lib/source":"source/native","lib/source-column-alias":"categoria","source":"native","field_ref":["field","categoria",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"categoria","display_name":"categoria","fingerprint":{"global":{"distinct-count":3,"nil%":0.0},"type":{"type/Text":{"percent-json":0.0,"percent-url":0.0,"percent-email":0.0,"percent-state":0.0,"average-length":16.666666666666668}}},"base_type":"type/Text"},{"semantic_type":null,"lib/deduplicated-name":"venta_eur","lib/original-name":"venta_eur","name":"venta_eur","lib/source":"source/native","lib/source-column-alias":"venta_eur","source":"native","field_ref":["field","venta_eur",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"venta_eur","display_name":"venta_eur","fingerprint":{"global":{"distinct-count":3,"nil%":0.0},"type":{"type/Number":{"min":184.0,"q1":1149.75,"q3":228582.75,"max":303428.0,"sd":173973.57532395545,"avg":102553.0}}},"base_type":"type/Decimal"},{"semantic_type":null,"lib/deduplicated-name":"pedidos","lib/original-name":"pedidos","name":"pedidos","lib/source":"source/native","lib/source-column-alias":"pedidos","source":"native","field_ref":["field","pedidos",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"pedidos","display_name":"pedidos","fingerprint":{"global":{"distinct-count":3,"nil%":0.0},"type":{"type/Number":{"min":3.0,"q1":18.0,"q3":1850.25,"max":2446.0,"sd":1393.4691720068058,"avg":837.3333333333334}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"pct_online","lib/original-name":"pct_online","name":"pct_online","lib/source":"source/native","lib/source-column-alias":"pct_online","source":"native","field_ref":["field","pct_online",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"pct_online","display_name":"pct_online","fingerprint":{"global":{"distinct-count":3,"nil%":0.0},"type":{"type/Number":{"min":5.966436657573052E-4,"q1":0.003736282329168104,"q3":0.7429749180909818,"max":0.9862481580148422,"sd":0.5654756896104476,"avg":0.3333333333333333}}},"base_type":"type/Decimal"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","is_data_analyst":false,"last_login":null,"is_qbnewb":true,"is_superuser":false,"id":301,"last_name":"","tenant_id":null,"date_joined":"2025-09-15T09:45:46.250461Z","common_name":"data_exploration"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":583,"query_type":"native","name":"Venta online por modalidad de entrega","last_query_start":"2026-07-01T15:23:53.156232Z","is_remote_synced":false,"dashboard_count":1,"document_id":null,"last_used_at":"2026-07-01T15:23:53.442369Z","dashboard":null,"type":"question","average_query_time":10874.045977011494,"creator_id":301,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-06-17T10:08:11.06597Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":360,"dataset_query":{"lib/type":"mbql/query","database":6,"stages":[{"template-tags":{"fecha":{"widget-type":"date/range","type":"dimension","name":"fecha","display-name":"Fecha","dimension":["field",{"base-type":"type/DateTime","lib/uuid":"825a5e4b-f68e-4c7a-a601-24bcaaf9fb83"},109464],"id":"ffff0001-1094-4f00-aaaa-000000000001"},"centro":{"widget-type":"string/=","type":"dimension","name":"centro","display-name":"Centro","dimension":["field",{"base-type":"type/Text","lib/uuid":"89ab9e25-064a-423a-9c0b-a59842e4eaa8"},278633],"id":"ffff0002-1094-4f00-aaaa-000000000002"},"ensena":{"widget-type":"string/=","type":"dimension","name":"ensena","display-name":"Ensena","dimension":["field",{"base-type":"type/Text","lib/uuid":"ce8f0f37-2424-4fec-8ba0-0f29c878337c"},278634],"id":"ffff0003-1094-4f00-aaaa-000000000003"}},"lib/type":"mbql.stage/native","native":"WITH vf AS (\n SELECT document_id, LOGICAL_OR(is_pw) is_pw FROM (\n SELECT CAST(document_id AS STRING) document_id, ANY_VALUE(is_precaweb) is_pw\n FROM `autingo-159109.anjana_bi_datamart.VENTAS_aurgi` GROUP BY 1\n UNION ALL\n SELECT CAST(document_id AS STRING), ANY_VALUE(is_precaweb)\n FROM `autingo-159109.anjana_bi_datamart.VENTAS_Motortown` GROUP BY 1\n ) GROUP BY 1\n),\nbase AS (\n SELECT\n CAST(`anjana_bi_datamart.Cubo_Ventas_Calculado`.numeroDocumento AS STRING) AS numdoc,\n `rag_datasets.Objeto_Centros`.name AS centro,\n `rag_datasets.Objeto_Centros`.Companies__name AS ambito,\n `anjana_bi_datamart.Cubo_Ventas_Calculado`.PrecioVenta AS pv,\n (COALESCE(vf.is_pw, FALSE) OR `rag_datasets.Objeto_Centros`.name IN ('Aurgi Web','MT Web')) AS is_web_line\n FROM `autingo-159109.anjana_bi_datamart.Cubo_Ventas_Calculado` `anjana_bi_datamart.Cubo_Ventas_Calculado`\n LEFT JOIN vf ON CAST(`anjana_bi_datamart.Cubo_Ventas_Calculado`.numeroDocumento AS STRING) = vf.document_id\n LEFT JOIN `autingo-159109.rag_datasets.Objeto_Centros` `rag_datasets.Objeto_Centros`\n ON `anjana_bi_datamart.Cubo_Ventas_Calculado`.idCentro = `rag_datasets.Objeto_Centros`.nav_id\n WHERE `anjana_bi_datamart.Cubo_Ventas_Calculado`.Dim_NombreTipoMov = 'Venta'\n AND `anjana_bi_datamart.Cubo_Ventas_Calculado`.idCentro NOT IN ('300','301','302','303','304','305','306','307','308','309','310','311','312','314','315','317','318','321','322','323','324','325','326','327','328','329','332','333','335','336','339','340','350','360','361')\n AND (`rag_datasets.Objeto_Centros`.Companies__name IS NULL OR `rag_datasets.Objeto_Centros`.Companies__name NOT IN ('Aurgi Glass','MotorTown Glass'))\n AND `anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)\n [[AND {{fecha}}]]\n [[AND {{centro}}]]\n [[AND {{ensena}}]]\n),\ndoc_web AS (\n SELECT numdoc, ANY_VALUE(centro) centro, ANY_VALUE(ambito) ambito, SUM(pv) venta\n FROM base WHERE is_web_line GROUP BY numdoc\n),\nsr_link AS (\n SELECT CAST(inv.nav_id AS STRING) numdoc, CAST(j.service_request_id AS STRING) sr_id\n FROM `autingo-159109.psql_dcpublic.tpv_orders_invoice` inv\n JOIN `autingo-159109.psql_dcpublic.tpv_precawebs_servicerequestjob` j ON j.order_id = inv.order_id\n WHERE inv.nav_id IS NOT NULL\n UNION DISTINCT\n SELECT CAST(invoice_number AS STRING), CAST(service_request_id AS STRING)\n FROM `autingo-159109.psql_dcpublic.logistic_orders`\n WHERE invoice_number IS NOT NULL AND invoice_number != ''\n),\nsr_link1 AS (SELECT numdoc, MIN(sr_id) sr_id FROM sr_link GROUP BY 1), -- MIN = desempate determinista (doc multi-SR)\nsr_dims AS (\n SELECT CAST(id AS STRING) sr_id,\n CASE WHEN channel_id=1 THEN 'aurgi.com' WHEN channel_id=2 THEN 'motortown.es'\n WHEN channel_id=3 THEN 'Autingo' WHEN channel_id IN (11,13,14,15,6,8) THEN 'Marketplaces'\n WHEN channel_id=10 THEN 'Talleres Digitales' ELSE 'Otros' END AS canal,\n CASE shipping_method WHEN 1 THEN 'Ir a centro (cita)' WHEN 2 THEN 'Envio a domicilio'\n WHEN 0 THEN 'Click & Collect' WHEN 3 THEN 'Servicio digital' ELSE 'Sin definir' END AS modalidad,\n CASE WHEN center_id=160 THEN 'Aurgi Web' WHEN center_id=161 THEN 'MT Web'\n WHEN center_id=167 THEN 'Autingo (virtual)' WHEN center_id=183 THEN 'Aurgi Asociados Gruas'\n WHEN center_id=184 THEN 'Aurgi Asociados' WHEN center_id IS NULL THEN 'Sin centro'\n ELSE 'Centro fisico' END AS centro_tipo,\n CASE state WHEN 'finished_state' THEN 'Finalizado' WHEN 'cancelled_state' THEN 'Cancelado'\n WHEN 'confirmed_state' THEN 'Confirmado' WHEN 'active_state' THEN 'Activo'\n WHEN 'reserved_state' THEN 'Reservado' WHEN 'no_show_state' THEN 'No show' ELSE 'Otro' END AS estado\n FROM `autingo-159109.psql_dcpublic.service_requests`\n),\nj AS (\n SELECT d.numdoc, d.centro, d.ambito, d.venta,\n COALESCE(s.canal,'Sin solicitud') AS canal,\n COALESCE(s.modalidad,'Sin solicitud') AS modalidad,\n COALESCE(s.centro_tipo,'Sin solicitud') AS centro_tipo,\n COALESCE(s.estado,'Sin solicitud') AS estado\n FROM doc_web d\n LEFT JOIN sr_link1 sl USING (numdoc)\n LEFT JOIN sr_dims s ON s.sr_id = sl.sr_id\n),\ncen AS (\n -- por centro: total neto vs neto de docs CON solicitud\n SELECT centro, SUM(venta) total_net, SUM(IF(canal='Sin solicitud',0,venta)) sr_net\n FROM j GROUP BY centro\n),\njadj AS (\n -- reparto: el neto 'Sin solicitud' (devoluciones web sin SR) se absorbe\n -- reescalando los docs CON-SR al mix real canal/modalidad/centro/estado de cada centro.\n -- factor = total_net/sr_net (<=1 cuando hay devoluciones). Sankey queda TODO positivo.\n SELECT j.numdoc, j.centro, j.canal, j.modalidad, j.centro_tipo, j.estado,\n CASE WHEN c.sr_net > 0 THEN j.venta * SAFE_DIVIDE(c.total_net, c.sr_net) ELSE j.venta END AS venta\n FROM j JOIN cen c USING (centro)\n WHERE (c.sr_net > 0 AND j.canal != 'Sin solicitud') OR (c.sr_net <= 0)\n)\nSELECT modalidad AS categoria,\n ROUND(SUM(venta),0) AS venta_eur,\n COUNT(DISTINCT numdoc) AS pedidos,\n SAFE_DIVIDE(SUM(venta), SUM(SUM(venta)) OVER()) AS pct_online\nFROM jadj GROUP BY 1 ORDER BY 2 DESC"}]},"id":11752,"legacy_query":null,"parameter_mappings":[],"can_manage_db":false,"display":"table","archived_directly":false,"entity_id":"ul1-X-KmNTJt13NdXXE_b","collection_preview":true,"last-edit-info":{"id":301,"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","last_name":"","timestamp":"2026-06-17T10:07:59.657138Z"},"visualization_settings":{"table.column_widths":[],"column_settings":{"[\"name\",\"categoria\"]":{"column_title":"Modalidad"},"[\"name\",\"venta_eur\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0,"column_title":"Venta online (EUR)"},"[\"name\",\"pedidos\"]":{"column_title":"Pedidos"},"[\"name\",\"pct_online\"]":{"number_style":"percent","decimals":1,"column_title":"% del online"}}},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"claude","archive_operation_id":null,"name":"Claude","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":583,"archived_directly":null,"entity_id":"QjYHPvxn1zX2HY5U4QELT","location":"/","namespace":null,"is_personal":false,"created_at":"2026-03-17T15:46:05.729991Z"},"metabase_version":"v0.59.4 (d4fb593)","parameters":[],"dashboard_id":null,"created_at":"2026-06-16T12:02:15.468787Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_11857.json b/scratchpad/exf/card_11857.json new file mode 100644 index 00000000..cfd4ab66 --- /dev/null +++ b/scratchpad/exf/card_11857.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-06-18T16:29:06.074164Z","description":null,"archived":false,"view_count":132,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"lib/deduplicated-name":"d_max","lib/original-name":"d_max","name":"d_max","lib/source":"source/native","lib/source-column-alias":"d_max","source":"native","field_ref":["field","d_max",{"base-type":"type/DateTime"}],"effective_type":"type/DateTime","lib/desired-column-alias":"d_max","display_name":"d_max","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/DateTime":{"earliest":"2026-05-31T00:00:00Z","latest":"2026-05-31T00:00:00Z"}}},"base_type":"type/DateTime"},{"semantic_type":null,"lib/deduplicated-name":"valor","lib/original-name":"valor","name":"valor","lib/source":"source/native","lib/source-column-alias":"valor","source":"native","field_ref":["field","valor",{"base-type":"type/Float"}],"effective_type":"type/Float","lib/desired-column-alias":"valor","display_name":"valor","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":334342.0,"q1":334342.0,"q3":334342.0,"max":334342.0,"sd":null,"avg":334342.0}}},"base_type":"type/Float"},{"semantic_type":null,"lib/deduplicated-name":"valor_n1","lib/original-name":"valor_n1","name":"valor_n1","lib/source":"source/native","lib/source-column-alias":"valor_n1","source":"native","field_ref":["field","valor_n1",{"base-type":"type/Float"}],"effective_type":"type/Float","lib/desired-column-alias":"valor_n1","display_name":"valor_n1","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":201051.0,"q1":201051.0,"q3":201051.0,"max":201051.0,"sd":null,"avg":201051.0}}},"base_type":"type/Float"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","is_data_analyst":false,"last_login":null,"is_qbnewb":true,"is_superuser":false,"id":301,"last_name":"","tenant_id":null,"date_joined":"2025-09-15T09:45:46.250461Z","common_name":"data_exploration"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":583,"query_type":"native","name":"Venta web (pago web)","last_query_start":"2026-07-01T15:23:52.953854Z","is_remote_synced":false,"dashboard_count":1,"document_id":null,"last_used_at":"2026-07-01T15:23:53.442369Z","dashboard":null,"type":"question","average_query_time":5068.4098360655737705,"creator_id":301,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-06-18T16:29:08.62748Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":360,"dataset_query":{"lib/type":"mbql/query","database":6,"stages":[{"template-tags":{"fecha":{"dimension":["field",{"base-type":"type/DateTime","lib/uuid":"18cf1fcd-1dd8-40de-8ff6-009a77db7028"},109464],"widget-type":"date/range","type":"dimension","name":"fecha","display-name":"Fecha","id":"ffff0001-1094-4f00-aaaa-000000000001"},"centro":{"dimension":["field",{"base-type":"type/Text","lib/uuid":"2285effb-800b-4c33-9fec-20bca683e188"},278633],"widget-type":"string/=","type":"dimension","name":"centro","display-name":"Centro","id":"ffff0002-1094-4f00-aaaa-000000000002"},"ensena":{"dimension":["field",{"base-type":"type/Text","lib/uuid":"a5c35a46-8940-42e3-9bff-73431604ae52"},278634],"widget-type":"string/=","type":"dimension","name":"ensena","display-name":"Ensena","id":"ffff0003-1094-4f00-aaaa-000000000003"}},"lib/type":"mbql.stage/native","native":"WITH dwin AS (\n SELECT MIN(`anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha) lo, LEAST(MAX(`anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha), CURRENT_DATE()) hi\n FROM `autingo-159109.anjana_bi_datamart.Cubo_Ventas_Calculado` `anjana_bi_datamart.Cubo_Ventas_Calculado`\n WHERE `anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)\n [[AND {{fecha}}]]\n),\npw AS (\n SELECT DATE(sr.ask_date) AS d, sr.total_price_cents/100/1.21 AS v\n FROM `autingo-159109.psql_dcpublic.service_requests` sr\n JOIN `autingo-159109.psql_dcpublic.centers` cc ON cc.id = sr.center_id\n JOIN `autingo-159109.rag_datasets.Objeto_Centros` `rag_datasets.Objeto_Centros`\n ON `rag_datasets.Objeto_Centros`.nav_id = cc.nav_id\n WHERE sr.status = 3 AND sr.charged = TRUE AND sr.channel_id IN (1,2)\n AND DATE(sr.ask_date) >= DATE_SUB((SELECT lo FROM dwin), INTERVAL 1 YEAR)\n AND DATE(sr.ask_date) <= (SELECT hi FROM dwin)\n [[AND {{centro}}]]\n [[AND {{ensena}}]]\n),\nagg AS (\n SELECT\n SUM(CASE WHEN d BETWEEN (SELECT lo FROM dwin) AND (SELECT hi FROM dwin) THEN v END) AS valor,\n SUM(CASE WHEN d BETWEEN DATE_SUB((SELECT lo FROM dwin),INTERVAL 1 YEAR) AND DATE_SUB((SELECT hi FROM dwin),INTERVAL 1 YEAR) THEN v END) AS valor_n1\n FROM pw\n)\nSELECT (SELECT hi FROM dwin) AS d_max, ROUND(valor) AS valor, ROUND(valor_n1) AS valor_n1 FROM agg"}]},"id":11857,"legacy_query":null,"parameter_mappings":[],"can_manage_db":false,"display":"smartscalar","archived_directly":false,"entity_id":"-IjeccZAmo5FOkKhxAB-S","collection_preview":true,"last-edit-info":{"id":301,"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","last_name":"","timestamp":"2026-06-18T16:29:06.28107Z"},"visualization_settings":{"scalar.field":"valor","scalar.comparisons":[{"id":"cmp_n1","type":"anotherColumn","column":"valor_n1","label":"vs N-1"}],"column_settings":{"[\"name\",\"valor\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0},"[\"name\",\"valor_n1\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0}}},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"claude","archive_operation_id":null,"name":"Claude","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":583,"archived_directly":null,"entity_id":"QjYHPvxn1zX2HY5U4QELT","location":"/","namespace":null,"is_personal":false,"created_at":"2026-03-17T15:46:05.729991Z"},"metabase_version":"v0.59.4 (d4fb593)","parameters":[],"dashboard_id":null,"created_at":"2026-06-18T15:46:10.942444Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_11858.json b/scratchpad/exf/card_11858.json new file mode 100644 index 00000000..0fd9bcf4 --- /dev/null +++ b/scratchpad/exf/card_11858.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-06-18T16:29:14.885309Z","description":null,"archived":false,"view_count":129,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"lib/deduplicated-name":"d_max","lib/original-name":"d_max","name":"d_max","lib/source":"source/native","lib/source-column-alias":"d_max","source":"native","field_ref":["field","d_max",{"base-type":"type/DateTime"}],"effective_type":"type/DateTime","lib/desired-column-alias":"d_max","display_name":"d_max","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/DateTime":{"earliest":"2026-05-31T00:00:00Z","latest":"2026-05-31T00:00:00Z"}}},"base_type":"type/DateTime"},{"semantic_type":null,"lib/deduplicated-name":"valor","lib/original-name":"valor","name":"valor","lib/source":"source/native","lib/source-column-alias":"valor","source":"native","field_ref":["field","valor",{"base-type":"type/Float"}],"effective_type":"type/Float","lib/desired-column-alias":"valor","display_name":"valor","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":165041.0,"q1":165041.0,"q3":165041.0,"max":165041.0,"sd":null,"avg":165041.0}}},"base_type":"type/Float"},{"semantic_type":null,"lib/deduplicated-name":"valor_n1","lib/original-name":"valor_n1","name":"valor_n1","lib/source":"source/native","lib/source-column-alias":"valor_n1","source":"native","field_ref":["field","valor_n1",{"base-type":"type/Float"}],"effective_type":"type/Float","lib/desired-column-alias":"valor_n1","display_name":"valor_n1","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Number":{"min":101878.0,"q1":101878.0,"q3":101878.0,"max":101878.0,"sd":null,"avg":101878.0}}},"base_type":"type/Float"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","is_data_analyst":false,"last_login":null,"is_qbnewb":true,"is_superuser":false,"id":301,"last_name":"","tenant_id":null,"date_joined":"2025-09-15T09:45:46.250461Z","common_name":"data_exploration"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":583,"query_type":"native","name":"Citas previas (pago tienda)","last_query_start":"2026-07-01T15:23:53.209827Z","is_remote_synced":false,"dashboard_count":1,"document_id":null,"last_used_at":"2026-07-01T15:23:53.442369Z","dashboard":null,"type":"question","average_query_time":4342.4250000000000000,"creator_id":301,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-06-18T16:29:18.019412Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":360,"dataset_query":{"lib/type":"mbql/query","database":6,"stages":[{"template-tags":{"fecha":{"dimension":["field",{"base-type":"type/DateTime","lib/uuid":"18cf1fcd-1dd8-40de-8ff6-009a77db7028"},109464],"widget-type":"date/range","type":"dimension","name":"fecha","display-name":"Fecha","id":"ffff0001-1094-4f00-aaaa-000000000001"},"centro":{"dimension":["field",{"base-type":"type/Text","lib/uuid":"2285effb-800b-4c33-9fec-20bca683e188"},278633],"widget-type":"string/=","type":"dimension","name":"centro","display-name":"Centro","id":"ffff0002-1094-4f00-aaaa-000000000002"},"ensena":{"dimension":["field",{"base-type":"type/Text","lib/uuid":"a5c35a46-8940-42e3-9bff-73431604ae52"},278634],"widget-type":"string/=","type":"dimension","name":"ensena","display-name":"Ensena","id":"ffff0003-1094-4f00-aaaa-000000000003"}},"lib/type":"mbql.stage/native","native":"WITH dwin AS (\n SELECT MIN(`anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha) lo, LEAST(MAX(`anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha), CURRENT_DATE()) hi\n FROM `autingo-159109.anjana_bi_datamart.Cubo_Ventas_Calculado` `anjana_bi_datamart.Cubo_Ventas_Calculado`\n WHERE `anjana_bi_datamart.Cubo_Ventas_Calculado`.fecha >= DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY)\n [[AND {{fecha}}]]\n),\ncp AS (\n SELECT ar.appointment_created_at AS d, ar.total_income AS v\n FROM `autingo-159109.claude_bi.appointment_reports` ar\n JOIN `autingo-159109.psql_dcpublic.centers` cc ON cc.id = ar.center_id\n JOIN `autingo-159109.rag_datasets.Objeto_Centros` `rag_datasets.Objeto_Centros`\n ON `rag_datasets.Objeto_Centros`.nav_id = cc.nav_id\n WHERE ar.company_id IN (1,2)\n AND ar.appointment_created_at >= DATE_SUB((SELECT lo FROM dwin), INTERVAL 1 YEAR)\n AND ar.appointment_created_at <= (SELECT hi FROM dwin)\n [[AND {{centro}}]]\n [[AND {{ensena}}]]\n),\nagg AS (\n SELECT\n SUM(CASE WHEN d BETWEEN (SELECT lo FROM dwin) AND (SELECT hi FROM dwin) THEN v END) AS valor,\n SUM(CASE WHEN d BETWEEN DATE_SUB((SELECT lo FROM dwin),INTERVAL 1 YEAR) AND DATE_SUB((SELECT hi FROM dwin),INTERVAL 1 YEAR) THEN v END) AS valor_n1\n FROM cp\n)\nSELECT (SELECT hi FROM dwin) AS d_max, ROUND(valor) AS valor, ROUND(valor_n1) AS valor_n1 FROM agg"}]},"id":11858,"legacy_query":null,"parameter_mappings":[],"can_manage_db":false,"display":"smartscalar","archived_directly":false,"entity_id":"q8RdQHSrlHdicxKDazISY","collection_preview":true,"last-edit-info":{"id":301,"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","last_name":"","timestamp":"2026-06-18T16:29:15.072449Z"},"visualization_settings":{"scalar.field":"valor","scalar.comparisons":[{"id":"cmp_n1","type":"anotherColumn","column":"valor_n1","label":"vs N-1"}],"column_settings":{"[\"name\",\"valor\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0},"[\"name\",\"valor_n1\"]":{"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0}}},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"claude","archive_operation_id":null,"name":"Claude","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":583,"archived_directly":null,"entity_id":"QjYHPvxn1zX2HY5U4QELT","location":"/","namespace":null,"is_personal":false,"created_at":"2026-03-17T15:46:05.729991Z"},"metabase_version":"v0.59.4 (d4fb593)","parameters":[],"dashboard_id":null,"created_at":"2026-06-18T15:46:13.470005Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_4491.json b/scratchpad/exf/card_4491.json new file mode 100644 index 00000000..4b044661 --- /dev/null +++ b/scratchpad/exf/card_4491.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2025-08-18T14:54:44.860232Z","description":null,"archived":false,"view_count":15,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"display_name":"Fecha","field_ref":["field","Fecha",{"base-type":"type/DateTime"}],"base_type":"type/DateTime","effective_type":"type/DateTime","name":"Fecha","semantic_type":null,"fingerprint":{"global":{"distinct-count":237,"nil%":0},"type":{"type/DateTime":{"earliest":"2009-04-01T00:00:00Z","latest":"2009-12-31T00:00:00Z"}}}},{"display_name":"numeroDocumento","field_ref":["field","numeroDocumento",{"base-type":"type/Text"}],"base_type":"type/Text","effective_type":"type/Text","name":"numeroDocumento","semantic_type":null,"fingerprint":{"global":{"distinct-count":1503,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":8}}}},{"display_name":"NumeroLineas","field_ref":["field","NumeroLineas",{"base-type":"type/Integer"}],"base_type":"type/Integer","effective_type":"type/Integer","name":"NumeroLineas","semantic_type":null,"fingerprint":{"global":{"distinct-count":594,"nil%":0},"type":{"type/Number":{"min":6,"q1":228.51680318371746,"q3":466.9452125027003,"max":959,"sd":182.8957877390257,"avg":363.979}}}},{"display_name":"idCentro","field_ref":["field","idCentro",{"base-type":"type/Text"}],"base_type":"type/Text","effective_type":"type/Text","name":"idCentro","semantic_type":null,"fingerprint":{"global":{"distinct-count":27,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":2}}}},{"display_name":"idProducto","field_ref":["field","idProducto",{"base-type":"type/Text"}],"base_type":"type/Text","effective_type":"type/Text","name":"idProducto","semantic_type":null,"fingerprint":{"global":{"distinct-count":810,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":5.5705}}}},{"display_name":"cantidad","field_ref":["field","cantidad",{"base-type":"type/Decimal"}],"base_type":"type/Decimal","effective_type":"type/Decimal","name":"cantidad","semantic_type":null,"fingerprint":{"global":{"distinct-count":53,"nil%":0},"type":{"type/Number":{"min":-15,"q1":0.737163745697352,"q3":2.146316489243569,"max":190,"sd":7.007927601983151,"avg":2.6025}}}},{"display_name":"precioUnitario","field_ref":["field","precioUnitario",{"base-type":"type/Decimal"}],"base_type":"type/Decimal","effective_type":"type/Decimal","name":"precioUnitario","semantic_type":null,"fingerprint":{"global":{"distinct-count":853,"nil%":0},"type":{"type/Number":{"min":-83.33,"q1":2.821323927479358,"q3":19.420650445326515,"max":150.86,"sd":20.783292427628627,"avg":14.764758225973896}}}},{"display_name":"Base_imponible_linea","field_ref":["field","Base_imponible_linea",{"base-type":"type/Decimal"}],"base_type":"type/Decimal","effective_type":"type/Decimal","name":"Base_imponible_linea","semantic_type":null,"fingerprint":{"global":{"distinct-count":974,"nil%":0},"type":{"type/Number":{"min":-336.54,"q1":2.3747941572956925,"q3":25.211494358639815,"max":743.8,"sd":57.599729523052666,"avg":20.432785000000003}}}},{"display_name":"Tipo_de_documento","field_ref":["field","Tipo_de_documento",{"base-type":"type/Text"}],"base_type":"type/Text","effective_type":"type/Text","name":"Tipo_de_documento","semantic_type":null,"fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":7}}}},{"display_name":"semana","field_ref":["field","semana",{"base-type":"type/Integer"}],"base_type":"type/Integer","effective_type":"type/Integer","name":"semana","semantic_type":null,"fingerprint":{"global":{"distinct-count":40,"nil%":0},"type":{"type/Number":{"min":14,"q1":24.300905440843287,"q3":42.57370066220581,"max":53,"sd":11.074430696773032,"avg":33.4425}}}},{"display_name":"ano","field_ref":["field","ano",{"base-type":"type/Integer"}],"base_type":"type/Integer","effective_type":"type/Integer","name":"ano","semantic_type":null,"fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Number":{"min":2009,"q1":2009,"q3":2009,"max":2009,"sd":0,"avg":2009}}}},{"display_name":"ano_mas_uno","field_ref":["field","ano_mas_uno",{"base-type":"type/Integer"}],"base_type":"type/Integer","effective_type":"type/Integer","name":"ano_mas_uno","semantic_type":null,"fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Number":{"min":2010,"q1":2010,"q3":2010,"max":2010,"sd":0,"avg":2010}}}},{"display_name":"Fecha_mas_un_ano","field_ref":["field","Fecha_mas_un_ano",{"base-type":"type/DateTime"}],"base_type":"type/DateTime","effective_type":"type/DateTime","name":"Fecha_mas_un_ano","semantic_type":null,"fingerprint":{"global":{"distinct-count":237,"nil%":0},"type":{"type/DateTime":{"earliest":"2010-04-01T00:00:00Z","latest":"2010-12-31T00:00:00Z"}}}},{"display_name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","field_ref":["field","Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c",{"base-type":"type/Text"}],"base_type":"type/Text","effective_type":"type/Text","name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","semantic_type":null,"fingerprint":{"global":{"distinct-count":1,"nil%":1},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":0}}}},{"display_name":"NumeroLineaOrdenada","field_ref":["field","NumeroLineaOrdenada",{"base-type":"type/Integer"}],"base_type":"type/Integer","effective_type":"type/Integer","name":"NumeroLineaOrdenada","semantic_type":null,"fingerprint":{"global":{"distinct-count":513,"nil%":0},"type":{"type/Number":{"min":1,"q1":62.51603683133231,"q3":260.1455507916213,"max":856,"sd":148.4200744691083,"avg":180.871}}}}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"egutierrez@aurgi.com","first_name":"Enmanuel","is_data_analyst":false,"last_login":"2026-07-01T10:00:47.469194Z","is_qbnewb":false,"is_superuser":true,"id":219,"last_name":"Gutierrez Perez","tenant_id":null,"date_joined":"2024-03-26T10:34:07.442Z","common_name":"Enmanuel Gutierrez Perez"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":406,"query_type":"native","name":"Movimientos Lineas de Venta - TPV - Numero_de_linea","last_query_start":"2026-07-01T14:27:50.716013Z","is_remote_synced":false,"dashboard_count":0,"document_id":null,"last_used_at":"2026-07-01T15:22:06.256525Z","dashboard":null,"type":"question","average_query_time":12620.705882352941,"creator_id":219,"can_restore":false,"moderation_reviews":[],"updated_at":"2025-08-18T14:54:44.828424Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":null,"dataset_query":{"lib/type":"mbql/query","stages":[{"lib/type":"mbql.stage/native","native":"SELECT\n `source`.`Fecha` AS `Fecha`,\n `source`.`numeroDocumento` AS `numeroDocumento`,\n `source`.`NumeroLineas` AS `NumeroLineas`,\n `source`.`idCentro` AS `idCentro`,\n `source`.`idProducto` AS `idProducto`,\n `source`.`cantidad` AS `cantidad`,\n `source`.`precioUnitario` AS `precioUnitario`,\n `source`.`Base_imponible_linea` AS `Base_imponible_linea`,\n `source`.`Tipo_de_documento` AS `Tipo_de_documento`,\n `source`.`semana` AS `semana`,\n `source`.`ano` AS `ano`,\n `source`.`ano_mas_uno` AS `ano_mas_uno`,\n `source`.`Fecha_mas_un_ano` AS `Fecha_mas_un_ano`,\n `source`.`Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c`,\nROW_NUMBER() OVER (\n PARTITION BY source.numeroDocumento\n ORDER BY source.idProducto ASC\n) AS NumeroLineaOrdenada\n\nFROM\n (\n SELECT\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha` AS `Fecha`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`numeroDocumento` AS `numeroDocumento`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`NumeroLineas` AS `NumeroLineas`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`idCentro` AS `idCentro`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`idProducto` AS `idProducto`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`cantidad` AS `cantidad`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`precioUnitario` AS `precioUnitario`,\n `stg_anjana_bi.Movimientos_sin_albaranes`.`cantidad` * `stg_anjana_bi.Movimientos_sin_albaranes`.`precioUnitario` AS `Base_imponible_linea`,\n CASE\n WHEN `stg_anjana_bi.Movimientos_sin_albaranes`.`idTipoDocumento` = 1 THEN 'Factura'\n WHEN `stg_anjana_bi.Movimientos_sin_albaranes`.`idTipoDocumento` = 2 THEN 'Abono'\n END AS `Tipo_de_documento`,\n EXTRACT(\n isoweek\n FROM\n TIMESTAMP(\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\n 'Europe/Madrid'\n ) AT TIME ZONE 'Europe/Madrid'\n ) AS `semana`,\n EXTRACT(\n year\n FROM\n TIMESTAMP(\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\n 'Europe/Madrid'\n ) AT TIME ZONE 'Europe/Madrid'\n ) AS `ano`,\n EXTRACT(\n year\n FROM\n TIMESTAMP(\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\n 'Europe/Madrid'\n ) AT TIME ZONE 'Europe/Madrid'\n ) + 1 AS `ano_mas_uno`,\n DATETIME_ADD(\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\n INTERVAL 1 year\n ) AS `Fecha_mas_un_ano`,\n `Anjana_Sales_Cr_Memo_Header___NumeroDocumento`.`corrected_invoice_no_` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c`\n FROM\n `stg_anjana_bi.Movimientos_sin_albaranes`\n \nLEFT JOIN `mssql2022_dbo.anjana_sales_cr_memo_header` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento` ON `stg_anjana_bi.Movimientos_sin_albaranes`.`numeroDocumento` = `Anjana_Sales_Cr_Memo_Header___NumeroDocumento`.`no_`\n \nORDER BY\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha` DESC\n ) AS `source`"}],"database":6,"lib.convert/converted?":true},"id":4491,"legacy_query":"{\"database\":6,\"type\":\"native\",\"native\":{\"template-tags\":{},\"query\":\"SELECT\\n `source`.`Fecha` AS `Fecha`,\\n `source`.`numeroDocumento` AS `numeroDocumento`,\\n `source`.`NumeroLineas` AS `NumeroLineas`,\\n `source`.`idCentro` AS `idCentro`,\\n `source`.`idProducto` AS `idProducto`,\\n `source`.`cantidad` AS `cantidad`,\\n `source`.`precioUnitario` AS `precioUnitario`,\\n `source`.`Base_imponible_linea` AS `Base_imponible_linea`,\\n `source`.`Tipo_de_documento` AS `Tipo_de_documento`,\\n `source`.`semana` AS `semana`,\\n `source`.`ano` AS `ano`,\\n `source`.`ano_mas_uno` AS `ano_mas_uno`,\\n `source`.`Fecha_mas_un_ano` AS `Fecha_mas_un_ano`,\\n `source`.`Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c`,\\nROW_NUMBER() OVER (\\n PARTITION BY source.numeroDocumento\\n ORDER BY source.idProducto ASC\\n) AS NumeroLineaOrdenada\\n\\nFROM\\n (\\n SELECT\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha` AS `Fecha`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`numeroDocumento` AS `numeroDocumento`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`NumeroLineas` AS `NumeroLineas`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`idCentro` AS `idCentro`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`idProducto` AS `idProducto`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`cantidad` AS `cantidad`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`precioUnitario` AS `precioUnitario`,\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`cantidad` * `stg_anjana_bi.Movimientos_sin_albaranes`.`precioUnitario` AS `Base_imponible_linea`,\\n CASE\\n WHEN `stg_anjana_bi.Movimientos_sin_albaranes`.`idTipoDocumento` = 1 THEN 'Factura'\\n WHEN `stg_anjana_bi.Movimientos_sin_albaranes`.`idTipoDocumento` = 2 THEN 'Abono'\\n END AS `Tipo_de_documento`,\\n EXTRACT(\\n isoweek\\n FROM\\n TIMESTAMP(\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\\n 'Europe/Madrid'\\n ) AT TIME ZONE 'Europe/Madrid'\\n ) AS `semana`,\\n EXTRACT(\\n year\\n FROM\\n TIMESTAMP(\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\\n 'Europe/Madrid'\\n ) AT TIME ZONE 'Europe/Madrid'\\n ) AS `ano`,\\n EXTRACT(\\n year\\n FROM\\n TIMESTAMP(\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\\n 'Europe/Madrid'\\n ) AT TIME ZONE 'Europe/Madrid'\\n ) + 1 AS `ano_mas_uno`,\\n DATETIME_ADD(\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha`,\\n INTERVAL 1 year\\n ) AS `Fecha_mas_un_ano`,\\n `Anjana_Sales_Cr_Memo_Header___NumeroDocumento`.`corrected_invoice_no_` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c`\\n FROM\\n `stg_anjana_bi.Movimientos_sin_albaranes`\\n \\nLEFT JOIN `mssql2022_dbo.anjana_sales_cr_memo_header` AS `Anjana_Sales_Cr_Memo_Header___NumeroDocumento` ON `stg_anjana_bi.Movimientos_sin_albaranes`.`numeroDocumento` = `Anjana_Sales_Cr_Memo_Header___NumeroDocumento`.`no_`\\n \\nORDER BY\\n `stg_anjana_bi.Movimientos_sin_albaranes`.`Fecha` DESC\\n ) AS `source`\"}}","parameter_mappings":[],"can_manage_db":false,"display":"table","archived_directly":false,"entity_id":"klEUDp8SBPOaFSipvWzOJ","collection_preview":true,"last-edit-info":{"id":219,"email":"egutierrez@aurgi.com","first_name":"Enmanuel","last_name":"Gutierrez Perez","timestamp":"2025-08-18T14:54:44.98777Z"},"visualization_settings":{"table.columns":[{"name":"Fecha","enabled":true},{"name":"numeroDocumento","enabled":true},{"name":"quote_no_","enabled":true},{"name":"cantidad","enabled":true},{"name":"precioUnitario","enabled":true},{"name":"Base_imponible_linea","enabled":true},{"name":"NumeroLineas","enabled":true},{"name":"idCentro","enabled":true},{"name":"idProducto","enabled":true},{"name":"semana","enabled":true},{"name":"Tipo_de_documento","enabled":true},{"name":"ano","enabled":true},{"name":"ano_mas_uno","enabled":true},{"name":"Fecha_mas_un_ano","enabled":true},{"name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","enabled":true},{"name":"NumeroLineaOrdenada","enabled":true}],"table.pivot_column":"quote_no_","table.cell_column":"NumeroLineas"},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"ventas","archive_operation_id":null,"name":"VENTAS","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":406,"archived_directly":null,"entity_id":"EMsdi8wENXf6riuJelXXz","location":"/400/","namespace":null,"is_personal":false,"created_at":"2025-07-17T22:44:53.718794Z"},"metabase_version":"v0.55.7 (dcea6a4)","parameters":[],"dashboard_id":null,"created_at":"2025-08-14T13:42:53.711543Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_4493.json b/scratchpad/exf/card_4493.json new file mode 100644 index 00000000..c2170782 --- /dev/null +++ b/scratchpad/exf/card_4493.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-03-13T11:30:49.643569Z","description":null,"archived":false,"view_count":41,"collection_position":null,"source_card_id":null,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"lib/deduplicated-name":"orderitem_id","lib/original-name":"orderitem_id","name":"orderitem_id","lib/source":"source/native","lib/source-column-alias":"orderitem_id","source":"native","field_ref":["field","orderitem_id",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"orderitem_id","display_name":"orderitem_id","fingerprint":{"global":{"distinct-count":2000,"nil%":0.0},"type":{"type/Number":{"min":52037.0,"q1":2.958684657004202E7,"q3":3.886825380192011E7,"max":4.3790929E7,"sd":7775367.058340133,"avg":3.3509041372999996E7}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"valor_linea","lib/original-name":"valor_linea","name":"valor_linea","lib/source":"source/native","lib/source-column-alias":"valor_linea","source":"native","field_ref":["field","valor_linea",{"base-type":"type/Float"}],"effective_type":"type/Float","lib/desired-column-alias":"valor_linea","display_name":"valor_linea","fingerprint":{"global":{"distinct-count":397,"nil%":0.0},"type":{"type/Number":{"min":-41.32231404958678,"q1":3.4984741920903693,"q3":14.513617112679555,"max":260.3223140495868,"sd":18.0196126096143,"avg":12.256510041322315}}},"base_type":"type/Float"},{"semantic_type":null,"lib/deduplicated-name":"nav_id","lib/original-name":"nav_id","name":"nav_id","lib/source":"source/native","lib/source-column-alias":"nav_id","source":"native","field_ref":["field","nav_id",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"nav_id","display_name":"nav_id","fingerprint":{"global":{"distinct-count":1900,"nil%":0.0},"type":{"type/Text":{"percent-json":0.0,"percent-url":0.0,"percent-email":0.0,"percent-state":0.0,"average-length":14.3245}}},"base_type":"type/Text"},{"semantic_type":null,"lib/deduplicated-name":"fecha","lib/original-name":"fecha","name":"fecha","lib/source":"source/native","lib/source-column-alias":"fecha","source":"native","field_ref":["field","fecha",{"base-type":"type/DateTimeWithLocalTZ"}],"effective_type":"type/DateTimeWithLocalTZ","lib/desired-column-alias":"fecha","display_name":"fecha","fingerprint":{"global":{"distinct-count":1900,"nil%":0.0},"type":{"type/DateTime":{"earliest":"2022-04-08T12:29:36.66388Z","latest":"2026-03-27T08:55:13.41165Z"}}},"base_type":"type/DateTimeWithLocalTZ"},{"semantic_type":null,"lib/deduplicated-name":"product_id","lib/original-name":"product_id","name":"product_id","lib/source":"source/native","lib/source-column-alias":"product_id","source":"native","field_ref":["field","product_id",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"product_id","display_name":"product_id","fingerprint":{"global":{"distinct-count":663,"nil%":0.0},"type":{"type/Number":{"min":11063.0,"q1":4615920.257072156,"q3":2.2125587145358697E7,"max":1.945374409E9,"sd":4.098977027978754E8,"avg":1.942166970095E8}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"center_id","lib/original-name":"center_id","name":"center_id","lib/source":"source/native","lib/source-column-alias":"center_id","source":"native","field_ref":["field","center_id",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"center_id","display_name":"center_id","fingerprint":{"global":{"distinct-count":101,"nil%":0.0},"type":{"type/Number":{"min":2.0,"q1":53.1546964091676,"q3":126.4687697567652,"max":186.0,"sd":44.46849855700444,"avg":81.8615}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"tipo","lib/original-name":"tipo","name":"tipo","lib/source":"source/native","lib/source-column-alias":"tipo","source":"native","field_ref":["field","tipo",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"tipo","display_name":"tipo","fingerprint":{"global":{"distinct-count":1,"nil%":0.0},"type":{"type/Text":{"percent-json":0.0,"percent-url":0.0,"percent-email":0.0,"percent-state":0.0,"average-length":7.0}}},"base_type":"type/Text"},{"semantic_type":null,"lib/deduplicated-name":"cantidad","lib/original-name":"cantidad","name":"cantidad","lib/source":"source/native","lib/source-column-alias":"cantidad","source":"native","field_ref":["field","cantidad",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"cantidad","display_name":"cantidad","fingerprint":{"global":{"distinct-count":8,"nil%":0.0},"type":{"type/Number":{"min":-1.0,"q1":0.46078244174660665,"q3":1.3752743488444183,"max":133.0,"sd":2.990908309570544,"avg":1.1595}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"nav_id_producto","lib/original-name":"nav_id_producto","name":"nav_id_producto","lib/source":"source/native","lib/source-column-alias":"nav_id_producto","source":"native","field_ref":["field","nav_id_producto",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"nav_id_producto","display_name":"nav_id_producto","fingerprint":{"global":{"distinct-count":663,"nil%":0.0},"type":{"type/Text":{"percent-json":0.0,"percent-url":0.0,"percent-email":0.0,"percent-state":0.0,"average-length":5.553}}},"base_type":"type/Text"},{"semantic_type":null,"lib/deduplicated-name":"NumeroLineaOrdenada","lib/original-name":"NumeroLineaOrdenada","name":"NumeroLineaOrdenada","lib/source":"source/native","lib/source-column-alias":"NumeroLineaOrdenada","source":"native","field_ref":["field","NumeroLineaOrdenada",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"NumeroLineaOrdenada","display_name":"NumeroLineaOrdenada","fingerprint":{"global":{"distinct-count":8,"nil%":0.0},"type":{"type/Number":{"min":1.0,"q1":1.0,"q3":1.916864166750122,"max":8.0,"sd":0.8938563864625065,"avg":1.5205}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/deduplicated-name":"NumeroLineasTotales","lib/original-name":"NumeroLineasTotales","name":"NumeroLineasTotales","lib/source":"source/native","lib/source-column-alias":"NumeroLineasTotales","source":"native","field_ref":["field","NumeroLineasTotales",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"NumeroLineasTotales","display_name":"NumeroLineasTotales","fingerprint":{"global":{"distinct-count":11,"nil%":0.0},"type":{"type/Number":{"min":1.0,"q1":1.1270963406603265,"q3":2.6753046269430953,"max":12.0,"sd":1.309847930410397,"avg":2.0875}}},"base_type":"type/Integer"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"egutierrez@aurgi.com","first_name":"Enmanuel","is_data_analyst":false,"last_login":"2026-07-01T10:00:47.469194Z","is_qbnewb":false,"is_superuser":true,"id":219,"last_name":"Gutierrez Perez","tenant_id":null,"date_joined":"2024-03-26T10:34:07.442Z","common_name":"Enmanuel Gutierrez Perez"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":406,"query_type":"native","name":"Movimientos de venta de TPV con numero de linea","last_query_start":"2026-07-01T14:28:26.630814Z","is_remote_synced":false,"dashboard_count":1,"document_id":null,"last_used_at":"2026-07-01T15:22:06.256525Z","dashboard":null,"type":"question","average_query_time":15764.961538461538,"creator_id":219,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-03-13T11:31:30.088739Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":null,"dataset_query":{"lib/type":"mbql/query","stages":[{"lib/type":"mbql.stage/native","native":"SELECT\n tpv.*, \n `Products___product_id`.`nav_id` AS `nav_id_producto`,\n \n ROW_NUMBER() OVER (\n PARTITION BY tpv.`nav_id`\n ORDER BY SAFE_CAST(`Products___product_id`.`nav_id`as int) ASC,\n tpv.`valor_linea` ASC\n ) AS NumeroLineaOrdenada,\n\n \n COUNT(*) OVER (\n PARTITION BY tpv.`nav_id`\n ) AS NumeroLineasTotales\n \nFROM `autingo-159109.anjana_bi_datamart.Lineas_ventas-TPV_Ok` AS tpv\nLEFT JOIN `psql_dcpublic.products` AS `Products___product_id` \n ON tpv.`product_id` = `Products___product_id`.`id`\n\nWHERE tpv.`valor_linea` != 0"}],"database":6,"lib.convert/converted?":true},"id":4493,"legacy_query":"{\"database\":6,\"type\":\"native\",\"native\":{\"template-tags\":{},\"query\":\"SELECT\\n tpv.*, \\n `Products___product_id`.`nav_id` AS `nav_id_producto`,\\n \\n ROW_NUMBER() OVER (\\n PARTITION BY tpv.`nav_id`\\n ORDER BY SAFE_CAST(`Products___product_id`.`nav_id`as int) ASC,\\n tpv.`valor_linea` ASC\\n ) AS NumeroLineaOrdenada,\\n\\n \\n COUNT(*) OVER (\\n PARTITION BY tpv.`nav_id`\\n ) AS NumeroLineasTotales\\n \\nFROM `autingo-159109.anjana_bi_datamart.Lineas_ventas-TPV_Ok` AS tpv\\nLEFT JOIN `psql_dcpublic.products` AS `Products___product_id` \\n ON tpv.`product_id` = `Products___product_id`.`id`\\n\\nWHERE tpv.`valor_linea` != 0\"}}","parameter_mappings":[],"can_manage_db":false,"display":"table","archived_directly":false,"entity_id":"AtlqaDw6F5_apLBZ6hW-B","collection_preview":true,"last-edit-info":{"id":219,"email":"egutierrez@aurgi.com","first_name":"Enmanuel","last_name":"Gutierrez Perez","timestamp":"2026-03-13T11:30:49.803253Z"},"visualization_settings":{"table.pivot_column":"tipo","table.cell_column":"valor_linea"},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"ventas","archive_operation_id":null,"name":"VENTAS","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":406,"archived_directly":null,"entity_id":"EMsdi8wENXf6riuJelXXz","location":"/400/","namespace":null,"is_personal":false,"created_at":"2025-07-17T22:44:53.718794Z"},"metabase_version":"v0.55.7 (dcea6a4)","parameters":[],"dashboard_id":null,"created_at":"2025-08-14T13:49:49.845138Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/card_4494.json b/scratchpad/exf/card_4494.json new file mode 100644 index 00000000..9c69a5b1 --- /dev/null +++ b/scratchpad/exf/card_4494.json @@ -0,0 +1 @@ +{"cache_invalidated_at":"2026-07-01T14:26:54.88337Z","description":null,"archived":false,"view_count":60,"collection_position":1,"source_card_id":4491,"table_id":null,"can_run_adhoc_query":true,"result_metadata":[{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"Fecha","lib/original-name":"Fecha","lib/breakout?":false,"name":"Fecha","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"Fecha","source":"fields","field_ref":["field","Fecha",{"base-type":"type/DateTime"}],"effective_type":"type/DateTime","lib/desired-column-alias":"Fecha","display_name":"Fecha","fingerprint":{"global":{"distinct-count":237,"nil%":0},"type":{"type/DateTime":{"earliest":"2009-04-01T00:00:00Z","latest":"2009-12-31T00:00:00Z"}}},"base_type":"type/DateTime"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"numeroDocumento","lib/original-name":"numeroDocumento","lib/breakout?":false,"name":"numeroDocumento","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"numeroDocumento","source":"fields","field_ref":["field","numeroDocumento",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"numeroDocumento","display_name":"numeroDocumento","fingerprint":{"global":{"distinct-count":1503,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":8}}},"base_type":"type/Text"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"NumeroLineas","lib/original-name":"NumeroLineas","lib/breakout?":false,"name":"NumeroLineas","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"NumeroLineas","source":"fields","field_ref":["field","NumeroLineas",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"NumeroLineas","display_name":"NumeroLineas","fingerprint":{"global":{"distinct-count":594,"nil%":0},"type":{"type/Number":{"min":6,"q1":228.51680318371746,"q3":466.9452125027003,"max":959,"sd":182.8957877390257,"avg":363.979}}},"base_type":"type/Integer"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"idCentro","lib/original-name":"idCentro","lib/breakout?":false,"name":"idCentro","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"idCentro","source":"fields","field_ref":["field","idCentro",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"idCentro","display_name":"idCentro","fingerprint":{"global":{"distinct-count":27,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":2}}},"base_type":"type/Text"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"idProducto","lib/original-name":"idProducto","lib/breakout?":false,"name":"idProducto","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"idProducto","source":"fields","field_ref":["field","idProducto",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"idProducto","display_name":"idProducto","fingerprint":{"global":{"distinct-count":810,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":5.5705}}},"base_type":"type/Text"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"cantidad","lib/original-name":"cantidad","lib/breakout?":false,"name":"cantidad","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"cantidad","source":"fields","field_ref":["field","cantidad",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"cantidad","display_name":"cantidad","fingerprint":{"global":{"distinct-count":53,"nil%":0},"type":{"type/Number":{"min":-15,"q1":0.737163745697352,"q3":2.146316489243569,"max":190,"sd":7.007927601983151,"avg":2.6025}}},"base_type":"type/Decimal"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"precioUnitario","lib/original-name":"precioUnitario","lib/breakout?":false,"name":"precioUnitario","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"precioUnitario","source":"fields","field_ref":["field","precioUnitario",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"precioUnitario","display_name":"precioUnitario","fingerprint":{"global":{"distinct-count":853,"nil%":0},"type":{"type/Number":{"min":-83.33,"q1":2.821323927479358,"q3":19.420650445326515,"max":150.86,"sd":20.783292427628627,"avg":14.764758225973896}}},"base_type":"type/Decimal"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"Base_imponible_linea","lib/original-name":"Base_imponible_linea","lib/breakout?":false,"name":"Base_imponible_linea","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"Base_imponible_linea","source":"fields","field_ref":["field","Base_imponible_linea",{"base-type":"type/Decimal"}],"effective_type":"type/Decimal","lib/desired-column-alias":"Base_imponible_linea","display_name":"Base_imponible_linea","fingerprint":{"global":{"distinct-count":974,"nil%":0},"type":{"type/Number":{"min":-336.54,"q1":2.3747941572956925,"q3":25.211494358639815,"max":743.8,"sd":57.599729523052666,"avg":20.432785000000003}}},"base_type":"type/Decimal"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"Tipo_de_documento","lib/original-name":"Tipo_de_documento","lib/breakout?":false,"name":"Tipo_de_documento","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"Tipo_de_documento","source":"fields","field_ref":["field","Tipo_de_documento",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"Tipo_de_documento","display_name":"Tipo_de_documento","fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":7}}},"base_type":"type/Text"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"semana","lib/original-name":"semana","lib/breakout?":false,"name":"semana","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"semana","source":"fields","field_ref":["field","semana",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"semana","display_name":"semana","fingerprint":{"global":{"distinct-count":40,"nil%":0},"type":{"type/Number":{"min":14,"q1":24.300905440843287,"q3":42.57370066220581,"max":53,"sd":11.074430696773032,"avg":33.4425}}},"base_type":"type/Integer"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"ano","lib/original-name":"ano","lib/breakout?":false,"name":"ano","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"ano","source":"fields","field_ref":["field","ano",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"ano","display_name":"ano","fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Number":{"min":2009,"q1":2009,"q3":2009,"max":2009,"sd":0,"avg":2009}}},"base_type":"type/Integer"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"ano_mas_uno","lib/original-name":"ano_mas_uno","lib/breakout?":false,"name":"ano_mas_uno","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"ano_mas_uno","source":"fields","field_ref":["field","ano_mas_uno",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"ano_mas_uno","display_name":"ano_mas_uno","fingerprint":{"global":{"distinct-count":1,"nil%":0},"type":{"type/Number":{"min":2010,"q1":2010,"q3":2010,"max":2010,"sd":0,"avg":2010}}},"base_type":"type/Integer"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"Fecha_mas_un_ano","lib/original-name":"Fecha_mas_un_ano","lib/breakout?":false,"name":"Fecha_mas_un_ano","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"Fecha_mas_un_ano","source":"fields","field_ref":["field","Fecha_mas_un_ano",{"base-type":"type/DateTime"}],"effective_type":"type/DateTime","lib/desired-column-alias":"Fecha_mas_un_ano","display_name":"Fecha_mas_un_ano","fingerprint":{"global":{"distinct-count":237,"nil%":0},"type":{"type/DateTime":{"earliest":"2010-04-01T00:00:00Z","latest":"2010-12-31T00:00:00Z"}}},"base_type":"type/DateTime"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","lib/original-name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","lib/breakout?":false,"name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","source":"fields","field_ref":["field","Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c",{"base-type":"type/Text"}],"effective_type":"type/Text","lib/desired-column-alias":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","display_name":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","fingerprint":{"global":{"distinct-count":1,"nil%":1},"type":{"type/Text":{"percent-json":0,"percent-url":0,"percent-email":0,"percent-state":0,"average-length":0}}},"base_type":"type/Text"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"NumeroLineaOrdenada","lib/original-name":"NumeroLineaOrdenada","lib/breakout?":false,"name":"NumeroLineaOrdenada","lib/card-id":4491,"lib/source":"source/previous-stage","lib/source-column-alias":"NumeroLineaOrdenada","source":"fields","field_ref":["field","NumeroLineaOrdenada",{"base-type":"type/Integer"}],"effective_type":"type/Integer","lib/desired-column-alias":"NumeroLineaOrdenada","display_name":"NumeroLineaOrdenada","fingerprint":{"global":{"distinct-count":513,"nil%":0},"type":{"type/Number":{"min":1,"q1":62.51603683133231,"q3":260.1455507916213,"max":856,"sd":148.4200744691083,"avg":180.871}}},"base_type":"type/Integer"},{"semantic_type":null,"lib/expression-name":"Valor_tpv","qp/implicit-field?":true,"lib/deduplicated-name":"Valor_tpv","lib/original-name":"Valor_tpv","name":"Valor_tpv","lib/source":"source/expressions","lib/source-column-alias":"Valor_tpv","source":"fields","field_ref":["expression","Valor_tpv"],"effective_type":"type/Float","lib/desired-column-alias":"Valor_tpv","display_name":"Valor_tpv","base_type":"type/Float"},{"semantic_type":null,"lib/expression-name":"diferencia","qp/implicit-field?":true,"lib/deduplicated-name":"diferencia","lib/original-name":"diferencia","name":"diferencia","lib/source":"source/expressions","lib/source-column-alias":"diferencia","source":"fields","field_ref":["expression","diferencia"],"effective_type":"type/Float","lib/desired-column-alias":"diferencia","display_name":"diferencia","base_type":"type/Float"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"orderitem_id","lib/original-name":"orderitem_id","lib/breakout?":false,"name":"orderitem_id","lib/card-id":4493,"lib/source":"source/joins","lib/source-column-alias":"orderitem_id","lib/original-display-name":"orderitem_id","source":"fields","lib/original-join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","field_ref":["field","orderitem_id",{"base-type":"type/Integer","join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c"}],"effective_type":"type/Integer","lib/desired-column-alias":"Movimientos de venta de TPV con numero de linea - n_ecf5fefa","options":{"qp/ignore-coercion":true},"display_name":"Ordeitem Id","fingerprint":{"global":{"distinct-count":2000,"nil%":0.0},"type":{"type/Number":{"min":52037.0,"q1":2.958684657004202E7,"q3":3.886825380192011E7,"max":4.3790929E7,"sd":7775367.058340133,"avg":3.3509041372999996E7}}},"base_type":"type/Integer","source_alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","metabase.lib.join/join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c"},{"semantic_type":null,"qp/implicit-field?":true,"lib/deduplicated-name":"valor_linea","lib/original-name":"valor_linea","lib/breakout?":false,"name":"valor_linea","lib/card-id":4493,"lib/source":"source/joins","lib/source-column-alias":"valor_linea","lib/original-display-name":"valor_linea","source":"fields","lib/original-join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","field_ref":["field","valor_linea",{"base-type":"type/Float","join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c"}],"effective_type":"type/Float","lib/desired-column-alias":"Movimientos de venta de TPV con numero de linea - n_4b0dbdaf","options":{"qp/ignore-coercion":true},"display_name":"Valor_Linea TPV","fingerprint":{"global":{"distinct-count":397,"nil%":0.0},"type":{"type/Number":{"min":-41.32231404958678,"q1":3.4984741920903693,"q3":14.513617112679555,"max":260.3223140495868,"sd":18.0196126096143,"avg":12.256510041322315}}},"base_type":"type/Float","source_alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","metabase.lib.join/join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c"},{"description":null,"database_type":"INTEGER","semantic_type":null,"table_id":1555,"qp/implicit-field?":true,"lib/deduplicated-name":"order_id","lib/original-name":"order_id","lib/breakout?":false,"name":"order_id","lib/source":"source/joins","lib/source-column-alias":"order_id","lib/original-display-name":"Order ID","settings":null,"source":"fields","fk_target_field_id":null,"lib/original-join-alias":"Tpv Orders Orderitem - orderitem_id","field_ref":["field",16711,{"join-alias":"Tpv Orders Orderitem - orderitem_id"}],"effective_type":"type/Integer","active":true,"id":16711,"database_partitioned":false,"lib/desired-column-alias":"Tpv Orders Orderitem - orderitem_id__order_id","position":2,"visibility_type":"normal","options":{"qp/ignore-coercion":true},"display_name":"Order ID","fingerprint":{"global":{"distinct-count":9760,"nil%":0.0},"type":{"type/Number":{"min":177.0,"q1":10874.659045031356,"q3":29971.437643027562,"max":42937.0,"sd":11525.57162283473,"avg":20604.146399999998}}},"base_type":"type/Integer","source_alias":"Tpv Orders Orderitem - orderitem_id","metabase.lib.join/join-alias":"Tpv Orders Orderitem - orderitem_id"}],"embedding_type":null,"dependency_analysis_version":0,"creator":{"email":"egutierrez@aurgi.com","first_name":"Enmanuel","is_data_analyst":false,"last_login":"2026-07-01T10:00:47.469194Z","is_qbnewb":false,"is_superuser":true,"id":219,"last_name":"Gutierrez Perez","tenant_id":null,"date_joined":"2024-03-26T10:34:07.442Z","common_name":"Enmanuel Gutierrez Perez"},"initially_published_at":null,"can_write":true,"card_schema":23,"database_id":6,"enable_embedding":false,"collection_id":406,"query_type":"query","name":"Movimientos de Venta de Navision con Orderitem TPV","last_query_start":"2026-07-01T15:22:06.02549Z","is_remote_synced":false,"dashboard_count":0,"document_id":null,"last_used_at":"2026-07-01T15:22:06.256525Z","dashboard":null,"type":"model","persisted":false,"average_query_time":15323.300000000000,"creator_id":219,"can_restore":false,"moderation_reviews":[],"updated_at":"2026-07-01T14:26:54.870111Z","made_public_by_id":null,"embedding_params":null,"cache_ttl":null,"dataset_query":{"lib/type":"mbql/query","database":6,"stages":[{"order-by":[["desc",{"lib/uuid":"b49d15a7-c413-4ca1-a4ab-4ccacde2e30b"},["expression",{"effective-type":"type/Float","base-type":"type/Float","lib/uuid":"5bc94ea3-2f0d-4a7b-8348-9c663b7e634e"},"diferencia"]]],"lib/type":"mbql.stage/mbql","joins":[{"lib/type":"mbql/join","fields":[["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Integer","lib/uuid":"28994135-1096-4c6c-8004-cd3332c01f1d"},"orderitem_id"],["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Float","lib/uuid":"005f7d4d-4a41-4834-96c1-617b92b9c5f2"},"valor_linea"]],"alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","strategy":"left-join","conditions":[["=",{"lib/uuid":"8b7ccf32-f9fa-421f-bda4-8cbc30718b69"},["field",{"base-type":"type/Text","lib/uuid":"08698809-ab05-4708-bd06-47d7bf72602b"},"numeroDocumento"],["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Text","lib/uuid":"48f3762b-357a-41e2-a9c5-4d98c2941162"},"nav_id"]],["=",{"lib/uuid":"f040d95e-8c79-4e9e-888c-2b865dc9f977"},["field",{"base-type":"type/Text","lib/uuid":"5d95fc19-768a-483b-b2da-dbe0f213b186"},"idProducto"],["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Text","lib/uuid":"91a45edf-277e-4bc7-a111-f55f0f5ecf0e"},"nav_id_producto"]],["=",{"lib/uuid":"a708ca2a-1932-459c-9187-022dbfb9c416"},["field",{"base-type":"type/Integer","lib/uuid":"66661060-a8e8-4981-bb5a-899eed05ca93"},"NumeroLineaOrdenada"],["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Integer","lib/uuid":"f7780ed3-2530-4657-9e04-7d47fdfe449a"},"NumeroLineaOrdenada"]]],"stages":[{"lib/type":"mbql.stage/mbql","source-card":4493}],"lib/options":{"lib/uuid":"c7d804c1-9eb4-4139-8149-238a13ef748a"}},{"lib/type":"mbql/join","fields":[["field",{"lib/uuid":"95caba38-84e1-49e9-8c36-7657ec9a84be","base-type":"type/Integer","join-alias":"Tpv Orders Orderitem - orderitem_id","effective-type":"type/Integer"},16711]],"strategy":"left-join","alias":"Tpv Orders Orderitem - orderitem_id","conditions":[["=",{"lib/uuid":"ad4ddc6e-dd7c-4ae0-8f38-2bd910163169"},["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Integer","lib/uuid":"2d17ce82-bc7e-4676-82bf-d131ade7bde2"},"orderitem_id"],["field",{"lib/uuid":"472903e2-0376-4671-aed3-0ce4b9136ef7","base-type":"type/Integer","join-alias":"Tpv Orders Orderitem - orderitem_id","effective-type":"type/Integer"},16737]]],"stages":[{"lib/type":"mbql.stage/mbql","source-table":1555}],"lib/options":{"lib/uuid":"f87ba648-c9b0-4344-8ddf-12a28b424f45"}}],"expressions":[["coalesce",{"lib/uuid":"bcb133e6-a6de-40fd-9987-5dd8f8187a48","lib/expression-name":"Valor_tpv"},["field",{"join-alias":"Movimientos de venta de TPV con numero de linea - n_5fca956c","base-type":"type/Float","lib/uuid":"bf05677f-be4e-4b5c-905e-631b0bc0f1ff"},"valor_linea"],0],["abs",{"lib/uuid":"ab0840a8-9315-46c2-9d3e-7f33060e53e9","lib/expression-name":"diferencia"},["-",{"lib/uuid":"871c4e8f-3240-44bf-9a63-c81b062fd961"},["expression",{"effective-type":"type/Float","base-type":"type/Float","lib/uuid":"c22eda3e-1292-45b8-a894-28c456cd1d20"},"Valor_tpv"],["field",{"base-type":"type/Decimal","lib/uuid":"be4d79e6-d53d-44a0-9b05-ff3299643755"},"Base_imponible_linea"]]]],"source-card":4491}]},"id":4494,"legacy_query":"{\"database\":6,\"type\":\"query\",\"query\":{\"joins\":[{\"fields\":[[\"field\",\"orderitem_id\",{\"base-type\":\"type/Integer\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}],[\"field\",\"valor_linea\",{\"base-type\":\"type/Float\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}]],\"alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\",\"strategy\":\"left-join\",\"ident\":\"ZrzXxoi4zVXcaWNNb3xeX\",\"condition\":[\"and\",[\"=\",[\"field\",\"numeroDocumento\",{\"base-type\":\"type/Text\"}],[\"field\",\"nav_id\",{\"base-type\":\"type/Text\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}]],[\"=\",[\"field\",\"idProducto\",{\"base-type\":\"type/Text\"}],[\"field\",\"Products___product_id__nav_id\",{\"base-type\":\"type/Text\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}]],[\"=\",[\"field\",\"NumeroLineaOrdenada\",{\"base-type\":\"type/Integer\"}],[\"field\",\"NumeroLineaOrdenada\",{\"base-type\":\"type/Integer\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}]]],\"source-table\":\"card__4493\"},{\"ident\":\"WfdDp7SAlhOZuyUZVkwl7\",\"fields\":[[\"field\",16711,{\"base-type\":\"type/Integer\",\"join-alias\":\"Tpv Orders Orderitem - orderitem_id\"}]],\"strategy\":\"left-join\",\"alias\":\"Tpv Orders Orderitem - orderitem_id\",\"condition\":[\"=\",[\"field\",\"orderitem_id\",{\"base-type\":\"type/Integer\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}],[\"field\",16737,{\"base-type\":\"type/Integer\",\"join-alias\":\"Tpv Orders Orderitem - orderitem_id\"}]],\"source-table\":1555}],\"expressions\":{\"Valor_tpv\":[\"coalesce\",[\"field\",\"valor_linea\",{\"base-type\":\"type/Float\",\"join-alias\":\"Movimientos de venta de TPV con numero de linea - n_5fca956c\"}],0],\"diferencia\":[\"abs\",[\"-\",[\"expression\",\"Valor_tpv\",{\"base-type\":\"type/Float\"}],[\"field\",\"Base_imponible_linea\",{\"base-type\":\"type/Decimal\"}]]]},\"order-by\":[[\"desc\",[\"expression\",\"diferencia\",{\"base-type\":\"type/Float\"}]]],\"source-table\":\"card__4491\",\"expression-idents\":{\"Valor_tpv\":\"-OCO3_dv0NYJZbm9cgX0R\",\"diferencia\":\"I_q8nGsnz2Ccu_gOv1niv\"}}}","parameter_mappings":[],"can_manage_db":false,"display":"table","archived_directly":false,"entity_id":"WBue9vs_jLwvY-FLlegZc","collection_preview":true,"last-edit-info":{"id":301,"email":"api-key-user-e55e1da7-c8ea-4268-9faf-84343fd72150@api-key.invalid","first_name":"data_exploration","last_name":"","timestamp":"2026-07-01T14:26:55.137085Z"},"visualization_settings":{"table.pivot_column":"Anjana_Sales_Cr_Memo_Header___NumeroDocumento__corr_3c3ea85c","table.cell_column":"NumeroLineas"},"collection":{"authority_level":null,"description":null,"archived":false,"workspace_id":null,"slug":"ventas","archive_operation_id":null,"name":"VENTAS","is_remote_synced":false,"personal_owner_id":null,"type":null,"is_sample":false,"id":406,"archived_directly":null,"entity_id":"EMsdi8wENXf6riuJelXXz","location":"/400/","namespace":null,"is_personal":false,"created_at":"2025-07-17T22:44:53.718794Z"},"metabase_version":"v0.55.7 (dcea6a4)","parameters":[],"dashboard_id":null,"created_at":"2025-08-14T15:24:53.023407Z","parameter_usage_count":0,"public_uuid":null,"can_delete":false} \ No newline at end of file diff --git a/scratchpad/exf/cards.json b/scratchpad/exf/cards.json new file mode 100644 index 00000000..462bdd70 --- /dev/null +++ b/scratchpad/exf/cards.json @@ -0,0 +1 @@ +{"total": 12367, "canal": 12368, "pago": 12369, "matriz": 12370, "evolutivo": 12371} \ No newline at end of file diff --git a/scratchpad/exf/create.py b/scratchpad/exf/create.py new file mode 100644 index 00000000..9f6f7377 --- /dev/null +++ b/scratchpad/exf/create.py @@ -0,0 +1,42 @@ +import json, sys +sys.path.insert(0, "scratchpad/exf") +from build import api, BASE, CARDS, TAGS, dq + +COLLECTION = 583 # "Claude" (junto a 1094) + +CUR = {"number_style":"currency","currency":"EUR","currency_style":"symbol","decimals":0} + +def viz(kind): + if kind == "total": + return {"column_settings":{'["name","venta_web_eur"]':CUR}, + "scalar.field":"venta_web_eur"} + if kind == "canal": + return {"graph.dimensions":["canal"],"graph.metrics":["venta_eur"], + "graph.x_axis.title_text":"Canal","graph.y_axis.title_text":"Venta web (EUR)", + "column_settings":{'["name","venta_eur"]':CUR},"graph.show_values":True} + if kind == "pago": + return {"graph.dimensions":["forma_pago"],"graph.metrics":["venta_eur"], + "column_settings":{'["name","venta_eur"]':CUR},"graph.show_values":True} + if kind == "matriz": + return {"column_settings":{'["name","venta_eur"]':CUR}, + "table.columns":[ + {"name":"canal","enabled":True},{"name":"forma_pago","enabled":True}, + {"name":"venta_eur","enabled":True},{"name":"documentos","enabled":True}]} + if kind == "evolutivo": + return {"graph.dimensions":["mes","canal"],"graph.metrics":["venta_eur"], + "stackable.stack_type":"stacked","column_settings":{'["name","venta_eur"]':CUR}, + "graph.x_axis.title_text":"Mes","graph.y_axis.title_text":"Venta web (EUR)"} + return {} + +created = {} +for k, c in CARDS.items(): + body = {"name": c["name"], "display": c["display"], + "dataset_query": dq(c["sql"]), + "visualization_settings": viz(k), + "collection_id": COLLECTION} + r = api("POST", "/api/card", body) + created[k] = r["id"] + print(f"card {k}: id {r['id']} {c['name']}") + +json.dump(created, open("scratchpad/exf/cards.json","w")) +print("CARDS:", created) diff --git a/scratchpad/exf/dash.json b/scratchpad/exf/dash.json new file mode 100644 index 00000000..1e78f44d --- /dev/null +++ b/scratchpad/exf/dash.json @@ -0,0 +1 @@ +{"dashboard_id": 1143} \ No newline at end of file diff --git a/scratchpad/exf/dash.py b/scratchpad/exf/dash.py new file mode 100644 index 00000000..45f981d6 --- /dev/null +++ b/scratchpad/exf/dash.py @@ -0,0 +1,54 @@ +import json, sys +sys.path.insert(0, "scratchpad/exf") +from build import api + +C = json.load(open("scratchpad/exf/cards.json")) +COLLECTION = 583 + +# 1) crear dashboard vacio +dash = api("POST", "/api/dashboard", { + "name": "Venta Web por Canal y Forma de Pago (facturacion NAV / modelo 4494)", + "collection_id": COLLECTION, + "description": "Solo venta web (origen precaweb) tomada del modelo 4494 (SUM Base_imponible_linea, facturacion NAV neta), desglosada por canal (channel_id) y forma de pago (pago web vs pago tienda), segun las convenciones del dashboard 1094. Glass excluido. Default: YTD 2026.", +}) +DID = dash["id"] +print("dashboard id:", DID) + +# 2) parametros del dashboard +PARAMS = [ + {"id":"p_desde","name":"Fecha desde","slug":"fecha_desde","type":"date/single","default":"2026-01-01"}, + {"id":"p_hasta","name":"Fecha hasta","slug":"fecha_hasta","type":"date/single"}, + {"id":"p_centro","name":"Centro","slug":"centro","type":"string/=","sectionId":"string"}, + {"id":"p_ensena","name":"Ensena","slug":"ensena","type":"string/=","sectionId":"string"}, +] + +def mappings(cid): + return [ + {"parameter_id":"p_desde","card_id":cid,"target":["variable",["template-tag","fecha_desde"]]}, + {"parameter_id":"p_hasta","card_id":cid,"target":["variable",["template-tag","fecha_hasta"]]}, + {"parameter_id":"p_centro","card_id":cid,"target":["variable",["template-tag","centro"]]}, + {"parameter_id":"p_ensena","card_id":cid,"target":["variable",["template-tag","ensena"]]}, + ] + +# 3) layout (grid 24 col) +LAYOUT = { + "total": (0, 0, 6, 4), + "pago": (0, 6, 18, 4), + "canal": (4, 0, 12, 7), + "matriz": (4, 12, 12, 7), + "evolutivo": (11, 0, 24, 7), +} +dashcards = [] +neg = -1 +for k,(row,col,sx,sy) in LAYOUT.items(): + cid = C[k] + dashcards.append({ + "id": neg, "card_id": cid, "row": row, "col": col, "size_x": sx, "size_y": sy, + "series": [], "parameter_mappings": mappings(cid), "visualization_settings": {} + }) + neg -= 1 + +r = api("PUT", f"/api/dashboard/{DID}", {"dashcards": dashcards, "parameters": PARAMS}) +print("dashcards saved:", len(r.get("dashcards",[]))) +print("URL: https://reports.autingo.es/dashboard/%d" % DID) +json.dump({"dashboard_id":DID}, open("scratchpad/exf/dash.json","w")) diff --git a/scratchpad/va.parquet b/scratchpad/va.parquet new file mode 100644 index 00000000..9cfffb0c Binary files /dev/null and b/scratchpad/va.parquet differ diff --git a/scratchpad/vm.parquet b/scratchpad/vm.parquet new file mode 100644 index 00000000..14925fdb Binary files /dev/null and b/scratchpad/vm.parquet differ