Skip to main content
Announcements
Get Ready. A New Qlik Learning Experience is Coming February 17! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
luis_bisval
Contributor III
Contributor III

Set Analisys (Menor fecha)

Buen día.

Estimados, espero estén muy bien, acudo a ustedes ya que no he podido conseguir el resultado que busco. Deseo obtener la suma de las cantidades de unidades de las Guías (Cant_Guia) de la menor fecha de despacho de una nota de venta (NoNota), actualmente estoy usando la siguiente fórmula; Sum({<Fecha_Despacho={'$(=Min(Fecha_Despacho))'}>}Cant_Guia), pero de esta manera obtengo la menor fecha del todo el grupo de datos (03-01-2018).

Agrego un pequeño grupo de datos.

 

NoNotaCant_NVNoGuiaCant_GuiaSKUFecha_Despacho
22211313619481ST700403-01-2018
22211563622786NF000004-01-2018
22211513622781GM000004-01-2018
22211513622781GM000004-01-2018
22235773622767ST700404-01-2018
22259893625839GM000003-01-2018
22259853625835PI700103-01-2018
22259853625835PB300103-01-2018
22259853625835PB400103-01-2018
22259853625835PB500103-01-2018
22259853625835TF401103-01-2018
22259853625835TF500703-01-2018
22259853625835PB120103-01-2018
22259853625835PB300103-01-2018
22259823625832PI705103-01-2018
22259823625832PB900103-01-2018
22259823625832SA500103-01-2018
22259813625831GM000003-01-2018
22259813625831PB500103-01-2018
22259873625837PI710203-01-2018
22259873625837ST510003-01-2018
222647036297668PI710111-01-2018
222647196362976196PB400311-01-2018
222647196362976196PB200111-01-2018
222647196364967128PI710131-01-2018
22299133627263DN500309-01-2018
22299133627263NS570309-01-2018
22299133627263PI810109-01-2018
22299133627263AC600009-01-2018
22299133627263PB300109-01-2018
22299133627263PB400109-01-2018
22299133627263PB500109-01-2018
22299133627263PI100109-01-2018
22299133627263PI200109-01-2018
22299133627263PI900109-01-2018
22299133627263SA600109-01-2018
22299133627263SA100109-01-2018
22299133627263SA190109-01-2018
22299133627263PB200109-01-2018
22308523627272PI100109-01-2018
22329973632077PI710212-01-2018
22330253630745OR530311-01-2018
2234244636380746NS560319-01-2018
22356983635718ST700430-01-2018
22370113634921KP560317-01-2018
22373623636832ST700422-01-2018
2238931036380810ST721019-01-2018
22404843642044ST700424-01-2018
2243571036444210PB400125-01-2018
2243571036444210PB500125-01-2018
22468853645905WL700426-01-2018
22468853645905TF401126-01-2018
22468913645891WL700426-01-2018
22468913645891TF401126-01-2018
22469263647146PB200130-01-2018
22514113648561PB250130-01-2018
22525163651156PI710131-01-2018
22525163651156PI710231-01-2018
22525163651156PB400331-01-2018
22525163651156PB200131-01-2018
22525153651155PI700131-01-2018
22525153651155PB400131-01-2018
22525153651155PB500131-01-2018
22525153651155TF401131-01-2018
22525153651155PB200131-01-2018
22525153651155PB410131-01-2018
22525143651153PB810131-01-2018
22525143651154PB900131-01-2018
22525143651154PB700031-01-2018
22525143651154PB140131-01-2018
22525143651154PB190131-01-2018
22525113651151PI700131-01-2018
22525113651151ST470031-01-2018
22525113651151PB500131-01-2018
22525113651151TF401131-01-2018
22525113651151SA210131-01-2018
2252511 021PB6001007
2252542365081220DN530340031-01-2018
2252542365081260PB200100331-01-2018
225254123650811220PB220100531-01-2018
225254123650811221PB600100931-01-2018
2252541365081120GR500340031-01-2018
2252541365081121GM000030231-01-2018
225254153650811521PB500110031-01-2018
225254143650811421PB400100031-01-2018

Agradezco de antemano su colaboración.

1 Solution

Accepted Solutions
hector_munoz
Specialist
Specialist

Hola Luis,

Yo estas cosas las suelo solucionar añadiendo un campo "flag" a la tabla (en mi ejemplo TABLA_HECHOS) que contiene los campos 'NoNota', 'Cant_Guia' y 'Fecha_Despacho' (entre otros) para "señalar" aquellos registros que me convengan; en tu caso los de la fecha mínima para cada valor distinto de 'NoNota'.

En tu caso sería algo así como:

LEFT JOIN     (TABLA_HECHOS)

LOAD             NoNota                             AS NoNota,

                       1                                       AS Flag_Fecha_Minima_NoNota,

                       Min(Fecha_Despacho)     AS Fecha_Despacho

RESIDENT     TABLA_HECHOS

GROUP BY    NoNota,

                       1;


De esta forma voy a añadir el campo 'Flag_Fecha_Minima_NoNota' a la tabla TABLA_HECHOS con el valor 1 para aquellos registros que se correspondan con la fecha mínima de cada NoNota (campo por el que agrupo) y luego en la expresión es tan sencillo como:


Sum({<Flag_Fecha_Minima_NoNota={1}>} Cant_Guia)


Espero haberme explicado bien y que te sirva de ayuda...


Saludos,

H

View solution in original post

8 Replies
hector_munoz
Specialist
Specialist

Hola Luis,

Yo estas cosas las suelo solucionar añadiendo un campo "flag" a la tabla (en mi ejemplo TABLA_HECHOS) que contiene los campos 'NoNota', 'Cant_Guia' y 'Fecha_Despacho' (entre otros) para "señalar" aquellos registros que me convengan; en tu caso los de la fecha mínima para cada valor distinto de 'NoNota'.

En tu caso sería algo así como:

LEFT JOIN     (TABLA_HECHOS)

LOAD             NoNota                             AS NoNota,

                       1                                       AS Flag_Fecha_Minima_NoNota,

                       Min(Fecha_Despacho)     AS Fecha_Despacho

RESIDENT     TABLA_HECHOS

GROUP BY    NoNota,

                       1;


De esta forma voy a añadir el campo 'Flag_Fecha_Minima_NoNota' a la tabla TABLA_HECHOS con el valor 1 para aquellos registros que se correspondan con la fecha mínima de cada NoNota (campo por el que agrupo) y luego en la expresión es tan sencillo como:


Sum({<Flag_Fecha_Minima_NoNota={1}>} Cant_Guia)


Espero haberme explicado bien y que te sirva de ayuda...


Saludos,

H

luis_bisval
Contributor III
Contributor III
Author

Excelente, Muchas gracias Héctor, estaba resolviendo con Aggr, pero me diste la idea para solucionar este tipo de inconveniente, nuevamente muchas gracias.

hector_munoz
Specialist
Specialist

De nada Luis... Hacer LEFT JOINs (yo lo llamo empotrar) en mi caso es algo muy común y que me saca de muchos apuros similares a este que tenías tú... Creo que no pasa un día sin que "empotre"... Saludos!

luis_bisval
Contributor III
Contributor III
Author

Buen día Héctor. te escribo porque me está pasando algo similar, intente solventarlo con el left join pero no lo consigo.

El punto es que debo calcular el servicio primer despacho, el resultado es binario, si o no, 0 o 1 etc..., los parámetros para obtenerlo es lo que me complica, ya que debo revisar si la cantidad pedida (Cant_NV) en la nota de venta (NoNota) se hizo en un solo despacho sin importar la cantidad de Guias (NoGuia), siempre y cuando la fecha de despacho (Fecha_Despacho) sea la misma.

En la siguiente data se dan todos los posibles casos.

   

NoNotaSkuCant_NVNoGuiaCant_GuiaFecha_DespachoObservaciones
221284AZ10030101281451002-01-2018Ningún problema, una sola guía y una sola fecha de despacho; 1
VE50034211281452102-01-2018
VE560349128145902-01-2018
221408CX1611163618136 Sin fecha de despacho; 0
221703CX01112903625869009-01-2018Se complica identificarla

2 No de Guías, una sola fecha de espacho, pero no se logró despachar todos los Sku; 0
CX15111703625877009-01-2018
CX30171100 0
MZ10112903625869009-01-2018
222272CI50030103622301004-01-2018Se complica identificarla

2 Guías y una misma fecha de despacho; 1
CX10071203622302004-01-2018
TF50071103622291004-01-2018


De antemano muchas gracias.

Igualmente seguiré buscando la solución.

hector_munoz
Specialist
Specialist

Hola Luis,

A ver si te he entendido y con esto te sirve...

Pasos:

En una tabla auxiliar cargas: NoNota, un conteo de sus fechas distintas en un campo y un conteo de sus fechas distintas informadas en otro campo. Algo así como:


TMP_01:

LOAD     NoNota                                                      AS [TMP_01 NoNota],

         Count(DISTINCT Fecha_Despacho)                              AS [TMP_01 Fechas Dist],

         Count(DISTINCT If(Len(Fecha_Despacho) > 0, Fecha_Despacho)) AS [TMP_01 Fechas Dist Inf]

RESIDENT

GROUP BY NoNota;


Luego, tendrías que quedarte con aquellas NoNota que tengan solo una fecha distinta y que además esté informada. Entonces haces un LEFT JOIN contra la tabla original con solo aquellas NoNota que lo cumplan y les pones un flag a 1. Algo así como:


LEFT JOIN (TABLA_HECHOS)

LOAD      [TMP_01 NoNota]     AS NoNota,

          1                   AS Flag

RESIDENT  TMP_01

WHERE     [TMP_01 Fechas Dist] = 1 AND      // Solo las NoNota con 1 fecha distinta y

          [TMP_01 Fechas Dist Inf] = 1;     // que la fecha no sea nula


Espero haberte entendido bien y que te sirva...


Saludos,

H

luis_bisval
Contributor III
Contributor III
Author

Hola Hector, gracias por tu respuesta, el único cambio que hice fue el siguiete.

Count(DISTINCT If(IsNull(Fecha_Despacho),0,1)) AS [TMP_01 Fechas Dist Inf] // Le quité el Len y coloque el IsNull, de esta forma me funcionó correctamente.

De verdad que no usaba lo que tu llamas empotrar, voy a tener que incorporarlo ya que facilita muchas cosas y mantiene en buen funcionamiento el QV.

Muchas Gracias.

hector_munoz
Specialist
Specialist

Me alegro Luis! A empotrar!!!

luis_bisval
Contributor III
Contributor III
Author

Así es!