Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Duda con carga de datos en archivos .qvd

Buenas tardes, tengo una duda respecto al funcionamiento de la carga de datos en los archivos .qvd

Lo que ocurre es que, cargo los datos desde una base de datos, cuando las cargo tal cual como estan en la BD ningún problema, por ejemplo con una carga como esta:

DimEmployee:

SQL SELECT EmployeeId,

    eMail,

    FirstName,

    LastName,

    GenderId,

    AgeRangeId,

    BirthDate,

    Login,

    Address,

    City,,

    Title,

    JobName,

FROM DimEmployee;

STORE DimEmployee

INTO DimEmployee.qvd;

Con ese tipo de carga ningún problema, el problema es cuando manejo sentencias SQL más complejas, como por ejemplo un inner join.

Lo que quiero carga en ese caso es algo como esto:

DimStartAssig:

SQL SELECT FactAssignment.StartDateId,

    DimDate.Day,

    DimDate.Month,

    DimDate.MonthName,

    DimDate.Year,

    DimDate.Quarter,

    DimDate.Semester

FROM FactAssignment

INNER JOIN DimDate

ON FactAssignment.StartDateId = DimDate.DateId;

STORE DimStartAssig

INTO DimDateAssigStart.qvd;

En este caso, son dimesiones date de un DW, esta es sólo una, necesito cargar 10. Si las cargo así, no tengo problema, al carga una segunda tampoco. A todo esto, las dimensiones fecha las tengo separadas por "Start", como la del ejemplo, y su complemento es "End", es decir, todas las dimensiones fecha que cargo estan separadas en dos, Start y End.

Por que explico lo anterior?, porque si cargo las tablas asi como estan escritas me carga la primera Start y la primera End sin problema, pero al leer la segunda Start y End, no reconoce el nombre de la tabla en la cual estoy guardando los datos, el erro dice, por ejemplo: "Tabla no encontrada DimStartLic" (siendo esta última otra tabla de tipo Date). Fui cambiando el orden de carga y lo que sucede es eso, lee sin problemas la primera de ambas y la segunda ya genera error, o sea, si cargo primero la DimStartLic y luego la DimStartAssig, será esta última la que genera el error.

Una forma en que no tuve problemas con la carga, fue poniendole alias a los campos de SQL, tal cual se hace en una sentencia, es decir, la carga me queda así:

DimStartAssig:

SQL SELECT FactAssignment.StartDateId as AssigStartId,

    DimDate.Day as AssigStartDay,

    DimDate.Month as AssigStartMonth,

    DimDate.MonthName as AssigStartMonthName,

    DimDate.Year as AssigStartYear,

    DimDate.Quarter as AssigStartQuarter,

    DimDate.Semester as AssigStartSemester

FROM FactAssignment

INNER JOIN DimDate

ON FactAssignment.StartDateId = DimDate.DateId;

STORE DimStartAssig

INTO DimDateAssigStart.qvd;

Al tener todas las cargas de las dimensiones fechas con alias desde SQL, no me genera ningún problema.

Por que no lo hago así entonces?, es más que nada por normalizar el script de mi aplicación Qlikview, ya que necesito separar el GUI, del Script donde manejo los datos y los datos propiamente tal, por eso quiero cargar los datos tal cual vienen en la BD para luego en el script crear las relaciones y las transformaciones pertinentes.

No logro descrifrar el porque me genera conflicto, si bien todos los campos de las dimensiones date quedarán con el mismo nombre, son tablas distintas, y las referencias circulares que acá se crean no importan ya que tengo otro script en el cual renombro y dejo todo en orden para poder crear reportes con mis datos.

Si alguien sabe como puedo cargar las dimensiones Date como quiero, le estaré agradecido si me puede ayudar, según las pruebas que he hecho al parecer no puedo y tengo que hacerlo con alias, pero mis conocimientos de Qlikview son limitados y quizá este ignorando algo importante.

De antemano gracias, saludos.

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Hola,

Perdona por la insistencia pero creo que el asunto sigue siendo el mismo: cuando renombras un campo las tablas ya no se llaman igual (la concatenación implicita o automática tiene lugar siempre que tanto el número de los campos como el nombre de los mismos es idéntico en cualesquiera dos tablas del modelo de datos, independientemente de cuando se carguen en el script).

Otra opción quizá más simple sea eliminar la tabla de memoria después de cargarla y grabarla:

DimStartAssig:

SQL SELECT FactAssignment.StartDateId,

    DimDate.Day,

    DimDate.Month,

    DimDate.MonthName,

    DimDate.Year,

    DimDate.Quarter,

    DimDate.Semester

FROM FactAssignment

INNER JOIN DimDate

ON FactAssignment.StartDateId = DimDate.DateId;

STORE DimStartAssig

INTO DimDateAssigStart.qvd (qvd);

DROP TABLE DimStartAssig;

// Nueva carga de tabla aquí.

Espero que tenga sentido.

Miguel

View solution in original post

5 Replies
Miguel_Angel_Baeyens

Hola,

Disculpa pero no me acaba de quedar claro el problema. Sí puedo decirte que si estás haciendo varias cargas seguidas de la misma idéntica tabla, sin haber eliminado la anterior, QlikView la concatena automáticamente a la anterior, y de ahí que el STORE te de error. ¿Es esto lo que te está sucediendo?

Por otro lado, no veo que utilices la sentencia LOAD. Aunque no es obligatorio (de hecho QlikView lo hace por ti hasta cierto punto), la sentencia SQL es lo que envías a la base de datos, pero no lo que colocas en memoria de QlikView. Para ello existe la sentencia LOAD donde puedes renombrar, crear nuevos campos, crear condiciones respecto de los valores de campo existentes, agregar, etc.

Espero que te sirva de ayuda.

Miguel

Not applicable
Author

Vamos a ver. El proble pues estar en que, si cargas varias tablas con la misma estructura, es decir, los mismos campos, te va a cargar los datos en la primera de ellas. No va a crear las tablas que has definido en tu script.

Te pongo un ejemplo:

Si cargas esto

a1:

LOAD * INLINE [

    a, b

    1, 1

];

a2:

LOAD * INLINE [

    a, b

    2, 2

];

Verás que solo tienes la tabla "a1" y no la "a2" pero en la "a1" estan todos los registros de la "a1" y de la "a2". Por tanto si despues de cada carga intentara almacenar en un qvd la tabla, solo crearia un qvd para la primera y me daria error la segunda.

En fin, no se si esto soluciona el problema, pero...

Not applicable
Author

Si, el STORE es lo que me da error, pero no concatena nada, porque carga la primera Start y la primera End y luego da error y no las carga, y como puse más arriba, poniendo un alias en la sentencia sql las carga todas como yo quiero, en diferentes tablas.

Sobre la sentencia LOAD, es lo que pongo en el problema, eso lo hago en otro archivo Qlikview donde renombro y soluciono las referencias circulares y todo eso, te dejo una de muestra de lo que hago en ese otro archivo, la misma DimEmployee que puse en el primer post:

LOAD EmployeeId,

    GlobalEmployeeId,

    LocalEmployeeNumber,

    eMailUse,

    eMail,

    FirstName & ' ' & LastName as Name,

    GenderId,

    AgeRangeId,

    BirthDate,

    Login,

    Address,

    AddressAdditInfo1,

    AddressAdditInfo2,

    City,

    StateCode,

    PostalCode,

    Title,

    JobName,

    PeopleReviewManager

FROM DimEmployee.qvd (QVD);

De esa forma, la cargo y la modifico en el archivo Qlikview donde crearé mi reporte, mi problema es netamente en la carga de datos a los archivos .qvd, los cuales son usados de esta forma que pongo acá para crear el reporte.

¿Me explico un poco mejor ahora?, gracias por tu ayuda.

Miguel_Angel_Baeyens

Hola,

Perdona por la insistencia pero creo que el asunto sigue siendo el mismo: cuando renombras un campo las tablas ya no se llaman igual (la concatenación implicita o automática tiene lugar siempre que tanto el número de los campos como el nombre de los mismos es idéntico en cualesquiera dos tablas del modelo de datos, independientemente de cuando se carguen en el script).

Otra opción quizá más simple sea eliminar la tabla de memoria después de cargarla y grabarla:

DimStartAssig:

SQL SELECT FactAssignment.StartDateId,

    DimDate.Day,

    DimDate.Month,

    DimDate.MonthName,

    DimDate.Year,

    DimDate.Quarter,

    DimDate.Semester

FROM FactAssignment

INNER JOIN DimDate

ON FactAssignment.StartDateId = DimDate.DateId;

STORE DimStartAssig

INTO DimDateAssigStart.qvd (qvd);

DROP TABLE DimStartAssig;

// Nueva carga de tabla aquí.

Espero que tenga sentido.

Miguel

Not applicable
Author

Gracias Enrique y Miguel Ángel por su respuestas.

Tienes razón Enrique, esa es la lógica con que estaba operando Qlikview, por ende como dices, no iba a cargar jamás la segunda tabla.

Y Miguel Ángel, eso era justamente lo que necesitaba, dice el DROP de las tablas y las cargo sin problema, y en mi archivo donde construyo los reportes carga los datos sin problema, de esta forma:

DimStartAssig:

LOAD StartDateId as AssigStartId,

    Day as AssigStartDay,

    Month as AssigStartMonth,

    MonthName as AssigStartMonthName,

    Year as AssigStartYear,

    Quarter as AssigStartQuarter,

    Semester as AssigStartSemester

FROM DimDateAssigStart.qvd (QVD);

Gracias a ambos por sus respuestas