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: 
Not applicable

Tabla simple: mostrar resultados según filtro.

Buenas tardes,

Estoy empezando con Qlik View. Me he instalado la versión 11 y estoy bloqueado por una cuestión que imagino es trivial. Ahí va:

Tengo una tabla llamada PERIODOS con los valores (201601, 201602, ... 201612) y en una tabla de datos tengo un campo que se llama CUP_PERIODO y otro MAT_PERIODO. En estos campos tengo valores que se corresponden a la tabla de PERIODOS, pero no existe asociación entre ambas tablas.

Deseo crear una simple tabla que me muestre para cada PERIODO, la cantidad de CUP_PERIODO, en una columna, y MAT_PERIODO en otra columna.

En dimesiones de la tabla tengo puesto PERIODO

En Expresiones trato de escribir la siguiente: NumericCount(  {$ <CUP_PERIODO=PERIODO>}  DISTINCT CUP_ID) y no obtengo resultados.

¿Qué estoy haciendo mal?

Estaré muy agradecido de contar con vuestra ayuda.

Muchas gracias por vuestro tiempo!!

Àlex

7 Replies
sorrakis01
Specialist
Specialist

Hola Alex,

Puedes subir el documento para poder ayudarte?

saludos,

jvitantonio
Luminary Alumni
Luminary Alumni

Hola Alex,

Hay demasiadas cosas que te estan pasando y aunque parezca simple no lo es. Usar Qlikview eventualmente te va a resultar sencillo pero por tu post supongo que no tenes experiencia en diseño de datos ni de base de datos que es complejo y esencial en todo proyecto.

Por lo que dices, tienes tres tablas que no estan unidas para nada. Esto puede causar muchos problemas si las tablas son grandes ya que podras hacer cross joins entre las tablas en el front end y esto hara que consumas toda la memoria o CPU.

De tu post, no puedo ver bien tu modelo, pero te recomiendo que concatenes las tablas que tienen los campos CUP_PERIODO Y MAT_PERIODO y luego hagas un left/inner join con la tabla PERIODO.

Ej:

Tabla1:

LOAD

       CUP_PERIODO   AS PERIODO,

      'Tabla1'                  AS _seccion

FROM miTabla.qvd (qvd);

CONCATENATE

LOAD

      MAT_PERIODO    AS PERIODO,

     'Tabla2'                  AS  _seccion

FROM miTabla2.qvd (qvd);

LEFT KEEP

Periodos:

LOAD

       PERIODO

FROM tablaPeriodo.qvd (qvd);

======================================

Luego crea una tabla con las dimensiones PERIODO y _seccion. En la expresion pon:

=count(PERIODO)

Dependiendo de tu modelo, esto puede cambiar bastante. Si tenes mas dudas mejor adjunta aqui tu aplicacion asi la puedo ver.

Saludos,

Juan

Not applicable
Author

Hola, Juan.


En primer lugar, muchas gracias por tomarte el tiempo en contestar.


Los datos que cargo a través del script son:


//-------- Start Multiple Select Statements ------

SQL SELECT "PER_ID"

FROM "dbDWH_TEST".dbo."CFG_PERIODOS";

SQL SELECT "CUP_ID",

    "CUP_FECHA",

    "CUP_PER_ID",

    "CUP_CUR_ID"

FROM "dbDWH_TEST".dbo."DAT_CUPONES";

SQL SELECT "MAT_ID",

    "MAT_PER_ID",

    "MAT_FECHA",

    "MAT_CUP_ID"

FROM "dbDWH_TEST".dbo."DAT_MATRICULAS";

//-------- End Multiple Select Statements ------



La tabla que quiero conseguir seria el resultado de esta instrucción que con SQL no tengo el menor problema de resolver.

SELECT CFG_PERIODOS.PER_ID AS PERIODO

  , COUNT(DISTINCT DAT_CUPONES.CUP_ID) AS TOTAL_CUPONES_EN_PERIODO

  , COUNT(DISTINCT DAT_MATRICULAS.MAT_ID) AS TOTAL_MATRICULAS_EN_PERIODO

FROM CFG_PERIODOS

  LEFT JOIN DAT_CUPONES

      ON CFG_PERIODOS.PER_ID = DAT_CUPONES.CUP_PER_ID

  LEFT JOIN DAT_MATRICULAS

      ON CFG_PERIODOS.PER_ID = DAT_MATRICULAS.MAT_PER_ID

GROUP BY CFG_PERIODOS.PER_ID

Adjunto el documento.

Not applicable
Author

Hola Jordi,

Adjunto el documento.

Muchas gr4acias.

Àlex

sorrakis01
Specialist
Specialist

Hola Alex,

Tienes que intentar hacerlo como por ejemplo te ha comentado Juan ya que actualmente tienes 3 tablas que no estan conectadas entre ellas. Tienes que intentar construir una tabla con los datos ya agregados tal y como te comenta Juan. Al hacer el CONCATENATE reducirás las tablas a 1 sola y no tendrás problemas para realizar el cálculo. Si lo miras bien es parecido a lo que estas diciendo tu en la query.

LOAD PERIODO, TOTAL_CUPONES_EN_PERIODO, TOTAL_MATRICULAS_EN_PERIODO

SQL SELECT CFG_PERIODOS.PER_ID AS PERIODO

  , COUNT(DISTINCT DAT_CUPONES.CUP_ID) AS TOTAL_CUPONES_EN_PERIODO

  , COUNT(DISTINCT DAT_MATRICULAS.MAT_ID) AS TOTAL_MATRICULAS_EN_PERIODO

FROM CFG_PERIODOS

  LEFT JOIN DAT_CUPONES

      ON CFG_PERIODOS.PER_ID = DAT_CUPONES.CUP_PER_ID

  LEFT JOIN DAT_MATRICULAS

      ON CFG_PERIODOS.PER_ID = DAT_MATRICULAS.MAT_PER_ID

GROUP BY CFG_PERIODOS.PER_ID

Saludos,

adriansalas
Contributor III
Contributor III

Hola te adjunto un archivo con una posible solución.

Saludos

Anonymous
Not applicable
Author

Hola Alex,

Al ser islas no puedes realizar la comparativa que estas haciendo en la expresión, tendrías que poner la siguiente expresión:

NumericCount(DISTINCT IF(PER_ID=CUP_PER_ID, CUP_ID))

Pero lo más lógico es que unas el modelo por periodo llamando a los campos igual.

Un saludo