Q-Expert · Casos reales · Q-Expert DistributorsRead in English
Episodio2

¿De qué archivo viene esta fila?

Manual paso a paso

Las capturas muestran Q-Expert en inglés; la interfaz en español llegará pronto.

01La pregunta de negocio

Finanzas concilia cada mes contra su propio archivo. Cada fila de ventas debe decir de qué archivo viene, y el equipo quiere el número de filas leídas escrito en el log de recarga.

02Antes de empezar

03Paso a paso

  1. 1

    Quita la carga con comodín

    El RAW con comodín tmp_SalesRaw lee los tres archivos como una sola tabla y olvida de qué archivo viene cada fila. Bórralo con la × del nodo. El episodio vuelve a construir la misma tabla, ahora con un loop.

    Quita la carga con comodín
    Figura 2.1 — Quita la carga con comodín
  2. 2

    Agrega una tabla vacía donde juntar

    Agrega un nodo INLINE desde la barra de herramientas y llámalo tmp_SalesRaw. En su grilla, dale una columna, Dummy, sin filas, y marca la opción de solo estructura: el script escribe WHERE 1=0. Cada vuelta del loop le agrega un mes a esta tabla.

    Agrega una tabla vacía donde juntar
    Figura 2.2 — Agrega una tabla vacía donde juntar
  3. 3

    Agrega el loop sobre la lista de archivos

    Agrega un nodo LOOP después de la tabla inline. Tipo de loop FOR EACH … IN FileList(), variable vFile, ruta de FileList $(vPathRaw)Sales_*.csv: la misma variable de carpeta del episodio 1.

    Agrega el loop sobre la lista de archivos
    Figura 2.3 — Agrega el loop sobre la lista de archivos
  4. 4

    Dentro del loop, lee un archivo y agrégalo

    Haz clic en Enter loop body y luego:

    • Arrastra Sales_2025_01.csv de la Library al canvas del cuerpo para tomar sus 11 columnas.
    • En la pestaña Config, marca Source by variable y escribe $(vFile).
    • Pon CONCATENATE INTO en tmp_SalesRaw.
    Dentro del loop, lee un archivo y agrégalo
    Figura 2.4 — Dentro del loop, lee un archivo y agrégalo
  5. 5

    Guarda el nombre del archivo en cada fila

    En la pestaña Expressions, abre el Expression Builder y agrega FileName() como SourceFile. Cada fila lleva ahora el nombre del archivo del que se leyó.

    Guarda el nombre del archivo en cada fila
    Figura 2.5 — Guarda el nombre del archivo en cada fila
  6. 6

    Limpia y cuenta

    Haz clic en Exit loop. Después del loop agrega:

    • Un nodo DROP para el campo Dummy de tmp_SalesRaw.
    • Un nodo LET/SET con LET vSalesRawRows = NoOfRows('tmp_SalesRaw').
    • Un nodo TRACE con Sales rows read from the monthly files: $(vSalesRawRows).
    Limpia y cuenta
    Figura 2.6 — Limpia y cuenta
  7. 7

    Genera el script

    Haz clic en Generate Syntax y abre Flow_1: FOR EACH vFile IN FileList(…), el LOAD con CONCATENATE y FileName() AS SourceFile, NEXT vFile, y luego el DROP FIELD y el TRACE.

    Genera el script
    Figura 2.7 — Genera el script

04Revisa tu resultado

_Main

Se pega en Qlik

Este es el único script que pegas en Qlik Sense: abre el Editor de carga de datos de la app, reemplaza su contenido por este y recarga. Cada línea $(MUST_INCLUDE=…) lee en su lugar uno de los archivos de abajo, así el resto del modelo nunca entra al editor.

Ver script · 43 líneas
/*----------------------------------------------------------------------------------------
	Description [MAIN]:
		
	-------------------------------------------------------------------------------------
	Author:	The Q-Fábrica team - 
	Date:	[2026-11-02]
	-------------------------------------------------------------------------------------
	Changes
	-------------------------------------------------------------------------------------
	Author		Date		Detail
	-------------------------------------------------------------------------------------

	-------------------------------------------------------------------------------------
	Copyright © Q-Expert Distributors.
	Q-Expert Qlik Developer Framework. www.qfabrica.com
----------------------------------------------------------------------------------------*/

SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$ #,##0.00;-$ #,##0.00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='YYYY-MM-DD';
SET TimestampFormat='YYYY-MM-DD hh:mm:ss';
SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET LongMonthNames='January;February;March;April;May;June;July;August;September;October;November;December';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
SET LongDayNames='Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday';
SET FirstWeekDay=0;
SET BrokenWeeks=1;
SET ReferenceDay=4;
SET FirstMonthOfYear=1;

LET vExecutionDate = Timestamp(Now(), 'YYYY-MM-DD hh:mm:ss');

SET vTxfPath  = 'lib://QXDistributors/Transform/';
SET vPathRaw = 'lib://QXDistributors/';
SET vEnvironment = 'PROD';   // PROD, QA or DEV
SET vBaseCurrency = 'COP';   // Currency every amount is converted to
SET vPathModel = 'lib://QXDistributors/Model/';   // The model QVDs the apps load

$(MUST_INCLUDE=$(vTxfPath)_QVS/Flow_1.qvs);

Flow_1.qvs

Archivo · lo lee MUST_INCLUDE

No se pega: se guarda como archivo. En la pestaña Flow_1 de Generate Syntax, Export descarga Flow_1.qvs (Deploy escribe todas las pestañas en una carpeta de una vez). Ponlo en lib://QXDistributors/Transform/_QVS/Flow_1.qvs, la carpeta Transform/_QVS dentro de tu carpeta QXDistributors. Si el archivo no está, la recarga se detiene con un error: para eso existe MUST_INCLUDE.

Ver script · 53 líneas
/*----------------------------------------------------------------------------------------
	Description [Flow_1]:
		
	-------------------------------------------------------------------------------------
	Author:	The Q-Fábrica team - 
	Date:	[2026-11-02]
	-------------------------------------------------------------------------------------
	Changes
	-------------------------------------------------------------------------------------
	Author		Date		Detail
	-------------------------------------------------------------------------------------

	-------------------------------------------------------------------------------------
	Copyright © Q-Expert Distributors.
	Q-Expert Qlik Developer Framework. www.qfabrica.com
----------------------------------------------------------------------------------------*/

// -------------------------------------------------------------------------------------------------
// Empty table with 1 column (WHERE 1=0), schema only.
[tmp_SalesRaw]:
    LOAD * INLINE [
    "Dummy"
    ] WHERE 1=0;

// -------------------------------------------------------------------------------------------------
// Loop FOR EACH … IN FileList() over $(vFile).
FOR EACH vFile IN FileList('$(vPathRaw)Sales_*.csv')

    // -------------------------------------------------------------------------------------------------
    // Raw load from $(vFile), concatenated into [tmp_SalesRaw].
    CONCATENATE ([tmp_SalesRaw])
    LOAD
        SaleID,
        SaleDate,
        CustomerID,
        ProductID,
        SalespersonID,
        BranchID,
        Quantity,
        UnitPrice,
        DiscountPct,
        Currency,
        Channel,
        FileName()                                                                       AS SourceFile
    FROM [$(vFile)] (txt, utf8, delimiter is ',', embedded labels, msq);

NEXT vFile;

DROP FIELD Dummy FROM [tmp_SalesRaw];

LET vSalesRawRows = NoOfRows('tmp_SalesRaw');

TRACE Sales rows read from the monthly files: $(vSalesRawRows);

05Por qué se hace así

06Lo que sigue

Episodio 3: los datos maestros llegan sucios.

Antes de modelar

Q-Explorator es la herramienta de escritorio del equipo de Q-Fábrica para explorar archivos QVD, CSV, Excel y Parquet, y para convertir archivos CSV, TXT y Excel en QVD. Abre en ella los archivos de cada episodio para ver primero su contenido y su calidad.

Conoce Q-Explorator