Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola,
asumamos que tengo una tabla que contiene datos como los de abajo (actualmente tengo 46 empresas, 7 GroupMask, y una infinidad de Clientes)
Compañía | Cliente | GroupMask | Saldo |
Juan | Victor | 1 | 50 |
Juan | Marcos | 1 | 33.5 |
Juan | Manuel | 1 | 12 |
Juan | Pablo | 2 | -42 |
Manuel | Pablo | 1 | 11 |
Manuel | Juan | 2 | -12 |
Marcos | Pablo | 1 | 24 |
Marcos | Juan | 2 | -30 |
Marcos | Victor | 2 | -40 |
Pablo | Juan | 1 | 42 |
Pablo | Marcos | 2 | -23 |
Pablo | Manuel | 2 | -11 |
Victor | Marcos | 1 | 40 |
Victor | Juan | 2 | -50 |
donde GroupMask 1 son Cuentas por Cobrar, y GroupMask 2 son Cuentas por Pagar.
me pidieron hacer estas dos tablas.
en Cuentas por cobrar : Gráfico "Tabla Pivote"; Dimensiones: Compañía, GroupMask1 =if(GroupMask = 1, GroupMask), Cliente;
Expresión: Sum(Saldo)
en cuentas por pagar : Grafico "Tabla Pivote"; Dimensiones: Cliente, GroupMask2 =if(GroupMask = 2, GroupMask), Compañía;
Expresión: Sum(Saldo)
noten que en el segundo gráfico, puse "Cliente" primero, y de ultimo "Compañía", para que me presentaran el mismo esquema.
Para el análisis, ellos a tienen un orden especifico en sus 40 empresas, que han usado por años.
El orden por defecto de mi ejemplo es: Juan, Manuel, Marcos, Pablo, Victor. para ordenarlos en una forma especifica utilice esto para
ordenar Compañía una expresion: Match(Compañia,'Juan', 'Victor', 'Manuel', 'Pablo', 'Marcos')
y para Cliente esta expresion: Match(Cliente,'Juan', 'Victor', 'Manuel', 'Pablo', 'Marcos')
Para saber si hay un descuadre, hice esto.
un gráfico "tabla pivote" con dos dimensiones calculadas.
la primera, "Unión 1" es =if(GroupMask = 1, Compañia, if(GroupMask = 2,Cliente))
la segunda, "Unión2" es =if(GroupMask = 1, Cliente, if(GroupMask = 2, Compañia))
un expresión con =Sum(Saldos)
mi problema es que no he encontrado la forma de ordenar el gráfico "Descuadre" de forma especifica.
no se como decirla al "Sort Expresion" de Union1 o Union2, que lo ordene Juan, Victor, Manuel, Pablo, Marcos.
Actualmente en mi Qlikview original de 40 empresas las compañías son leídas en el script de forma ordenada,
ademas las compañías y los clientes tienen un numero de ordenamiento en el script, pero incluso usando eso para ordenarlo, a sido en vano.
¿Me ayudarían a encontrar una manera de ordenar una dimensión calculado de un gráfico pivote?
_______________________________________________________________________________________________________________
Lo he solucionado por ahora de esta manera, pero esto no es "optimo" para mi, teniendo en cuenta que tengo 46 empresas.
para el ejemplo lo soluciona por ahora así.
si alguien tiene una mejor idea, se lo agradecería mucho.
teniendo en cuenta la función RowNo() y como genera un auto numérico para cada linea se me ocurrió moverlas de esta manera. para la dimension calculada
"Union1" : =if(RowNo()=1,1,if(RowNo() =2, 4, if(RowNo() = 3,3, if(RowNo()=4,5,if(RowNo() = 5,2)))))
y en
"Union2" : =if(RowNo()=1,2,if(RowNo() =2, 5, if(RowNo() = 3,3, if(RowNo()=4,1,if(RowNo() = 5,4)))))
Finalmente halle la solución, y fue gracias a ambos. en realidad fue gracias a los dos,
por que la solución correcta es una mezcla de las soluciones de ustedes.
Utilice un Dual con un ApplyMap al mismo tiempo, jajajajaja que locura.
Dual1:
Mapping
LOAD Orden1, dual(string,numrep) as Compañia INLINE [
string, numrep, Orden1
Juan, 1, 1
Victor, 2, 2
Manuel, 3, 3
Pablo, 4, 4
Marcos, 5, 5
];
Dual2:
Mapping
LOAD Orden2, dual(string,numrep) as Cliente INLINE [
string, numrep, Orden2
Juan, 1, 1
Victor, 2, 2
Manuel, 3, 3
Pablo, 4, 4
Marcos, 5, 5
];
y luego cambie la tabla de los datos de esta manera.
Tabla:
LOAD
ApplyMap('Dual1',Orden1,Null())as Compañia, ApplyMap('Dual2',Orden2,Null())as Cliente, GroupMask, Saldo
INLINE [
Orden1, Orden2, GroupMask, Saldo
1, 2, 1, 50
1, 5, 1, 33.5
1, 3, 1, 12
1, 4, 2, -42
3, 4, 1, 11
3, 1, 2, -12
5, 4, 1, 24
5, 1, 2, -30
5, 2, 2, -40
4, 1, 1, 42
4, 5, 2, -23
4, 3, 2, -11
2, 5, 1, 40
2, 1, 2, -50
];
y listo, deje todo los gráficos iguales, y en la pestaña orden, le puse, ordenar numéricamente.
Esta es la solución para ordenar una dimension calculada dentro de una tabla pivote.
Usar la funcion Dual al mismo tiempo que el ApplyMap.
obviamente me toca cambiar mi query final, en vez de usar el nombre de la compañia, uso el numero id de la misma.
y acomodo el mapping.
Gracias por la ayuda. JoaquinLRSorrakis01
Hola,
De momento se me ocurre... podrías probar con la función Dual()
Saludos,
Hola othniel2014:
La ordenación 'a pelo' es relativamente sencilla:
Creas una tabla inline con dos campos Nombre y OrdenAlternativo
Después haces un join o un applymap a las tablas de hechos para añadir ese campo (ojo el nombre por las sinéticas)
Por último, introduces ese campo en ordenar/expresion
Saludos
Joaquín
Gracias amigo, pero ya he usado el ApplyMap y el Mapping, y no funciono...
recuerda que utilizo una "Dimension Calculada" (estoy uniendo el campo de Compañia y el de Cliente). si te parece, intenta hacer el qlikview de ejemplo que puse, este es el script, muchas gracias por tu apoyo.
Tabla:
LOAD * INLINE [
Compañia, Cliente, GroupMask, Saldo
Juan, Victor, 1, 50
Juan, Marcos, 1, 33.5
Juan, Manuel, 1, 12
Juan, Pablo, 2, -42
Manuel, Pablo, 1, 11
Manuel, Juan, 2, -12
Marcos, Pablo, 1, 24
Marcos, Juan, 2, -30
Marcos, Victor, 2, -40
Pablo, Juan, 1, 42
Pablo, Marcos, 2, -23
Pablo, Manuel, 2, -11
Victor, Marcos, 1, 40
Victor, Juan, 2, -50
];
y este es el grafico que quiero armar:
un gráfico "tabla pivote" con dos dimensiones calculadas.
la primera, "Unión 1" es =if(GroupMask = 1, Compañia, if(GroupMask = 2,Cliente))
la segunda, "Unión2" es =if(GroupMask = 1, Cliente, if(GroupMask = 2, Compañia))
un expresión con =Sum(Saldos)
Ya lo pruebo y edito.
Hola,
Solo una duda... Le estas diciendo que no te muestre los valores a 0?
Se te reducirá un montón la tabla....
Hola,
he estado probando con Dual y no me ha ido bien, lo que si me ha funcionado es si ordenas las 2 por Texto.
Saludos,
ok, les digo los que estoy haciendo..
uno de los clientes de mi jefe usa el sistema SAP y estoy armando los estados financieros en el qlikview,
y me pidieron que mostrara las cuentas por cobrar de cada compañia por cliente a su vez
las cuentas por pagar de cada cliente por compañia, si notas este es el contrario del anterior.
en el ejemplo que puse, la primera imagen, en el grafico "Cuentas por cobrar" Juan bajo la columna "Compañia" tiene una cuenta por cobrar de 50.00 a Victor, osea que Victor le debe a Juan
en el grafico de "Cuentas por pagar" como esta alrevez. puedo encontrar al cliente Juan dentro de la empresa Victor,
y fijarme si dentro de la BD de Victor tambien esta el monto de -50.00 en este caso. osea que aparece que en concreto, Victor le debe a Juan los 50.00
ok, para saber si todas las base de datos estan consolidadas, me mandaron hacer el grafico de "Descuadre", uniendo las cuentas por cobrar y las cuentas por pagar, por eso muestro los campos que dicen "0.00" para que el cliente de mi jefe vea que empresas estan cuadradas, y cuales no.
para un mejor analisis, grafico de "Descuadre" debe estar ordenado como sus predecesores.
el punto es que como las dimenciones que uso en el grafico de "Descuadre" son dimenciones calculadas, no puedo ordenarlo.
ahorita probe el DUAL, pero me convierte el texto en un campo numerico. pero si me las ordeno, al menos dentro del Cuadro de tabla.
se me ocurrio intentar convertir el texto en un campo numerico, jajajajaj aunque no se si dentro de los limites de Qlikview podre hacerlo.
el problema con Dual es que le da al campo una connotacion numerica, y no hace el match con el campo texto.
aunque visualmente sean el mismo.
los ejemplos que vi del DUAL eran fechas, y sabemos que aunque veamos febrero, lunes, por detras siguen siendo numeros, pero bueno al parecer es un poco complicado usarlo con valores cuya connotacion es texto.
Edito.
Ellos ya tienen un orden especifico para las 46 empresas que me dieron a manejar. y tengo entendido que lo hacen asi por temas contables, de quien le debe mas , o de donde sale la plata que le prestan a las otras.. por que originalmente las tenia ordenada yo por orden de texto.
pero entre los cambios que debía hacer esta el orden de las empresas...
Hola:
Estoy perdido, pero a lo mejor me encuentro
Crea campos en el script
LOAD ...
if(GroupMask = 1, Compañia, if(GroupMask = 2,Cliente)) as Unión1
if(GroupMask = 2, Cliente, if(GroupMask = 2,Compañia)) as Unión2
Y luego creas dos campos con el ApplyMap OrdUnión1 y OrdUnión2
En la fórmula de ordenación pones esto
if(GroupMask = 1, OrdUnión1, OrdUnión2)
Saludos
Joaquín