Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
etovi1948
Contributor III
Contributor III

Porcentaje de totales en tablas pivot (QSense)

Estimados, me embrollé tratando de calcular los % de totales en tablas pivot, que pueden tener la dimensión de mes tanto en fila como en columna. Lo que probé me mete un % por cada fila (1er caso) o cada columna (2º caso). Les dejo dos ejemplos:

1)  Una tabla pivot con dimensión MES en la fila y dimensión AÑO en columna. Las medidas son Sum(A) y Sum(B), donde A y B los cargo desde una planilla Excel.

  

Año
20152016
MesABAB
TOTALES15229421510969
Enero12598122100
Febrero1568615388
Marzo1445714168
Abril99849688
Mayo1328512990
Junio1477614464
Julio1026910176
Agosto97808780
Septiembre58777979
Octubre1237112573
Noviembre1756817270
Diciembre1649116193

Necesito calcular los porcentajes de totales por columna A y B,y por cada año seleccionado, que quede así (copio sólo la parte de arriba):

  

Año
20152016
MesABAB
TOTALES15229421510969
%                61,8                 38,2                 60,9                 39,1
Enero12598122100
Febrero1568615388
Marzo1445714168

2) Necesito lo mismo pero para tablas pivot donde la dimensión MES está como columna y en las filas hay otra dimensión, por ejemplo, intervalos de peso y con totales de filas y columnas. La medida es Sum(C):

        

Mes
PesoTOTALESEneFebMarAbrMayJunJulAgoSepOctNovDic
TOTALES291292441183127221518281721
0 a 10019102250302310
101 a 500219222431111920141510211319
501 +53608577506432

Necesito calcular el porcentaje de las filas en estos casos:

        

Mes
PesoTOTALES%EneFebMarAbrMayJunJulAgoSepOctNovDic
TOTALES291     100,0 292441183127221518281721
0 a 10019         6,5 102250302310
101 a 500219       75,3 222431111920141510211319
501 +53       18,2 608577506432

Agradezco una mano en esto. Saludos.

13 Replies
hector_munoz
Specialist
Specialist

Hola Ernesto Virgili,

Te adjunto un qvw en el que puedes ver lo que he hecho a nivel de script (añadir un registro con el mes % para todas las combinaciones de año y tipo) y en las tablas pivotantes con la expresión Ventas de la siguiente forma:

If(Mes = '%',

  Num(Sum(TOTAL <Año, Tipo> Ventas) / Sum(TOTAL <Año> Ventas), '#.##0,0%', ',', '.'),

  Num(Sum(Ventas), '#.##0', ',', '.'))

El resultado es este para el primer caso:

18-01-2017 5-46-12.png

, y este para el segundo:

18-01-2017 5-46-22.png

Espero que te sirva.

Saludos,

H

etovi1948
Contributor III
Contributor III
Author

Hola, Héctor. Buen trabajo tomaste para reproducir el ejemplo!

Parece funcionar, pero no me queda claro cómo armar tu sugerencia en mi script, porque el mes y el año los toma de la hoja Calendario a partir de la fecha del evento y lo que denominaste "tipo" es el rótulo de diferentes tablas pivot similares, con campos diversos... y no sé cómo hacer eso con un inload o insertando en la hoja calendario.

Por otra parte, agregando las combinaciones posibles de año y tipo, me hace dudar sobre la flexibilidad de la solución, porque (como dije) el "tipo" son diferentes campos en distintas tablas, y se complicaría.

Hablo de una app hospitalaria obstétrica, para el ejemplo que traté de subir, A = rótulo "Vivos" y la medida es Sum(Obs_NacVivos); B = "Muertos" y la medida es Sum(Obs_NacMuertos). Año y mes los toma del calendario a partir de la fecha de parto. Hay varias tablas pivot similares para otros atributos (por ej.: sexo, gestación, etc.).

De ahí mis dudas en cómo armar tu sugerencia de incluir un mes "%" con o sin inline.

La tabla real de ejemplo es la que sigue:

Gracias por tu tiempo y esfuerzo!6b35a273ae7b4f828e4a5e223ebb5630.jpg

hector_munoz
Specialist
Specialist

Hola Ernesto Virgili,


Tienes razón, he modificado el script para que el registro de "%" no tenga información ni de año, ni de tipo ni de ventas y en las tablas he marcado la opción "Suprimir Valores Cero".


Creo que te podría funcionar lo siguiente, aunque no es muy elegante:


  1. En el/los campo/s que contenga/n los meses añades a la tabla (CONCATENATE) un registro con el valor "%" de forma que la cardinalidad del campo mes pase de 12 a 13 valores.
  2. Usas una dimensión calculada que no te muestre el "%" en aquellos cuadros de lista, campos, etc. donde necesites ese campo pero sin el valor "%". La dimensión calculada podría ser algo así: "If(Len(Mes) > 1, Mes, Null())". De esta forma el carácter "%" lo conviertes en nulo.
  3. Usas el campo tal cual en las tablas como las que muestras en tu ejemplo.

Te vuelvo a adjuntar el ejemplo, aunque sin el CONCATENATE.

Espero que te sirva.

Un saludo,
H

etovi1948
Contributor III
Contributor III
Author

Estimado Héctor, es la segunda vez que como novato en Qlik no termino de darme cuenta de cómo resolver mi script u objeto con la ayuda que me ofrece un experto en el foro.

Aunque entiendo la idea y seguramente es una solución, mi experiencia no alcanza para concretar la cardinalización con el %.

Mi script del calendario es:


Calendario:

LOAD

    Date((Obs_FechaParto),'DD.MM.YYYY')                                          as Obs_FechaParto,

    Year(Obs_FechaParto)&'-'&Num(Month(Obs_FechaParto),'00')      as Obs_AñoMes,

    Year(Obs_FechaParto)                                                                      as Obs_Año,

    'T' & Ceil(Month(Obs_FechaParto)/3)                                                as Obs_Trimestre,    

    Month(Obs_FechaParto)                                                                   as Obs_Mes,         

    WeekDay(Obs_FechaParto)                                                               as Obs_DiaSemana;

Load Date(MinDate + IterNo() -1 )      as Obs_FechaParto While (MinDate + IterNo() - 1) <= NumMaxDate);                                   

Load

    Min(Obs_FechaParto)                                                                       as MinDate,

    Max(Obs_FechaParto)                                                                       as MaxDate                   

RESIDENT Obstetricia;


Además, inducido por el ejemplo inicial (creo que no fue una feliz idea inventar una tabla), ponés "Tipo" en la fórmula y, en realidad, no existe tal cosa (la cargas como valor desde el inload, pero en mi caso es un rótulo ""Vivos" y "Muertos", y "Ventas" es un cálculo: sum(Obs_NacVivos) para el caso del rótulo "Vivos". De esta forma no sé adaptar la fórmula tuya: ¿Ventas equivale a Obs_NacVivos y Obs_NacMuertos? Si es así, ¿la suma inicial no es redundante con la de mis expresiones en la tabla?


Num(Sum(TOTAL <Año, Tipo> Ventas) / Sum(TOTAL <Año> Ventas), '#.##0,0%', ',', '.'),

   Num(Sum(Ventas), '#.##0', ',', '.'))

En fin, no espero gastar más de tu tiempo y te agradezco sinceramente el esfuerzo que has hecho. Me disculpo por mi incapacidad para aprovechar tu experiencia. Mi cordial saludo.

hector_munoz
Specialist
Specialist

Hola Ernesto,

Creo que ya te he entendido... Me he inventado unos valores y he creado un modelo sencillo con una tabla de hechos de nacimientos de bebés y otra con un calendario generado a partir de las fechas de los hechos más una concatenación de un registro con el mes ficticio '%'.

En diseño una tabla pivotante con las dimensiones año y mes y las expresiones de nacimientos vivos y muertos, y saldría esto:

21-01-2017 8-45-18.png

Te adjunto la app que he utilizado. ¡Espero que esta vez haya dado en el clavo!

Saludos desde España,

H

hector_munoz
Specialist
Specialist

Ernesto,

Aparte, para los posibles cuadros de lista del campo Mes que quisieras crear para que el usuario seleccione los meses puedes hacer 2 cosas:

  • Usar el campo Mes que contiene el carácter '%' con una dimensión calculada: If(Len(Mes) > 1, Mes, Null()), para que este carácter no aparezca.
  • Crear un nuevo campo Mes2 que no va a contener el carácter '%' (ya que este se crea solo en el campo Mes) y utilizarlo en los cuadros de lista.

Saludos,
H

etovi1948
Contributor III
Contributor III
Author

Hernán, he tratado, sin éxito, de aplicar tu recomendación, atribuible sin dudas a mi poca experiencia con QSense.

La app que elaboré para aprender y mejorar mi trabajo en estadísticas hospitalarias tiene como fuente una planilla Excel que tomo de las bases de datos pertinentes. Desde ahí generé muchos objetos de hoja a partir de dos secciones: la de datos tomados de Excel y la de calendario. No me he preocupado por la prolijidad de distribución de los objetos porque la app no será instalada en el hospital, pero me sirve para preparar los informes estadísticos mensuales y contestar cualquier pregunta que hagan los directivos respecto al tema; en este sentido, me permite potenciar significativamente mi capacidad de respuesta y producción de indicadores.

No encontré cómo mandarte por mensaje la app (pesa poco) para que la veas, como simple curiosidad y para que justifiques un poco más mi ineficacia en reproducir tus sugerencias.

Te agradezco realmente el interés y esfuerzo que has puesto en darme una ayuda. Valoro mucho la cooperación tuya y la de otros miembros del foro, que ponen su experiencia al servicio de quienes estamos iniciando.

Un afectuoso salud desde Argentina.

etovi1948
Contributor III
Contributor III
Author

Me disculpo, donde dice Hernán, léase Héctor!

hector_munoz
Specialist
Specialist

Jajaja, no te preocupes por el nombre... Si abres esta discusión en URL original:

https://community.qlik.com/thread/246517?sr=inbox&ru=233635

, y luego pinchas en la opción de editor avanzado de la esquina superior derecha:

21-01-2017 17-05-40.png

Te sale un editor con más opciones, como la de la esquina inferior derecha de adjuntar aplicación:

21-01-2017 17-07-34.png

Adjúntala y así le podemos echar un vistazo.

Saludos,

H