Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Estimados, busco más ayuda.
Cargo una planilla Excel con distintos datos de facturación. Los pagos de las facturas pueden realizarse en dos instancias: dentro del plazo o por ejecución (fuera de plazo). Entre otros, esto deja tres campos de fecha (fecha de factura o F1; fecha de pago en plazo o F2 y fecha de pago en ejecución o F3 (F2 es excluyente con F3) que debo utilizar para varios objetos; por ejemplo:
En una sección cargo todos los campos y en secciones separadas (relacionadas por el número de factura) en el script obtengo Month e Year de F2 y F3, respectivamente.
Pues bien, no logro filtrar correctamente para que, por ejemplo, me muestre el total facturado de un mes y año respecto al total cobrado en igual mes y año, ya que puede darse que un factura de enero es cobrada en marzo o, viceversa, en enero estoy cobrando una factura de octubre anterior. Si uso filtro para las tres fechas, naturalmente me anula alguno de ellos o manda todo a cero, y si uso solamente el filtro de F1 no estaría mostrando el resultado real de cada mes y año (facturado-cobrado).
Agradeceré me orienten en cómo se trabajan las fechas en estos casos.
Hola Ernesto José,
Prueba lo siguiente para tener una única tabla de hechos de facturas con una única fecha, el ID de la factura y un tipo para identificar qué contiene el registro: si una factura con su fecha ("Factura"), una factura con su fecha de cobro en plazo ("Plazo"), o una factura con su fecha de cobro en ejecución ("Ejecución"):
// Carga de la información a fecha de factura
HECHOS:
LOAD [ID Factura] AS [ID Factura],
Num([Fecha Factura]) AS [Num Fecha],
'Factura' AS [Tipo Hecho],
[Importe Factura] AS [Importe Factura]
FROM FACTURAS;
// Carga de la información a fecha de cobrado en plazo
CONCATENATE (HECHOS)
LOAD [ID Factura] AS [ID Factura],
Num([Fecha Cob Plazo]) AS [Num Fecha],
'Plazo' AS [Tipo Hecho],
[Importe Factura] AS [Importe Factura]
FROM FACTURAS
WHERE Len([Fecha Cob Plazo]) > 0; // donde la fecha de cobro en plazo esté informada
// Carga de la información a fecha de cobrado en ejecución
CONCATENATE (HECHOS)
LOAD [ID Factura] AS [ID Factura],
Num([Fecha Cob Ejec]) AS [Num Fecha],
'Ejecución' AS [Tipo Hecho],
[Importe Factura] AS [Importe Factura]
FROM FACTURAS
WHERE Len([Fecha Cob Ejec]) > 0; // donde la fecha de cobro en ejecución esté informada
, luego creas una tabla con un calendario canónico:
CALENDARIO:
LOAD *,
Date([Num Fecha], 'DD/MM/YYYY') AS Fecha,
Year([Num Fecha]) AS Año,
Month([Num Fecha]) AS Mes;
LOAD DISTINCT [Num Fecha]
RESIDENT HECHOS;
, que se una a la anterior mediante el campo [Num Fecha]; y ya podrías, en diseño, tener lo que necesitas:
Espero que te sirva...
Saludos,
H
Hola, Héctor! Como siempre, enorme actitud de ayuda, gracias.
Al ver tu respuesta desarrollada, tengo la impresión de que no me expliqué del todo bien en mi pregunta. La necesidad no es tener un solo registro con una única fecha. Cada factura, con su número, fecha e importe genera un registro, que además tiene campos fijos (como el código de agente, el nombre del agente, la fecha de recepción por el agente, etc). Posee también campos variables de fechas; por ejemplo: fecha de vencimiento de la factura, fecha de pago, fecha de débito, etc. Si se vence el plazo de pago sin que el agente salde el importe, se pasa a la fase ejecutiva de cobro ante una Superintendencia, con lo que, en tal caso, queda vacía la fecha de pago del agente pero en algún momento aparecerá una fecha de pago ejecutivo por la Superintendencia. Todo se anota en el mismo registro, manualmente en una planilla Excel.
El asunto es que entre la fecha de la factura, la de pago por el agente y/o la de pago por la Superintendencia, puede haber hasta 3 meses de diferencia, con lo que en el análisis de mes y año se generan distorsiones (sobre todo en las puntas), ya que una factura emitida en enero 2017, puede ser pagada en la Superintendencia (si no se pagó por el agente) en abril 2017. Si filtro por cobranza según mes de factura, no me aparece la de abril; si filtro por cobranza de abril, no me aparece algunas facturas, porque debo hacer KPIs que contesten 2 preguntas, por ejemplo: ¿Cuánto facturé en marzo 2017? (esta es fácil, seleccionando ese mes y año de fecha de factura); la otra: ¿Cuánto cobré en marzo 2017? y aquí debe traerme las cobranzas de ese mes y año, pero que podrían corresponder a facturas emitidas en enero o febrero... y ahí se me mezclan las fechas y no sé cómo filtrar fechas diferentes.
Te agrego un ejemplo (los puntos suspensivos indican que hay varias columnas de datos entre medio). Si quiero contestar esas preguntas debería obtener como respuesta:
FC_NUMERO | FC_FECHA | FC_IMPORTE | AG_FPAGO | AG_PAGADO | EXP_FPAGO | EXP_PAGADO | |||
12.566 | 02/01/2017 | … | 35.655,00 | … | 12/3/2017 | 35.655,00 | … | ||
12.567 | 02/01/2017 | … | 44.122,00 | … | … | 15/04/2017 | 25.689,00 | ||
12.568 | 03/02/2017 | … | 25.689,00 | … | … |
Por más que con Year y Month separé cada una de las tres fechas, no logro filtrar correctamente en los KPIs que deben alertar sobre estas medidas.
Espero que ahora quede más claro mi tropiezo.
OK Ernesto...
Entonces se me ocurren 2 formas de solucionar tu problema:
// Carga de la información a fecha de factura
LK_FACTURAS_CALENDARIO:
LOAD FC_NUMERO AS FC_NUMERO,
Num(FC_FECHA) AS [Num Fecha],
'Factura' AS [Tipo Hecho]
FROM FACTURAS;
// Carga de la información a fecha de cobrado en plazo
CONCATENATE (LK_FACTURAS_CALENDARIO)
LOAD FC_NUMERO AS FC_NUMERO,
Num(AG_FPAGO) AS [Num Fecha],
'Plazo' AS [Tipo Hecho]
FROM FACTURAS
WHERE Len(AG_FPAGO) > 0; // donde la fecha de cobro en plazo esté informada
// Carga de la información a fecha de cobrado en ejecución
CONCATENATE (LK_FACTURAS_CALENDARIO)
LOAD FC_NUMERO AS FC_NUMERO,
Num(EXP_FPAGO) AS [Num Fecha],
'Ejecución' AS [Tipo Hecho]
FROM FACTURAS
WHERE Len(EXP_FPAGO) > 0; // donde la fecha de cobro en ejecución esté informada
, luego creas una tabla con un calendario canónico:
CALENDARIO:
LOAD *,
Date([Num Fecha], 'DD/MM/YYYY') AS Fecha,
Year([Num Fecha]) AS Año,
Month([Num Fecha]) AS Mes;
LOAD DISTINCT [Num Fecha]
RESIDENT HECHOS;
, que se una a la anterior mediante el campo [Num Fecha]; y ya podrías, en diseño, tener lo que necesitas:
Espero que te sirva...
Saludos,
H
Entiendo y comparto la filosofía de tu sugerencia, Héctor, pero no he logrado combinar correctamente esa estructura de tablas en el script que ya tenía desarrollado, incluyendo varias secciones y otro calendario, que afectan a muchos objetos gráficos de todo tipo existentes en las hojas.
Parece conveniente postergar esto mientras sigo con otras visiones de los datos.
No inviertas más tiempo. Muchas gracias por tu esfuerzo.