Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
ShirSandoval
Creator
Creator

ERROR EXPRESION

Buen dia comunidad,

Tengo error en la siguiente expresión. Ya he intentado de todo.

If(
RangeMax(

If([Capital con Mora 1-30 Días]>1, [Capital a Vencer]+[Capital con Mora 1-30 Días],0),

If([Capital con Mora 31-60 Días]>1, [Capital a Vencer]+
Sum([Capital con Mora 1-30 Días])+
Sum([Capital con Mora 31-60 Días]),0),

If([Capital con Mora 61-90 Días]>1, [Capital a Vencer]+
Sum([Capital con Mora 1-30 Días])+
Sum([Capital con Mora 31-60 Días])+
Sum([Capital con Mora 61-90 Días]),0)=

If([Capital con Mora 1-30 Días]>=1, [Capital a Vencer]+[Capital con Mora 1-30 Días],0);

RangeMax(

If([Capital con Mora 1-30 Días]>1, [Capital a Vencer]+[Capital con Mora 1-30 Días],0),

If([Capital con Mora 31-60 Días]>1, [Capital a Vencer]+
Sum([Capital con Mora 1-30 Días])+
Sum([Capital con Mora 31-60 Días]),0),

If([Capital con Mora 61-90 Días]>1, [Capital a Vencer]+
Sum([Capital con Mora 1-30 Días])+
Sum([Capital con Mora 31-60 Días])+
Sum([Capital con Mora 61-90 Días]),0),0)))

Lo esperado es: =SI($CB16=BU16;$CB16;0)

 

ShirSandoval_0-1603378859601.png

 

 

 

Labels (3)
2 Solutions

Accepted Solutions
ArnadoSandoval
Specialist II
Specialist II

Hola Shirlys,

Estoy deacuerdo con las ideas que te recomendo Fernando, en efecto, comence analizando tu problema con la expresion que colocastes inicialmente,  y llegue a una conclusion similar, la expresion tal como esta escrita inicialemente es compleja, porque es muy larga, aparte de que el nomber de algunas variables son muy largos, lo cual complica identificar los errores.

Estoy anexando una applicacion que create con el archivo Excel que comparte, no el de este thread, creo que en el thread de la semana pasada o antepasada, pero el nombre de las columnas es el mismo; estas son algunas de mis ideas:

Observaciones:

  • La expresion que estas construyendo calcula la mora en los rangos de 30, 60 y 90 dias.
  • La expresion de la Mora a 60 dias deberia ser la Mora a 30 dias mas el Capital con mora a 60 Dias.
  • Pero encontre discrepancias con esta idea para la expresion de Mora a 90 dias.
  • Ya en palabras se hace dificil seguir la logica, aqui vienen los cambios que sugiero:

Acciones:

  • Crea variables que definan la Mora a 30, 60, y 90 dias, yo utilice estos nombre: Mora_30D; Mora_60D y dos versiones para la Mora_90D (porque la Mora_90D es igual a Mora_60D mas el Capital)
  • 02.Error_Expresion-01.png
  • Igualmente recomiendo utilizar Aliases  para las variables [Capital con Mora 1-30 Dias]; [Capital con Mora 31-60 Dias] y [Capital con Mora 61-90 Dias]
  • En el Script you defino los siguientes aliases: Cap_30D; Cap_60D y Cap_90D; estos aliases tiene un valor de 1 o zero; 1 cuando la condicion: [Capital con Mora xx-yy Dias] > 1; como puedes ver el nuevo nombre de la variable hace mas facil escribir la expresion, aparte que Qlik tiene que procesar 0s y 1n lo cual hace con mucha mayor eficiencia.
  • Con los cambios que sugiero, resulta mas facil escribir la expresion, porque no tienes que estar pendientes de corchetes, y nombres larguisimos que dificultan ver cualquier error de sintaxis, con estos cambio la Expresion que estas construyendo se veria de esta forma:
  • 02.Error_Expresion-02.png

Existen ideas un poco mas avanzadas que nos permiten simplicar la logica en Qlik, aplicables a tu problema, pero no las incluyo (todavia) hasta que revices lo que aqui propongo.

Anexo el QVF que carga el archivo Excel que has compartido, implementa las variables Cap_30D, Cap_60D y Cap_90D; ademas de las variables Mora_xxx (estas estan en la seccion de variables)

02.Error_Expresion-03.png

Finalmente:

La ultima imagen que anexo es la expresion que estabas contruyendo, el reto es grande cuando tienes que utilizar nombres de columnas muy largos, con espacios y corchetes, al final, uno se pierde con tanto texto; Algo que me intriga viendo la expresion, porque la Mora a 30 Dias no utiliza a Suma del Capital con Mora 1-30 dias, mientras que las expresiones para Mora a 60 y 90 dias si utilizan sumas (Observacion, solo mi intrigan, porque no me explico la diferencia)

02.Error_Expresion-04.png

Espero que mi respuesta ayude de algun modo a resolver el problema, creo que si explico como "simplificar" las variables para hacernos la vida mas relajada!!!

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.

View solution in original post

ArnadoSandoval
Specialist II
Specialist II

Shirlys,

En referencia a la expresion SET analysis para calcular la linea de total T2 (aclaratoria, el reporte incluye una segunda linea de total T2 que excluye los dos ultimos meses de la data.

Yo lo llamaria reto, pero Qlik tiene una feature que resuelve el SET analysis para nosotros (genero el codigo); en resumen esto es lo que hice:
 
  • Tengo una nueva version del reporte: Vintage Copia-ARS-4.qvf
  • Modifique el sheet: View Expressions, y en la segunda tabla agregue la columna: [cl.Fecha de Originación.autoCalendar.MonthsAgo]
  • Esta columna me ayudaria ver los valores esperados para T2; pero fue mucho mas util.
  • En el Sheet: Reporte Final agregue: 10 campos KPIs para definir las expressiones!
  • La fila superior de KPIs es para el Capital a Vencer
  • La segunda file de KPIs es para la Mora 30 New.
 
  • Las Expresiones para los KPIs para Capital a Vencer son libro de texto; pero reflejaron algo interesante; los ultimos dos meses los esta contando a partir de hoy !!! si te fijas en la columna de MonthsAgo que se agrego en View Expression, ya ninguna transaction salio con MonthsAgo = 1 (creo que esto es muy importante para tu reconciliacion)
  • La Expresion del KPI de Mora 30 New para todos los datos es:
Sum( If( $(Range_MAX_var) = $(Mora_CV30), $(Range_MAX_var), 0 ))
  • Como ya no existen transacciones dentro del ultimo y penultimo mes, me enfoque en el KPI para hace 3 meses !!! duplique el KPI de Mora 30 New, y entre a editar su expresion! (para tres meses) pero antes seleccione hace 3 meses, para unicamente ver el total para las transacciones de hace 3 meses; en el editor tienes esta opcion:
  • Anexe un screenshot; la linea subrayada es el SET analysis que Qlik Genero, coloque el cursor despues del parentesis de SUM( me asegure que la opcion current selections estuviese seleccionada y presione el boton insertar !!! la expresion es:
Sum({<"=12*Year(Today())+Month(Today())-12*Year([cl.Fecha de Originación])-Month([cl.Fecha de Originación])"={'3'}>} If( $(Range_MAX_var) = $(Mora_CV30), $(Range_MAX_var), 0 ))
 
Shirlys-02.png
 
Luego lo que se tiene que hacer es utilizar la misma forma cambiando el parametro de '3' a '2'.
Experimenta utilizando { '2', '3' } en vez de utilizar restar el total de cada mes.
 
Espero que ayude !!!
Arnaldo Sandoval
A journey of a thousand miles begins with a single step.

View solution in original post

10 Replies
Fernando_Fabregas
Creator II
Creator II

Hola Shir.

La expresión es tan larga que es difícil seguirla... Pero van algunos consejos: 

1) Si cada mes de la tabla acumula varias filas del modelo, debería haber un Sum(), Max(), etc. afuera de toda la expresión. Si aparece el símbolo "-" es porque la expresión devuelve más de un valor y no sabe cuál mostrar (también puede ser porque devuelve null() o infinito).

2) Para probar separá la expresión en partes más chicas en varias columnas.

3) Reemplazá expresiones largas por Column(1), Column(2), etc. para hacer referencia a medidas anteriores de la misma tabla.

4) Cuando nada funcione, a modo de prueba grabá en columnas nuevas del modelo los cálculos intermedios o marcas que simplificarán la expresión del gráfico. Obvio no siempre es lo mejor pero ayuda a encontrar el error.

Saludos! Fernando

 

ShirSandoval
Creator
Creator
Author

Hola Fer como andas? si te entiendo lo que me dices. Soy nueva en Qlik, Ya he intentado todo pero creo que lo que hago mal es la unión de todas la expresión. Es decir cada columna tiene armada una expresión por ejemplo Columna1 es la de Rango max de 6 filas. Columna2 es un IF también de 6 filas. ect. adjunto el excel que tengo como ejemplo de  lo que debo hacer en qlik. Tengo que calcular la columna que pinte en verde. 

ShirSandoval_0-1603463484525.png

 

 

 

Fernando_Fabregas
Creator II
Creator II

En qué versión estás trabajando?

En el editor de expresiones  de las últimas versiones de Qlik Sense, abajo te informa si tenés mal la sintaxis.

Veo que hay un punto y coma por la mitad que no debería ir. Y otra posibilidad es que tenés mal anidados los if y paréntesis... 

Modificala hasta que no salga "Error en la expresión". Si te confunde lo largo de las expresiones reemplazá temporalmente las cadenas de los Sum() por cualquier número...

Fernando_Fabregas_0-1603478063644.png

 

ShirSandoval
Creator
Creator
Author

Fer, si yo pienso que deben ser mal anidados los paréntesis o que me falta {}. 

Gracias por tu tiempo Fernando. Seguiré intentándolo. 

ShirSandoval_0-1603479792101.png

 

ArnadoSandoval
Specialist II
Specialist II

Hola Shirlys,

Estoy deacuerdo con las ideas que te recomendo Fernando, en efecto, comence analizando tu problema con la expresion que colocastes inicialmente,  y llegue a una conclusion similar, la expresion tal como esta escrita inicialemente es compleja, porque es muy larga, aparte de que el nomber de algunas variables son muy largos, lo cual complica identificar los errores.

Estoy anexando una applicacion que create con el archivo Excel que comparte, no el de este thread, creo que en el thread de la semana pasada o antepasada, pero el nombre de las columnas es el mismo; estas son algunas de mis ideas:

Observaciones:

  • La expresion que estas construyendo calcula la mora en los rangos de 30, 60 y 90 dias.
  • La expresion de la Mora a 60 dias deberia ser la Mora a 30 dias mas el Capital con mora a 60 Dias.
  • Pero encontre discrepancias con esta idea para la expresion de Mora a 90 dias.
  • Ya en palabras se hace dificil seguir la logica, aqui vienen los cambios que sugiero:

Acciones:

  • Crea variables que definan la Mora a 30, 60, y 90 dias, yo utilice estos nombre: Mora_30D; Mora_60D y dos versiones para la Mora_90D (porque la Mora_90D es igual a Mora_60D mas el Capital)
  • 02.Error_Expresion-01.png
  • Igualmente recomiendo utilizar Aliases  para las variables [Capital con Mora 1-30 Dias]; [Capital con Mora 31-60 Dias] y [Capital con Mora 61-90 Dias]
  • En el Script you defino los siguientes aliases: Cap_30D; Cap_60D y Cap_90D; estos aliases tiene un valor de 1 o zero; 1 cuando la condicion: [Capital con Mora xx-yy Dias] > 1; como puedes ver el nuevo nombre de la variable hace mas facil escribir la expresion, aparte que Qlik tiene que procesar 0s y 1n lo cual hace con mucha mayor eficiencia.
  • Con los cambios que sugiero, resulta mas facil escribir la expresion, porque no tienes que estar pendientes de corchetes, y nombres larguisimos que dificultan ver cualquier error de sintaxis, con estos cambio la Expresion que estas construyendo se veria de esta forma:
  • 02.Error_Expresion-02.png

Existen ideas un poco mas avanzadas que nos permiten simplicar la logica en Qlik, aplicables a tu problema, pero no las incluyo (todavia) hasta que revices lo que aqui propongo.

Anexo el QVF que carga el archivo Excel que has compartido, implementa las variables Cap_30D, Cap_60D y Cap_90D; ademas de las variables Mora_xxx (estas estan en la seccion de variables)

02.Error_Expresion-03.png

Finalmente:

La ultima imagen que anexo es la expresion que estabas contruyendo, el reto es grande cuando tienes que utilizar nombres de columnas muy largos, con espacios y corchetes, al final, uno se pierde con tanto texto; Algo que me intriga viendo la expresion, porque la Mora a 30 Dias no utiliza a Suma del Capital con Mora 1-30 dias, mientras que las expresiones para Mora a 60 y 90 dias si utilizan sumas (Observacion, solo mi intrigan, porque no me explico la diferencia)

02.Error_Expresion-04.png

Espero que mi respuesta ayude de algun modo a resolver el problema, creo que si explico como "simplificar" las variables para hacernos la vida mas relajada!!!

 

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ShirSandoval
Creator
Creator
Author

Buen día Arnaldo,

De acuerdo a tus recomendaciones hice lo siguiente:

1. Creé todas las variables que necesito. 

variables.PNG

Pero luego cuando armo la expresión que necesito usando esas variables no calcula nada si no que muestra la expresión en la columna de la tabla:

tabla expresion if.PNG

Esta es la expresión que armé para la mora de 30 días. 

if expresion var.PNG

2.Renombrar en el script los campos de mora 30,60,90,120,150,180,210 (Creo que es lo mismo que los alias que me comentas , se me hizo más fácil así) 

renombrar.PNG

Arme la expresion If con la que he estado luchando, ahora no me da error de expresion pero en la tabla toda la columna me da 0,00.

Adjunto excel: es el reporte que hace el departamento de cobranzas, la pestaña MES-AÑO ENTREGABLE es el resultado final. La pestaña Cartera es donde estan todas las formulas armadas previamente, luego hacen una tabla dinámica para sacar el entregable.

También adjunto app qvf.

excel CP: es el reporte cargado en qlik para trabajar.

Reporte ejemplo: Es el reporte que me enviaron como guia.

Espero haberme explicado.Gracias.

 

ArnadoSandoval
Specialist II
Specialist II

Hola @ShirSandoval 

Anexo la ultima version del projecto luego de simplificar las expresiones, te explico por mensaje privado antes de escribir aqui en detalle!

Saludos, Arnaldo

Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ArnadoSandoval
Specialist II
Specialist II

Hola Shirlys,

Estoy actualizando el topico en la comunidad, ahora que hemos encontrado su solucion:

  • Elimine todos los Master Items (pense en implementar un segunda solucion con ellos, la ventaja de MI es mayor versatilidad en la interface del usuario, pero eso es algo que esta aplicacion no implementa.)
  • La solucion utiliza variables, con las cuales ya estas familiarizada.

Shirlys-03.png

  • Quizas lo mas significativo es que estas variables reflejan las formulas que ya estan establecidas en Excel, por ejemplo:
if(MORA_60 > 1, [Capital a Vencer] + MORA_30 + MORA_60, 0)
 If(MORA_90 > 1, [Capital a Vencer] + MORA_30 + MORA_60 + MORA_90, 0)
En todos los casos, son expresiones simples, sin funciones agregadas (Sum()), porque cada una de estas formulas son transaccionales (o fila por fila del archivo Excel).
  • La expresion de RangeMax() se llama: Range_Max_Var y su contanido es:
RangeMax( $(Mora_CV30), $(Mora_CV60), $(Mora_CV90), $(Mora_CV120), $(Mora_CV150), $(Mora_CV180), $(Mora_CV210), $(Mora_CV+210))
Es una formula transactional, sin SUM() que aplica a cada fila de datos (row of data).
  • De alli la expresion que calcula cada rango de deuda es bastante simpe, aqui la tienes:
Sum( If( $(Range_MAX_var) = $(Mora_CV60), $(Range_MAX_var), 0 ))
Observa que la funcion agregada SUM() se utilizo una sola vez; esa es una de las complicaciones, implementar funciones agregadas fuera de lugar, aparte de lo largo de las expresiones que la solucion tenia inicialmente; tambien observa la utilizad de la variable: Range_MAX_var, simplifico mucho.
  • Claro que tendras que utilizar la funcion agregada SUM() para los campos MORA_xx cuando los incluyas en tablas, claro dependiendo del escope de cada tabla.
Creo que como conclusion, convertir/implementar archivos Excel en soluciones Qlik se limita en crear variables en Qlik que representen las expresiones en cada fila de Excel.
 
Espero que ayude !!!
Arnaldo Sandoval
A journey of a thousand miles begins with a single step.
ArnadoSandoval
Specialist II
Specialist II

Shirlys,

En referencia a la expresion SET analysis para calcular la linea de total T2 (aclaratoria, el reporte incluye una segunda linea de total T2 que excluye los dos ultimos meses de la data.

Yo lo llamaria reto, pero Qlik tiene una feature que resuelve el SET analysis para nosotros (genero el codigo); en resumen esto es lo que hice:
 
  • Tengo una nueva version del reporte: Vintage Copia-ARS-4.qvf
  • Modifique el sheet: View Expressions, y en la segunda tabla agregue la columna: [cl.Fecha de Originación.autoCalendar.MonthsAgo]
  • Esta columna me ayudaria ver los valores esperados para T2; pero fue mucho mas util.
  • En el Sheet: Reporte Final agregue: 10 campos KPIs para definir las expressiones!
  • La fila superior de KPIs es para el Capital a Vencer
  • La segunda file de KPIs es para la Mora 30 New.
 
  • Las Expresiones para los KPIs para Capital a Vencer son libro de texto; pero reflejaron algo interesante; los ultimos dos meses los esta contando a partir de hoy !!! si te fijas en la columna de MonthsAgo que se agrego en View Expression, ya ninguna transaction salio con MonthsAgo = 1 (creo que esto es muy importante para tu reconciliacion)
  • La Expresion del KPI de Mora 30 New para todos los datos es:
Sum( If( $(Range_MAX_var) = $(Mora_CV30), $(Range_MAX_var), 0 ))
  • Como ya no existen transacciones dentro del ultimo y penultimo mes, me enfoque en el KPI para hace 3 meses !!! duplique el KPI de Mora 30 New, y entre a editar su expresion! (para tres meses) pero antes seleccione hace 3 meses, para unicamente ver el total para las transacciones de hace 3 meses; en el editor tienes esta opcion:
  • Anexe un screenshot; la linea subrayada es el SET analysis que Qlik Genero, coloque el cursor despues del parentesis de SUM( me asegure que la opcion current selections estuviese seleccionada y presione el boton insertar !!! la expresion es:
Sum({<"=12*Year(Today())+Month(Today())-12*Year([cl.Fecha de Originación])-Month([cl.Fecha de Originación])"={'3'}>} If( $(Range_MAX_var) = $(Mora_CV30), $(Range_MAX_var), 0 ))
 
Shirlys-02.png
 
Luego lo que se tiene que hacer es utilizar la misma forma cambiando el parametro de '3' a '2'.
Experimenta utilizando { '2', '3' } en vez de utilizar restar el total de cada mes.
 
Espero que ayude !!!
Arnaldo Sandoval
A journey of a thousand miles begins with a single step.