---
name: metabase_smartscalar_anothercolumn_viz
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: pure
signature: "def metabase_smartscalar_anothercolumn_viz(*, main_column: str, compare_column: str, label: str = 'vs N-1', number_style: str = 'percent', decimals: int = 2, currency: str = 'EUR', comparison_id: str = 'cmp_n1') -> dict"
description: "Construye el dict completo de visualization_settings para una card display=smartscalar con comparacion tipo anotherColumn (misma fila, columna diferente). Incluye scalar.field, scalar.comparisons y column_settings para ambas columnas con el mismo formato. Internamente reutiliza metabase_viz_column_format."
tags: [metabase, visualization, smartscalar, anothercolumn, scalar, comparison, pure, builder, pendiente-usar]
uses_functions:
  - metabase_viz_column_format_py_infra
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: main_column
    desc: "Nombre de la columna mostrada como valor principal en el smartscalar. Debe coincidir exactamente con el nombre de columna en el resultado del query"
  - name: compare_column
    desc: "Nombre de la columna usada como valor de comparacion en la misma fila del query"
  - name: label
    desc: "Etiqueta mostrada bajo el delta de comparacion. Default 'vs N-1'"
  - name: number_style
    desc: "Estilo de formato para ambas columnas: 'percent', 'currency', 'decimal', '' (default Metabase). Default 'percent'"
  - name: decimals
    desc: "Numero de decimales para ambas columnas. Default 2"
  - name: currency
    desc: "Codigo ISO de moneda ('EUR', 'USD', ...). Solo relevante cuando number_style='currency'. Default 'EUR'"
  - name: comparison_id
    desc: "Identificador interno de la comparacion dentro del array scalar.comparisons. Default 'cmp_n1'"
output: "Dict con visualization_settings completo: {'scalar.field': str, 'scalar.comparisons': [{'id', 'type': 'anotherColumn', 'column', 'label'}], 'column_settings': {key_main: fmt, key_compare: fmt}}. Listo para usar como visualization_settings en el payload de la card."
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/metabase/metabase_smartscalar_anothercolumn_viz.py"
---

## Por que existe

El patron ``anotherColumn`` de Metabase smartscalar muestra un delta entre
dos columnas de la misma fila (en lugar del patron ``previousValue`` que
usa dos filas temporales). Util cuando el query ya calcula el valor actual
y el valor comparativo directamente (tipico en queries con CTEs que calculan
n-1 en una sola pasada).

La combinacion ``scalar.field`` + ``scalar.comparisons[anotherColumn]`` +
``column_settings`` para ambas columnas con formato identico requiere varios
campos que Metabase silenciosamente ignora si faltan o estan mal formateados.

## Ejemplo

```python
from metabase import metabase_smartscalar_anothercolumn_viz, metabase_create_card_raw

# Smartscalar de margen (porcentaje) vs columna n-1
viz = metabase_smartscalar_anothercolumn_viz(
    main_column="Margen",
    compare_column="MargenN1",
    label="vs N-1",
    number_style="percent",
    decimals=2,
)

# Smartscalar de venta (moneda) vs columna n-1
viz = metabase_smartscalar_anothercolumn_viz(
    main_column="Venta",
    compare_column="VentaN1",
    label="vs ano anterior",
    number_style="currency",
    decimals=0,
    currency="EUR",
)

# Integrar en un payload completo de card
payload = {
    "name": "Margen actual",
    "type": "question",
    "display": "smartscalar",
    "dataset_query": { ... },
    "visualization_settings": viz,
}
card = metabase_create_card_raw(client, payload)
```

## Notas

- Aplica el mismo formato (``number_style``, ``decimals``, ``currency``) a
  ambas columnas (``main_column`` y ``compare_column``). Si necesitas formatos
  distintos, construye ``column_settings`` manualmente con
  ``metabase_viz_column_format`` y monta el dict a mano.
- Cuando ``number_style="currency"`` se agrega automaticamente
  ``currency_in_header=False`` en ambas columnas.
- El ``comparison_id`` solo necesita ser unico dentro del array
  ``scalar.comparisons`` de esa card — no es un ID global.
- Para el patron de 2 filas temporales (``previousValue``) usar
  ``metabase_smartscalar_kpi_payload`` en su lugar.
