feat(metabase): auto-commit con 17 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
"""Construye visualization_settings para smartscalar con comparacion anotherColumn."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from .metabase_viz_column_format import metabase_viz_column_format
|
||||
|
||||
|
||||
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:
|
||||
"""Construye visualization_settings para smartscalar con comparacion anotherColumn.
|
||||
|
||||
Genera el dict completo de ``visualization_settings`` para una card con
|
||||
``display=smartscalar`` que muestra ``main_column`` con una comparacion
|
||||
de tipo ``anotherColumn`` apuntando a ``compare_column`` (ambas columnas
|
||||
en la misma fila del query).
|
||||
|
||||
Este patron es util cuando el query devuelve directamente el valor actual
|
||||
y el valor de comparacion como columnas separadas (en lugar del patron de
|
||||
2 filas temporales de ``previousValue``).
|
||||
|
||||
Args:
|
||||
main_column: Nombre de la columna que se muestra como valor principal
|
||||
en el smartscalar. Debe coincidir exactamente con el nombre de
|
||||
columna en el resultado del query.
|
||||
compare_column: Nombre de la columna que se usa como valor de
|
||||
comparacion. Debe estar en el mismo resultado del query que
|
||||
``main_column``.
|
||||
label: Etiqueta mostrada bajo el delta de comparacion. Default
|
||||
``"vs N-1"``.
|
||||
number_style: Estilo de formato para ambas columnas. Valores:
|
||||
``"percent"``, ``"currency"``, ``"decimal"``, ``""`` (default
|
||||
Metabase). Default ``"percent"``.
|
||||
decimals: Numero de decimales para ambas columnas. Default ``2``.
|
||||
currency: Codigo ISO de moneda (``"EUR"``, ``"USD"``, ...). Solo
|
||||
relevante cuando ``number_style="currency"``. Default ``"EUR"``.
|
||||
comparison_id: Identificador interno de la comparacion dentro del
|
||||
array ``scalar.comparisons``. Debe ser unico por card. Default
|
||||
``"cmp_n1"``.
|
||||
|
||||
Returns:
|
||||
Dict con la estructura completa de ``visualization_settings``::
|
||||
|
||||
{
|
||||
"scalar.field": "<main_column>",
|
||||
"scalar.comparisons": [
|
||||
{"id": "<comparison_id>", "type": "anotherColumn",
|
||||
"column": "<compare_column>", "label": "<label>"},
|
||||
],
|
||||
"column_settings": {
|
||||
'["name","<main_column>"]': {...formato...},
|
||||
'["name","<compare_column>"]': {...mismo formato...},
|
||||
},
|
||||
}
|
||||
|
||||
Example:
|
||||
>>> viz = metabase_smartscalar_anothercolumn_viz(
|
||||
... main_column="Margen",
|
||||
... compare_column="MargenN1",
|
||||
... label="vs N-1",
|
||||
... number_style="percent",
|
||||
... decimals=2,
|
||||
... )
|
||||
>>> assert viz["scalar.field"] == "Margen"
|
||||
>>> assert viz["scalar.comparisons"][0]["type"] == "anotherColumn"
|
||||
>>> assert viz["scalar.comparisons"][0]["column"] == "MargenN1"
|
||||
>>> assert '["name","Margen"]' in viz["column_settings"]
|
||||
>>> assert '["name","MargenN1"]' in viz["column_settings"]
|
||||
|
||||
>>> # Con formato moneda
|
||||
>>> viz = metabase_smartscalar_anothercolumn_viz(
|
||||
... main_column="Venta",
|
||||
... compare_column="VentaN1",
|
||||
... label="vs ano anterior",
|
||||
... number_style="currency",
|
||||
... decimals=0,
|
||||
... currency="EUR",
|
||||
... )
|
||||
"""
|
||||
# Argumentos de formato comunes a ambas columnas
|
||||
fmt_kwargs: dict = {
|
||||
"number_style": number_style,
|
||||
"decimals": decimals,
|
||||
}
|
||||
if number_style == "currency" and currency:
|
||||
fmt_kwargs["currency"] = currency
|
||||
fmt_kwargs["currency_in_header"] = False
|
||||
|
||||
column_settings: dict = {}
|
||||
column_settings.update(metabase_viz_column_format(main_column, **fmt_kwargs))
|
||||
column_settings.update(metabase_viz_column_format(compare_column, **fmt_kwargs))
|
||||
|
||||
return {
|
||||
"scalar.field": main_column,
|
||||
"scalar.comparisons": [
|
||||
{
|
||||
"id": comparison_id,
|
||||
"type": "anotherColumn",
|
||||
"column": compare_column,
|
||||
"label": label,
|
||||
}
|
||||
],
|
||||
"column_settings": column_settings,
|
||||
}
|
||||
Reference in New Issue
Block a user