Table of Contents

Modo interactivo

Important

La CLI de Tabular Editor se encuentra en vista previa pública limitada. Se ofrece para su evaluación con una cuenta de Tabular Editor; no se requiere ninguna licencia durante la vista previa. Los comandos, las opciones y las salidas pueden cambiar antes de la disponibilidad general. La versión preliminar dejará de funcionar después del 2026-10-31. No recomendamos usar la CLI en pipelines de CI/CD de producción mientras esté en vista previa.

El modo interactivo es un bucle guiado de lectura, evaluación e impresión (REPL) para explorar un modelo desde la terminal. Es la forma más sencilla de iniciarte si eres nuevo en la línea de comandos y un Workspace práctico para sesiones ad hoc con un único modelo.

Iniciar una sesión

Para iniciar una sesión, ejecuta cualquiera de estos comandos:

te interactive                              # Start and connect to a model later
te interactive --model ./model              # Start with a local model
te interactive -s MyWorkspace -d MyModel    # Start with a remote model

te interactive acepta algunas opciones para ajustar la sesión:

  • --no-banner - omite el banner de bienvenida al iniciar.
  • --echo - escribe en stdout cada comando ejecutado antes de su salida. Útil para llevar un registro cuando se controla la REPL desde un script.
  • --batch - modo por lotes no interactivo: lee comandos de stdin línea por línea, ejecuta cada uno y sale al llegar a EOF. Se habilita automáticamente cuando stdin está redirigido.
  • --no-batch - fuerza el modo TTY interactivo incluso cuando stdin está redirigido (mutuamente excluyente con --batch).

La sesión imprime un banner de bienvenida, muestra el modelo activo y te sitúa en un prompt con contexto del modelo:

Sesión del modo interactivo de Tabular Editor CLI

Si no hay ningún modelo establecido, el prompt es simplemente te>; usa connect para abrir el selector de conexiones, connect <path> o connect <Workspace> <model> para conectarte a uno.

Comandos dentro de la sesión

Una vez iniciado un REPL, todos los subcomandos de te están disponibles sin el prefijo te:

ls tables
get Sales/Revenue -p expression
query -q "EVALUATE TOPN(5, 'Sales')"
bpa run --fail-on error

Cada comando acepta --help igual que fuera de la sesión:

deploy --help

Comillas y rutas de estilo DAX

El separador de línea del REPL reconoce las mismas formas de comillas que las rutas de objeto, de modo que las referencias con forma de DAX se interpretan como un único argumento:

  • '...' y "...": segmentos entre comillas simples y dobles. Se eliminan los caracteres de comilla y las comillas duplicadas permiten incluir una comilla literal.
  • [...]: segmento entre corchetes. Los corchetes se conservan en el argumento resultante, de modo que una ruta como 'Internet Sales'[Sales Amount] llega al comando como un único token que el analizador de rutas puede volver a interpretar como una referencia DAX. Los corchetes de cierre duplicados (]]) se mantienen literalmente por la misma razón.
get 'Internet Sales'[Sales Amount]   # One argument, DAX form
get [Total Sales]                    # Lone-bracket model-wide lookup
ls 'Net Sales'/'Sales Amount'        # Quoted segments with a slash separator

Los grupos sin cerrar abarcan hasta el final de la línea, por lo que una comilla o un corchete de apertura sueltos provocan un error explícito en lugar de dividir la entrada sin avisar.

Comandos integrados del REPL

Estos comandos los gestiona el propio REPL, no el árbol de comandos habitual:

Comando Propósito
help o ? Lista los comandos disponibles.
status o pwd Muestra el modelo o la conexión en uso.
save Aplica al origen del modelo todas las ediciones preparadas en memoria.
revert Descarta todos los cambios preparados realizados desde el último guardado.
clear o cls Limpia la pantalla.
exit, quit o q Sale del modo interactivo. Si hay cambios preparados sin guardar, se te pedirá confirmación (n es el valor predeterminado); exit --force los descarta sin preguntar.

save dentro de la sesión no acepta argumentos: para volver a serializar el modelo en otro formato o ubicación se usa save-as (por ejemplo, save-as -o ./out --serialization bim), exactamente igual que fuera de la sesión.

Cambios preparados

Dentro de la sesión, los comandos que modifican el modelo (set, add, remove, move, script, macro run, ...) preparan sus cambios en memoria en lugar de escribirlos en el origen, y el prompt muestra un indicador mientras existan cambios preparados sin guardar. El comando integrado save confirma todo lo preparado; revert descarta todo lo preparado.

Cada comando que modifica el modelo también puede decidir por sí mismo: --save guarda de inmediato el cambio de ese comando, --stage lo mantiene en memoria (la opción predeterminada) y --revert revierte el cambio del comando después de mostrar su efecto; útil para una prueba de "¿qué haría esto?". Los tres son mutuamente excluyentes, y --stage/--revert solo existen dentro de la sesión.

El comportamiento predeterminado por comando lo define la clave de configuración interactiveEditMode (stage | save | revert); consulta Configuración personalizada.

Los cambios preparados nunca se descartan en silencio. Al cerrar una sesión que todavía los contiene —con exit, Ctrl+D o al llegar al final de la entrada por tubería—, primero se comprueba si hay cambios sin guardar. Si existen cambios sin guardar y hay un terminal activo, se te pedirá confirmación, con "no" como valor predeterminado; si respondes que no, volverás al prompt con las ediciones intactas. Cuando nadie puede responder (stdin por tubería o redirigida, o con --non-interactive), la sesión muestra una advertencia indicando qué cambios no se han guardado y sale con un código de error en lugar de uno de éxito. Al salir, en ningún caso se guarda nada: ejecuta save primero, o usa exit --force para descartar los cambios deliberadamente.

Edición de línea y teclas

El prompt ofrece edición de una sola línea:

  • Izquierda/Derecha mueven el cursor; Inicio/Fin (también Ctrl+A/Ctrl+E) saltan a los extremos; Retroceso/Supr editan en el mismo lugar.
  • Arriba/Abajo recorren el historial de comandos, que se conserva entre sesiones.
  • Ctrl+C cancela el comando actual sin salir de la sesión y descarta definitivamente la línea a medio escribir: nunca se ejecuta, Arriba no la recupera y no se añade al historial.
  • Ctrl+D en un prompt vacío cierra la sesión (Ctrl+Z y luego Enter en Windows).

Dentro de la sesión no hay autocompletado con la tecla Tab; el autocompletado de la shell mediante te completion solo se aplica a la shell externa.

Indicaciones guiadas

Cuando el modo interactivo está activo, los comandos que necesitan información faltante la solicitan en lugar de fallar. Al ejecutar auth sin subcomando, se abre un selector para Inicio de sesión / Estado / Cierre de sesión; al ejecutar deploy --execute o refresh --execute sin --force, se muestra un resumen y se pide confirmación (n es la opción predeterminada más segura). Un deploy o refresh sin --execute es una simulación que imprime el TMSL que enviaría, así que nunca solicita confirmación.

Para desactivar las indicaciones en un único comando dentro de la sesión, pasa --non-interactive.

Entrada canalizada y redirigida

El modo interactivo también acepta stdin canalizado o redirigido, de modo que puedes controlar la misma REPL desde un script en lugar de introducir los comandos a mano. Cada línea de entrada se ejecuta como un comando, exactamente igual que si la hubieras introducido en el prompt, y la sesión termina cuando se agota la entrada (o cuando llega a una línea exit). Si en ese momento todavía hay cambios en fase de preparación sin guardar, la sesión avisa y termina con un código de salida distinto de cero; finaliza un script con cambios con save (o usa exit --force para descartarlos a propósito).

printf "ls\nexit\n" | te interactive --model ./model    # bash / git-bash
te interactive --model ./model < script.te              # redirected file
(echo ls & echo exit) | te interactive --model .\model  :: Windows cmd.exe

La convención de stdin con - (set -p Expression=-, query -q -, etc.) se rechaza dentro de la sesión interactiva, porque la propia sesión es la dueña de stdin; úsala desde la shell externa.

Las líneas que empiezan por # se tratan como comentarios y se omiten, así que puedes anotar un archivo de script:

# script.te - inspect the model, then exit
ls tables
ls measures
exit

Modo por lotes y códigos de salida

Cuando stdin está canalizado, --batch es el valor predeterminado: la sesión se detiene en el primer comando que falla y sale con un código distinto de cero, lo que hace que una ejecución canalizada sea segura para usarla como paso de compilación o de CI. Usa --no-batch para seguir ejecutando las líneas restantes incluso después de que falle un comando. El código de salida del proceso es 0 si la ejecución finaliza correctamente y distinto de cero cuando falla un comando en modo por lotes.

# Default when piped: stop at the first failing command, exit non-zero
printf "bpa run --fail-on error\ndeploy --execute --force\nexit\n" | te interactive --model ./model

# Run every line regardless of failures
printf "bpa run --fail-on error\ndeploy --execute --force\nexit\n" | te interactive --model ./model --no-batch

Transcripciones legibles

--echo escribe cada línea de entrada en stdout antes de su salida, lo que resulta práctico al capturar una transcripción de una ejecución canalizada. Las líneas de comentario no se muestran.

printf "ls tables\nexit\n" | te interactive --model ./model --echo

Opciones

Opción Descripción
--no-banner Suprime el banner de bienvenida.
--echo Escribe cada línea de entrada en stdout (útil para transcripciones de ejecuciones canalizadas).
--batch Sale con un código distinto de cero en el primer comando que falla (predeterminado cuando stdin está canalizado).
--no-batch Continúa tras los errores incluso cuando stdin se canaliza por una tubería.

Pueden aparecer dos mensajes distintos al iniciar una sesión; no los confundas:

  • El banner de bienvenida es la pantalla inicial interactiva descrita en Iniciar una sesión. Se suprime con --no-banner. Cuando stdin se canaliza por una tubería, el banner de bienvenida ni siquiera se muestra, así que --no-banner solo tiene un efecto visible en una sesión interactiva (TTY) real.
  • El aviso de caducidad de la versión preliminar (This is an early preview release ...) es otro de los mensajes. Siempre se escribe en stderr y no se ve afectado por --no-banner. Suprímelo con te config set hidePreviewNotice true.

Inicio automático al invocar sin argumentos

Ejecutar te en una terminal sin argumentos te lleva directamente al REPL interactivo, así que explorar un modelo es tan rápido como abrir una terminal y escribir te. Cuando stdin, stdout o stderr se redirigen (salida por tubería, pipelines de CI, scripts), la CLI continúa con el análisis habitual y muestra la ayuda en su lugar, así que los scripts de shell que invocan te sin un subcomando siguen comportándose de la misma manera.

Este comportamiento se controla con la clave de configuración launchInteractiveMode, que admite tres valores:

Valor Efecto
auto (predeterminado) Inicia el REPL solo cuando los tres flujos están adjuntos a un TTY. De lo contrario, pasa al análisis normal.
always Inicia el REPL aunque haya redirección de flujos. Útil si siempre quieres una sesión interactiva.
never No inicia nunca el REPL automáticamente. te por sí solo muestra la ayuda.

Cámbialo globalmente con:

te config set launchInteractiveMode never    # keep the classic help-on-empty behavior
te config set launchInteractiveMode auto     # restore the default

Puedes anularlo para una única ejecución mediante la variable de entorno TE_INTERACTIVE (con los mismos valores) o pasar --non-interactive en la línea de comandos; ambas opciones fuerzan never en esa ejecución, por lo que te --non-interactive muestra la ayuda en lugar de iniciar el REPL.

Cuándo usar el modo interactivo frente al no interactivo

  • El modo interactivo es ideal para explorar, aprender la CLI, hacer ediciones masivas puntuales sobre un único modelo y realizar demos.
  • El modo no interactivo (el predeterminado fuera de te interactive) es el indicado para escribir scripts, automatizar o ejecutar en CI. Consulta Automatización y scripts y Integración de CI/CD.

Ambos comparten el mismo árbol de comandos: cualquier comando que ejecutes dentro de te interactive puedes pegarlo en un script de shell anteponiendo te.

Páginas relacionadas