Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Agrupar campos para tener calendario

Hola a todos.

Tengo 3 tablas(facturas, albaranes cabecera y albaranes detalle) en las que para sacar una fecha de cada uno de ellos hay 3 campos: ejercicio, mes y día. Necesitaría agrupar estos 3 campos de cada tabla y relacionarlos entre si para no crear un cuadro lista para cada tabla. Como lo haría

Gracias de antemano.

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Vale,

Creo que mis ejemplos han producido más confusión que claridad. El script debería tener la siguiente forma

ALBARAN_DETALLE:

LOAD
B2GETD AS CARGO_ABONO,
B2CLCG AS CODIGO_CLIENTE_ENTREGA,
B2CFCF AS REFERENCIA_FISCAL,
// B2CLCF AS CODIGO_CLIENTE_FACTURA,
// B2CFFF AS CIF_FACTURA,
B2ARCG AS CODIGO_ARTICULO,
B2ASCG AS CODIGO_SUBARTICULO,
B2FMCG AS CODIGO_FAMILIA,
B2FMSB AS CODIGO_SUBFAMILIA,
B2GEIM AS IMPORTE_ALBARAN,
CODIGO,
MakeDate(B2GEAN,B2GEDI) AS FECHA; // Ambos B2GEAN y B2GEDI deben ser valores numéricos (año, mes)

SQL SELECT *
FROM S65FCEEB.APLREMGEFI.B2;

//FACTURAS REMGEFI

FACTURAS:
LOAD
FVCLCF AS CODIGO_CLIENTE_FACTURA,
FVCFFF AS CIF_FACTURA,
FVGEST AS IMPORTE_FACTURA;
CONCATENATE LOAD CODIGO,
MAKEDATE(FVCOEJ,FVGEME) AS FECHA; // Igual que en la tabla anterior deben ser ambos valores numéricos (año, mes)
SQL

SELECT *
FROM S65FCEEB.APLREMGEFI.FV;

Espero que esto te sirva más.

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

View solution in original post

12 Replies
Miguel_Angel_Baeyens

Hola Gabriel,

Tal como lo veo, lo mejor sería crear una tabla de hechos que concatene las tres a las que te refieres, de las cuales obtengas un sólo campo de fecha que puedas utilizar en el calendario maestro.

Simplificándolo mucho, el modelo podría quedar como

Fact:

LOAD Codigo,

     MakeDate(Ejercicio, Mes, Dia) AS Fecha

INLINE [

Codigo, Ejercicio, Mes, Dia

F1000, 2010, 2, 3

F2000, 2010, 3, 13

];

Albaran:

CONCATENATE LOAD Codigo,

     MakeDate(Ejercicio, Mes, Dia) AS Fecha

INLINE [

Codigo, Ejercicio, Mes, Dia

A1000, 2010, 2, 3

A2000, 2010, 3, 13

];

A partir de aquí, el resultado será una sola tabla que contendrá dos campos, Codigo y Fecha. Con la fecha puedes crear un calendario maestro que utilice mes, trimestre, año, etc. La seleccion en estos campos afectará por igual a albaranes y facturas.

Espero que te sirva.

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

Not applicable
Author

Gracias por tu respuesta, lo probaré, pero tengo una duda: éste concatena también el resto de los campos de las tablas?, por que le asignas ese valor a los registros del campo codigo, es aleatorio o tienen algún criterio?.

No me haría falta crear un calendario maestro ya que solo quiero consultar las ventas por mes y año.

Miguel_Angel_Baeyens

Hola,

El ejemplo es lo más simple, y solo tiene dos campos. Podría tener veinte, treinta o los que fueran. Cuando concatenas una tabla a la anterior, ambas pueden tener cualesquiera número y nombres de campo, y el resultado siempre será una tabla que englobe ambas solo que, si un campo no existe en alguna de ellas, se creará en todas con valor nulo donde no proceda.

Esto supone que QlikView tiene que crear la misma estructura de campos para cada tabla, (ya que el resultado final es una sola tabla) y dependiendo del volumen de datos, esto puede demorar mucho la carga. Si ya has preparado el script de manera que todas las tablas contienen los mismos nombres de campo, la tarea es mucho más rápida.

En cualquier caso, los campos por los cuales quieras consultar con un sólo cuadro de lista (mes o año en este ejemplo) deberán llamarse igual en todas las tablas, de lo contrario sus valores no se almacenarán en el mismo campo.

Espero que sirva.

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

Not applicable
Author

Ok, gracias por tu ayuda. Ya tengo el concepto, lo probaré en otro momento ya que ahora tengo que encontrar la manera de hacer una expresión bastante complicada para mi nivel, ya te contaré.

Muchísimas gracias

Not applicable
Author

Hola.

No consigo que funcione, se que hago algo mal pero no se que es.

¿Puede ser porque los campos se llaman de distinta forma?, Hay otra manera de intentarlo?

Miguel_Angel_Baeyens

Hola Gabriel,

En cualquier LOAD puedes hacer que los campos se llamen igual. En tu caso, los campos correspondientes a las dimensiones Mes y Año deben llamarse igual en todas las tablas, y contener valores formateados igual ("02", "febrero" y "2" son los tres valores distintos).

Seguramente necesitas renombrar esos campos en la parte del LOAD para que QlikView entienda que se refieren a lo mismo.

Un saludo.

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

Not applicable
Author

Si lo se, pero no me sale, verás, cuando ejecuto el script me da error en las dos tablas y que el primer campo de cada una no existe.

Te dejo una copia a ver si los ves:

ALBARAN_DETALLE:

LOAD
B2GETD AS CARGO_ABONO,
B2CLCG AS CODIGO_CLIENTE_ENTREGA,
B2CFCF AS REFERENCIA_FISCAL,
// B2CLCF AS CODIGO_CLIENTE_FACTURA,
// B2CFFF AS CIF_FACTURA,
B2ARCG AS CODIGO_ARTICULO,
B2ASCG AS CODIGO_SUBARTICULO,
B2FMCG AS CODIGO_FAMILIA,
B2FMSB AS CODIGO_SUBFAMILIA,
B2GEIM AS IMPORTE_ALBARAN,
CODIGO,
MakeDate(B2GEAN,B2GEDI) AS FECHA
Inline [
CODIGO,B2GEAN,B2GEDI
A1000,2011,ENERO
A2000,2011,FEBRERO
A3000,2011,MARZO
A4000,2011,ABRIL
A5000,2011,MAYO
A6000,2011,JUNIO
A7000,2011,JULIO
A8000,2011,AGOSTO
]
;
SQL SELECT *
FROM S65FCEEB.APLREMGEFI.B2;

//FACTURAS REMGEFI

FACTURAS:
LOAD
FVCLCF AS CODIGO_CLIENTE_FACTURA,
FVCFFF AS CIF_FACTURA,
FVGEST AS IMPORTE_FACTURA;
CONCATENATE LOAD CODIGO,
MAKEDATE(FVCOEJ,FVGEME) AS FECHA
INLINE [
CODIGO,EJERCICIO,MES
F1000,2011,ENERO
F2000,2011,FEBRERO
F3000,2011,MARZO
F4000,2011,ABRIL
F5000,2011,MAYO
F6000,2011,JUNIO
F7000,2011,JULIO
F8000,2011,AGOSTO
]
;
SQL

SELECT *
FROM S65FCEEB.APLREMGEFI.FV;

Gracias Miguel Angel

Miguel_Angel_Baeyens

Vale,

Creo que mis ejemplos han producido más confusión que claridad. El script debería tener la siguiente forma

ALBARAN_DETALLE:

LOAD
B2GETD AS CARGO_ABONO,
B2CLCG AS CODIGO_CLIENTE_ENTREGA,
B2CFCF AS REFERENCIA_FISCAL,
// B2CLCF AS CODIGO_CLIENTE_FACTURA,
// B2CFFF AS CIF_FACTURA,
B2ARCG AS CODIGO_ARTICULO,
B2ASCG AS CODIGO_SUBARTICULO,
B2FMCG AS CODIGO_FAMILIA,
B2FMSB AS CODIGO_SUBFAMILIA,
B2GEIM AS IMPORTE_ALBARAN,
CODIGO,
MakeDate(B2GEAN,B2GEDI) AS FECHA; // Ambos B2GEAN y B2GEDI deben ser valores numéricos (año, mes)

SQL SELECT *
FROM S65FCEEB.APLREMGEFI.B2;

//FACTURAS REMGEFI

FACTURAS:
LOAD
FVCLCF AS CODIGO_CLIENTE_FACTURA,
FVCFFF AS CIF_FACTURA,
FVGEST AS IMPORTE_FACTURA;
CONCATENATE LOAD CODIGO,
MAKEDATE(FVCOEJ,FVGEME) AS FECHA; // Igual que en la tabla anterior deben ser ambos valores numéricos (año, mes)
SQL

SELECT *
FROM S65FCEEB.APLREMGEFI.FV;

Espero que esto te sirva más.

Miguel Angel Baeyens

BI Consultant

Comex Grupo Ibérica

Not applicable
Author

Gracias Miguel Angel.

Ya he conseguido agrupar la fecha las tabla y relacionarlas entre si por este mismo campo.

He suprimido el concatenate y el load codigo, con el makedate ya me ha hecho todo, agrupar y relacionar. Ahora con el campo fecha intentaré crear un calendario maestro para elegir mes o año a gusto.

Gracias por tu apoyo y saber hacer