Cuándo usar text
Una nota text es la capa explicativa de un dashboard — títulos de sección, narrativa, instrucciones, advertencias, leyendas: las palabras que hacen que una pared de gráficos tenga sentido. La nota común es prosa pura sin query. Opcionalmente, cuando ayuda a una oración, una nota puede tejer un valor en vivo desde una query dentro del texto — pero eso es una función secundaria, no el objetivo.
No es un kpi: un kpi es una tarjeta de métrica con ranuras fijas de titular/delta y chrome de tarjeta; una nota text es prosa libre. Si la respuesta es un solo número, usá kpi; si necesitás un número por categoría, usá bar; para una tabla, usá grid. Usá text cuando el contenido es lenguaje.
Estática vs dinámica
Una nota estática tiene solo un body — prosa Markdown, sin query, sin lectura de datos. Una nota dinámica agrega una query de una sola fila y un mapping, e interpola valores en la prosa.
format— formato del body. v1 traemarkdown(el único valor;plain/htmlestán reservados).body— requerido. El fuente Markdown. Subset soportado: títulos, párrafos, listas ordenadas / sin orden, negrita, itálica,codeen línea, bloques de código, y[enlaces](url).
Tokens y mapping
Una nota dinámica interpola valores escalares desde la única fila de resultado de su query. Cada token en el body se enlaza a una columna a través de mapping:
- Sintaxis del token:
{{ field }}, o con un formato numérico{{ field | "$#,##0" }}. mapping— un objeto de nombre de token → columna del resultado. El nombre de cada token debe ser una clave demapping, y cada clave demappingdebe usarse en un token; de lo contrario la nota se rechaza en validación.- Los tokens son solo escalares. Las llaves que no coinciden con la gramática del token se tratan como texto literal.
mapping:
total_revenue: revenue_total # token "total_revenue" -> columna "revenue_total"
growth_pct: mom_growth
body: |
La facturación de este mes es **{{ total_revenue | "$#,##0" }}**, un
**{{ growth_pct | "+0.0%" }}** más que el anterior.
Los patrones de formato numérico usan la misma gramática que cualquier otra viz — ver el resumen de viz-types.
query es opcional
text es el único tipo de visualization donde query es opcional. Una nota sin query es una nota estática: renderiza su prosa de inmediato, sin ejecución. Agregá una query de una sola fila solo cuando la nota interpola un valor. Todos los demás tipos de viz requieren query.
Seguridad
La nota es segura por construcción:
- Los valores interpolados se escapan como HTML — un valor que contiene markup se renderiza como texto literal, nunca como elementos.
- El Markdown renderizado se sanitiza — solo sobrevive el subset soportado; los scripts y etiquetas desconocidas se eliminan.
- Los href de enlaces se limitan a
http,httpsy URLs relativas; cualquier otro esquema (p. ej.javascript:,data:) se renderiza como texto inerte.
Comportamiento de cross-filter
Una nota text participa solo como consumidor, igual que kpi:
- No emite. Una nota no tiene dimensión que clicar — no agrega pills.
- Sí reacciona. La query de una nota dinámica se re-ejecuta con los filtros y pills activos del dashboard, y sus valores interpolados se recalculan. Una nota estática no tiene nada que re-ejecutar.
Ejemplos
Una nota estática — prosa pura, sin query (el caso común):
id: ops_intro
title: Resumen de operaciones
type: text
format: markdown
body: |
## Resumen de operaciones
Estos paneles siguen la salud de fulfilment. Las celdas en **ámbar**
marcan SLAs en riesgo. Las cifras excluyen pedidos cancelados.
published: true
Una nota dinámica — un valor en vivo tejido en una oración:
id: revenue_note
title: Resumen de facturación
type: text
format: markdown
query: "models/sales.malloy::headline" # una fila, muchas columnas
mapping:
total_revenue: revenue_total
growth_pct: mom_growth
body: |
## Resumen de facturación
El total de este mes es **{{ total_revenue | "$#,##0" }}**, un
**{{ growth_pct | "+0.0%" }}** más que el mes anterior.
published: true
Errores comunes
- Un token se renderiza como placeholder. La columna mapeada falta o es null en la fila de resultado, o la query falló — el resto de la prosa igual se renderiza. Revisá el nombre de la columna en
mapping. - La validación rechaza la nota. Un token cuyo nombre no está en
mapping, o una clave demappingque ningún token usa, se rechaza. Mantené tokens y mapping sincronizados. - mapping sin query. Los tokens necesitan una fuente — un
mappingsinqueryes inválido. - Esperar una tabla. Los tokens son escalares; solo se leen las columnas nombradas de la primera fila. Una query de muchas filas no se renderiza como lista.
- Un enlace no hace nada. Solo los href http / https / relativos se vuelven enlaces; otros esquemas se renderizan como texto plano por diseño.