Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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)
SQLSELECT *
FROM S65FCEEB.APLREMGEFI.FV;
Espero que esto te sirva más.
BI Consultant
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.
BI Consultant
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.
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.
BI Consultant
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
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?
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.
BI Consultant
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 SELECT *
FROM S65FCEEB.APLREMGEFI.FV;
Gracias Miguel Angel
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)
SQLSELECT *
FROM S65FCEEB.APLREMGEFI.FV;
Espero que esto te sirva más.
BI Consultant
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