Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Union de 2 qvd, a partir de filtro de fechas.

Hola, soy muy muy nueva en el tema de QlikView, y tengo una consulta que me tiene detenida en este momento, les comento:

Tengo dos QVD, uno con una carga presupuestaria, desde archivos excel, y la otra con lo real, proveniente desde la BD. Mi duda es que necesito hacer unas tablas comparativas del presupuesto y lo real y filtrar por fecha (año, mes, periodo). Ambos QVD traen su propia fecha y ya los he separado en año mes y periodo. Para unir la información he dejado ambos QVD con los mismos nombres de campo, para que QV los una, esto resulta perfectamente y me hace los filtros muy bien, sin embargo, al hacerlo así, se crea una llave sintética que me comentaron no debiese existir en un modelo... ahora además de esto, debo unir las cuentas contables de cada QVD para poderlos asociar por cuenta, pero no quiero avanzar mas hasta asegurarme que no hay alguna forma mas eficiente de hacer esto, por lo menos con las fechas y sin generar las llaves sinteticas,  he leído acerca de un calendario maestro, pero no sé si pudiese solucionar mi caso o no tiene que ver con el asunto.

Por favor, si alguien me puede orientar un poquito, se lo agradecería mucho.

Gracias.

1 Solution

Accepted Solutions
Not applicable
Author

Me resultó con una tabla intermedia, con los campos iguales entre las tablas que tengo. Gracias igual por tu ayuda, me sirvió para aprender algo que no sabía.

View solution in original post

6 Replies
eddysanchez
Partner - Creator
Partner - Creator

Hola Paulyval,

La llave sintética se genera cuando entre dos tablas tienen más de un campo en común (ejemplo: Fecha, año, mes y periodo)

Si estas juntando fechas, solo necesitas el campo fecha de un lado y ya no año, mes y periodo.

Ahora puedes usar un calendario maestro y solo pasar fechas de cada caso, el código es asi:

//Minima fecha

LET varMinDate = Num(Peek('OrderDate', 0, 'Orders'));

//Maxima fecha

LET varMaxDate = Num(Peek('OrderDate', -1, 'Orders'));

   

//*************** Temporary Calendar ***************

TempCalendar:

LOAD

          $(varMinDate) + rowno() - 1 AS Num,

          date($(varMinDate) + rowno() - 1) AS TempDate

AUTOGENERATE

          $(varMaxDate) - $(varMinDate) + 1;

   

//*************** Master Calendar ***************

MasterCalendar:

LOAD                    TempDate AS OrderDate,

                    Week(TempDate) AS Week,

                    Year(TempDate) AS Year, //Año

                    Month(TempDate) AS Month, //Mes

                    Day(TempDate) AS Day,

                    Weekday(TempDate) AS WeekDay,

                    'Q' & ceil(month(TempDate / 3)) AS Quarter,

                    Date(monthstart(TempDate), 'MMM-YYYY') AS

                              MonthYear, //Periodo

                    Week(TempDate)&'-'&Year(TempDate) AS WeekYear

RESIDENT TempCalendar

ORDER BY TempDate ASC;

DROP TABLE TempCalendar;

Not applicable
Author

Hola Eddy:

Gracias por tu pronta respuesta. Con respecto al campo fechas, pues cuando lo leí me di cuenta que tenías toda la razón, pues podría haber juntado solo por este campo, y me pregunté porqué no lo hice así, cuando fui a ver el script, me di cuenta de la razón, ya que en el presupuesto no tengo una fecha, sino el año y mes separado. En el archivo con el valor real, si tengo la fecha completa,y esta la separo en año, mes y periodo.

Sobre el calendario maestro, lo trataré de implementar según el código que me enviaste y te comento como me va. De todas maneras, y perdona mi insistencia, pero no me queda claro si cuando se generan las llaves sintéticas se considera como un error y algo que no debiese pasar nunca, o hay en casos que si es necesario tener este tipo de llaves.

Saludos,

Pauly

eddysanchez
Partner - Creator
Partner - Creator

Pauly, llave sintética ES UN ERROR

Lo que hace es crear una tabla cruzando todos los valores posibles y con genera lentitud (además de que puede generar errores en tus datos)

Tienes que corregirlo usando usando un campo único como relación (Fecha en este caso)

El calendario maestro sirve para tener las fechas sin "huecos", todas seguidas.

Not applicable
Author

Eddy, muchas gracias, me queda clarísimo. Voy a probar y te cuento como me va.

Pauly

Not applicable
Author

Eddy, te comento que me funcionó muy bien tu idea... hice la tabla calendario maestro y la asocíe a la carga real y al presupuesto... por lo que por ahora no me quedó ninguna llave sintètica, sin embargo tengo otro problema ahora debo unir las empresas y las cuentas también de ambas tablas, es decir que con la fecha no es suficiente, ya que tengo n empresas por ambas cargas y x cuentas por cada una de estas... ¿como debiese enfrentar esto para no generar una llave sintetica?

Muchas gracias.

Pauly

Not applicable
Author

Me resultó con una tabla intermedia, con los campos iguales entre las tablas que tengo. Gracias igual por tu ayuda, me sirvió para aprender algo que no sabía.