Guía del usuario del cliente web de Spotfire®

Resolución de problemas de expresiones de propiedad

Dado que las propiedades se pueden insertar e interpretar de dos maneras diferentes, puede que ocurra que una expresión aparentemente correcta no funcione como se espera.

Nota: Algunas de las funciones descritas aquí solo se pueden crear, o solo se puede acceder a ellas, mediante el cliente Spotfire instalado. Puede escribir todas las expresiones mencionadas en el cliente web, pero el cliente instalado tiene algunos accesos directos e interfaces que no están disponibles en el navegador.

Es posible que se reciban los siguientes mensajes cuando se inserten propiedades en el campo Expresión de los cuadros de diálogo Expresión personalizada o Agregar columna calculada.

Además, puede que también se produzcan algunos problemas si agrega una propiedad a un eje con la opción Establecer a partir de propiedad y la expresión no coincide con el eje. En tal caso, deberá hacer clic con el botón secundario e ir al cuadro de diálogo Expresión personalizada para cambiar la expresión manualmente. Intente identificar su problema con ayuda de la siguiente tabla.

Texto de error para el campo de la expresión Ejemplo de expresión Posibles errores Solución
La expresión no está completa.

o

La expresión está vacía.

o

La expresión no se puede evaluar.

${MyProperty} Cuando se inserta una propiedad en una expresión al hacer doble clic en ella o al hacer clic en el botón Insertar propiedades en el cliente instalado, esta se incluye como texto.

Con esta sintaxis, Spotfire intentará interpretar un valor de propiedad de una cadena como un nombre de columna o una parte de una expresión, en lugar de como un valor.

Si desea utilizar el valor de la propiedad de cadena, coloque la expresión entre comillas:

"${MyProperty}"

También puede hacer clic con el botón secundario en la propiedad en la lista Propiedades disponibles para la columna (en el cliente instalado) y seleccionar Insertar como valor en el menú emergente, alternativamente:

DocumentProperty("MyProperty")

Si la propiedad debe incluir un nombre de columna, pero este contiene caracteres de espacio, tendrá que agregar los caracteres "[" y "]" alrededor de la expresión de la propiedad. También puede usar la función $esc() que aplica una acción de escape a cualquier carácter "]" y convierte la cadena de propiedad en una columna:

$esc(${MyProperty})

Si la propiedad se agrega mediante Set from Property, obtendrá automáticamente la versión con escape de la expresión.

La expresión no está completa. Concatenate("My first string", ${EmptyProperty}) Si una propiedad de cadena insertada como texto está vacía, no podrá interpretarse como una columna y Spotfire no detectará el segundo argumento del ejemplo. Si desea utilizar el valor de la propiedad de cadena, escriba comillas que enmarquen la expresión:

Concatenate("My first string", "${EmptyProperty}")

También puede hacer clic con el botón secundario en la propiedad en Propiedades disponibles para la lista de columnas (en el cliente instalado) y seleccionar Insertar como valor en el menú emergente, alternativamente:

Concatenate("My first string", DocumentProperty("EmptyProperty"))

Si desea utilizar el contenido de una columna en la concatenación, deberá agregar los caracteres "[" y "]" alrededor de la propiedad a fin de garantizar que esta se interpreta como una columna (también puede utilizar $esc(), tal y como se mencionó anteriormente).

Concatenate("My first string", [${EmptyProperty}])

Tipo de llamada a función no válido: "DocumentProperty". DocumentProperty(MyProperty) El nombre de la propiedad debe escribirse entre comillas siempre que se apliquen las funciones de propiedad.

Las comillas se agregan automáticamente si utiliza el método abreviado Insertar como valor en el menú emergente (en el cliente instalado).

Escriba comillas alrededor del nombre de la propiedad:

DocumentProperty("MyProperty")

Se esperaba la expresión "Fin de la expresión", pero se ha encontrado "," en la línea 1, carácter 12

o

La expresión no es válida

$map("sum([${MyListProperty}])", ",") Si utiliza propiedades de valores de lista en un eje, necesitará asignarlas a una cadena única.

La expresión debe incluir una plantilla que se utilizará para cada valor de la lista (por ejemplo, una medida de agregación), así como una especificación acerca de la forma en la que deben conectarse los valores de lista en la expresión resultante.

La expresión predeterminada que se obtiene cuando se inserta la propiedad por primera vez es apta para ejes continuos para los que se desea obtener una lista sencilla de las columnas incluidas en la propiedad de valores de lista. En todos los demás casos, deberá modificarse a mano.

Debe modificar la expresión predeterminada en función de lo que desee mostrar.

Si lo que desea es obtener una lista sencilla de nombres de columnas (por ejemplo, que aparezcan varias columnas en un eje de valores de un gráfico de barras), valdría la expresión del ejemplo. Por otro lado, si quiere usar una medida de agregación que no sea "sum", tan solo tiene que sustituir "sum" en la expresión.

Si la lista de columnas se va a mostrar en un eje de categorías, debe modificar la expresión predeterminada a algo de tipo:

<$map("[${MyListProperty}]", "NEST")>

Las expresiones de categorías deben estar entre corchetes angulares, "<>", y también debe especificar cómo se deben gestionar las diferentes combinaciones de categorías.

Además, la selección actual de columnas en la propiedad de valores de lista puede ser una mezcla de columnas continuas y por categorías. Asegúrese de que únicamente se incluyen columnas del mismo tipo en la lista.

Asimismo, existen más casos en los que la expresión debe modificarse. Consulte la sección Propiedades de los valores de lista (selección múltiple) en Propiedades en expresiones para obtener más información.

Se esperaba ":" pero se ha encontrado "3" en la línea 1, carácter 5. ${TimeSpanProperty} Si intenta utilizar las propiedades Intervalo de tiempo, Fecha, Hora o Fecha y hora en una expresión, el idioma de esta no podrá interpretar aquellas correctamente a menos que se editen manualmente algunos elementos.

En primer lugar, deben agregarse comillas que enmarquen el nombre de la propiedad. Esto hará que la propiedad se interprete como una cadena y podrá evitar el mensaje de error. En segundo lugar, deberá utilizar una de las funciones de conversión para poder interpretar el valor como de intervalo de tiempo, fecha, hora o fecha y hora (TimeSpan, Date, Time, DateTime).

Agregue comillas alrededor del nombre de la propiedad y utilice la función de conversión correspondiente:

TimeSpan("${TimeSpanProperty}")

También puede hacer clic con el botón secundario en la propiedad en Propiedades disponibles para la lista de columnas (en el cliente instalado) y seleccionar Insertar como valor en el menú emergente, alternativamente:

TimeSpan(DocumentProperty("TimeSpanProperty"))

{Tabla no definida en ${{Table} ${{Table}}.{MyProperty} Si el nombre contiene llaves (}), deberá escapar mediante una barra invertida (\). Para acceder a la propiedad MyProperty de una tabla de datos denominada "{Table}" deberá escribir

${{Table\}}.{MyProperty}

Más información acerca de $esc y $csearch

$esc(expression)

La función $esc() se utiliza como escape de "]", lo que normalmente indica el final de los nombres de una columna, y agrega "[" y "]" al nombre de la columna. Son necesarios los corchetes en los nombres de columna que contengan caracteres de espacio para que se puedan interpretar como columnas. $esc() se puede utilizar junto con la función $csearch(). El argumento es una expresión que podría ser un valor o una función de propiedad que empiecen con el signo de dólar ($).

Por ejemplo, supongamos que la tabla de datos "A Data Table" contiene tres columnas denominadas "Column 1", "Column 2[example]" y "Sales". La expresión $esc($csearch([A Data Table], "Col*")) devuelve una lista con dos elementos: las cadenas "[Column 1]" y "[Column 2[example]]]".

$csearch([Data Table], "search string")

La función $csearch() se utiliza para producir una lista "filtrada" de nombres de columna. Le permite seleccionar un número de columnas de una tabla de datos mediante una expresión de búsqueda con limitación. Es posible que esta función se utilice junto con la función $map(). El primer argumento es una tabla de datos, y el segundo, una cadena que contiene la expresión de búsqueda que se utiliza para determinar qué nombres de columna se deben devolver. La función devuelve una lista de nombres de columna (sin escape) provenientes de la tabla de datos que coinciden con la expresión de búsqueda.

Por ejemplo, supongamos que la tabla de datos "A Data Table" contiene tres columnas denominadas "Column 1", "Column 2" y "Sales". La expresión $csearch($csearch([A Data Table], "Col*")) devuelve una lista con dos elementos: las cadenas "Column 1" y "Column 2". Si la propiedad MyTable contiene la cadena [A Data Table] y la propiedad MyA incluye la cadena "Col*", $csearch(${MyTable}, "${MyA}") devolverá el mismo resultado.

$csearch junto con $map() y $esc() puede producir listas de columnas o cálculos basados en las columnas de las propiedades de valores de lista. Por ejemplo, $map("sum($esc($csearch(${MyTable}, "*")))", "+") se expande como sum([Column 1])+sum([Column 2])+sum([Sales]), ya que la expresión de búsqueda * devolverá todas las columnas de la tabla. La función $esc() resulta necesaria si desea que las cadenas de la lista se interpreten como columnas y que los nombres de columnas incluyan caracteres de espacio.

Nota: $csearch() está diseñada principalmente para su uso en expresiones de ejes de visualización o en expresiones de argumentos de funciones de datos. Si bien $csearch() examina todas las columnas de una tabla de datos, incluidas todas las columnas calculadas (si las hay), su empleo resulta menos apropiado en columnas calculadas. Si se utiliza en una columna calculada, cabe la posibilidad de que se produzcan dependencias cíclicas.

Nombres de tablas o columnas de datos en expresiones de preprocesador

Dado que el preprocesador solo realiza el reemplazo de texto sin ningún contexto o conocimiento de lo que es un nombre de columna y lo que es un número, no hay forma de rastrear cuándo ha cambiado un nombre de columna. Esto significa que las expresiones del preprocesador deben actualizarse manualmente si cambian dichos nombres.

  • Si es posible para su finalidad, use sintaxis que no sea de preprocesador en lugar de sintaxis de preprocesador. Por ejemplo, puede utilizar Integer(DocumentProperty("name")) en lugar de ${name} para convertir el valor en un número entero, si la propiedad aún no es un número entero.
  • Si resulta imposible, ¿quizás pueda usar una columna intermedia que no cambie de nombre? Por ejemplo, suponga que tiene una columna original llamada A. Puede agregar una columna calculada, B, con la expresión [A]. Posteriormente, puede combinar B con una sintaxis de preprocesador para calcular C. Cuando se reemplacen los datos y se cambie el nombre de A a A2, la columna B se actualizará correctamente (porque no tiene ninguna sintaxis de preprocesador), y C se recalculará correctamente porque solo depende de B, cuyo nombre no ha cambiado.