--- 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.