Qlik Community

QlikView Scripting

Discussion Board for collaboration on QlikView Scripting.

Announcements

Breathe easy -- you now have more time to plan your next steps with Qlik!
QlikView 11.2 Extended Support is now valid through December 31, 2020. Click here for more information.

Not applicable

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Tengo una select:

SELECT a1.idCliente, datepart(year, a1.Fecha) as Año, datepart(month, a1.Fecha) as Mes, count(*) as NumAlb

FROM Albaranes a1

GROUP BY a1.Cliente, datepart(year, a1.Fecha), datepart(month, a1.Fecha)

Ahora quería clasificar estos clientes segun frecuencia:

Frecuencia:

LOAD * INLINE [

     Desde, Hasta, Frecuencia

     0,1, NuevaCompra

     2,4, Esporadico

     5,10, Ocasional

     11,20, Frecuente

     21,9999, MuyFrecuente

]

Y yo he intentado pero no lo consigo de ninguna manera esto:

   LOAD count(idCliente),

          CASE

               WHEN NumAlb < 1 THEN NuevaCompra

               WHEN NumAlb < 5 THEN Esporadico

               WHEN NumAlb < 10 THEN Ocasional

               WHEN NumAlb < 20 THEN Frecuente

               ELSE 'MuyFrecuente'

          END as Frecuencia

    Resident Albaranes

    Group By Frecuencia

1 Solution

Accepted Solutions
Not applicable

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Gracias a todos por vuestra ayuda Miguel ha estado cerca, pero no me explique bien... la solución era:

FrecuenciaClientes:
LOAD *,
     If(NumAlb < 1, 'Nueva Compra',
      If(NumAlb < 5, 'Esporadico',
       If(NumAlb < 10, 'Ocasional',
        If(NumAlb < 20, 'Frecuente',
         'Muy Frecuente'
     )))) AS Frecuencia;

SELECT a1.idCliente, datepart(year, a1.Fecha) as Año, datepart(month, a1.Fecha) as Mes, count(*) as NumAlb

FROM Albaranes a1

GROUP BY a1.Cliente, datepart(year, a1.Fecha), datepart(month, a1.Fecha)

Como el campo lo calculaba en la select sólo necesitaba añadir el filtro antes de la misma.

6 Replies

Re: Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Hola,

Hay varias maneras. La primera es la más básica y posiblemente sea suficiente, que es utilizando un If():

FrecuenciaClientes:

LOAD *,

     If(NumAlb < 1, 'Nueva Compra',

      If(NumAlb < 5, 'Esporadico',

       If(NumAlb < 10, 'Ocasional',

        If(NumAlb < 20, 'Frecuente',

         'Muy Frecuente'

     )))) AS Frecuencia;

LOAD Count(idCliente) AS NumAlb

RESIDENT Albaranes

GROUP BY Frecuencia;

La segunda es haciendo uso de la función IntervalMatch() como puedes ver en este ejemplo o este otro ejemplo.

Espero que alguna de las dos te sirva.

Miguel

Not applicable

Re: Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Gracias Miguel Angel por responder tan rápido,

He probado tu código y me da error

FrecuenciaClientes:
LOAD *,
     If(NumAlb < 1, 'Nueva Compra',
      If(NumAlb < 5, 'Esporadico',
       If(NumAlb < 10, 'Ocasional',
        If(NumAlb < 20, 'Frecuente',
         'Muy Frecuente'
     )))) AS Frecuencia;
LOAD Count(idCliente) AS NumCli

RESIDENT Albaranes
GROUP BY Frecuencia;

Error:

Campo no encontrado - <NumAlb>

LOAD Count(IdCliente) AS NumCli

RESIDENT Albaranes

GROUP BY Frecuencia

chematos
Valued Contributor II

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Hola Jose,

Fíjate que pusiste LOAD Count(IdCliente) AS NumCli en lugar de LOAD Count(IdCliente) AS NumAlb

Saludos,

Chema

Not applicable

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Me había dado cuenta, pero el campo que tengo q filtrar por frecuencia es NumAlb que lo cuento en la select.

SELECT a1.idCliente, datepart(year, a1.Fecha) as Año, datepart(month, a1.Fecha) as Mes, count(*) as NumAlb

La nueva tabla debe contener:

count(IdCliente) , Frecuencia

Y para esto debo "transformar" el campo count(*) as NumAlb

chematos
Valued Contributor II

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Yo primero crearía la tabla Albaranes con la select que tienes definida renombrando los campos como quieras:

Albaranes:

Load *

SELECT a1.idCliente, datepart(year, a1.Fecha) as Año, datepart(month, a1.Fecha) as Mes, count(*) as NumAlb

FROM Albaranes a1

GROUP BY a1.Cliente, datepart(year, a1.Fecha), datepart(month, a1.Fecha);

Y una vez conseguidos los NumAlb por cliente, crearía la tabla de frecuencias:

FrecuenciaClientes:
LOAD *,
     If(NumAlb < 1, 'Nueva Compra',
      If(NumAlb < 5, 'Esporadico',
       If(NumAlb < 10, 'Ocasional',
        If(NumAlb < 20, 'Frecuente',
         'Muy Frecuente'
     )))) AS Frecuencia,
Count(idCliente) AS NumAlb
RESIDENT Albaranes
GROUP BY Frecuencia;

Dime si te funciona.

Not applicable

Como utilizar LOAD para contar y clasificar clientes segun numero de albaranes?

Gracias a todos por vuestra ayuda Miguel ha estado cerca, pero no me explique bien... la solución era:

FrecuenciaClientes:
LOAD *,
     If(NumAlb < 1, 'Nueva Compra',
      If(NumAlb < 5, 'Esporadico',
       If(NumAlb < 10, 'Ocasional',
        If(NumAlb < 20, 'Frecuente',
         'Muy Frecuente'
     )))) AS Frecuencia;

SELECT a1.idCliente, datepart(year, a1.Fecha) as Año, datepart(month, a1.Fecha) as Mes, count(*) as NumAlb

FROM Albaranes a1

GROUP BY a1.Cliente, datepart(year, a1.Fecha), datepart(month, a1.Fecha)

Como el campo lo calculaba en la select sólo necesitaba añadir el filtro antes de la misma.