20f72edb5a
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params | output | tested | tests | test_file_path | file_path | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| metabase_smartscalar_anothercolumn_viz | function | py | infra | 1.0.0 | pure | 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 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. |
|
|
false |
|
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. | false | 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
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_columnycompare_column). Si necesitas formatos distintos, construyecolumn_settingsmanualmente conmetabase_viz_column_formaty monta el dict a mano. - Cuando
number_style="currency"se agrega automaticamentecurrency_in_header=Falseen ambas columnas. - El
comparison_idsolo necesita ser unico dentro del arrayscalar.comparisonsde esa card — no es un ID global. - Para el patron de 2 filas temporales (
previousValue) usarmetabase_smartscalar_kpi_payloaden su lugar.