tlenzmeier
Me he estado golpeando la cabeza contra la pared tratando de llegar a un informe de antigüedad de las cuentas por cobrar que sea dinámico. En mi tabla de pedidos de clientes, tengo la fecha de vencimiento de la factura. También tengo el monto de la factura, la fecha de la factura, la fecha del libro mayor, etc. Necesito poder elegir cualquier momento y generar un informe de antigüedad. Entonces, por ejemplo, si un cliente adeuda $ 10,000 que vence el 1 de octubre de 2017 y hoy es el 15 de noviembre, entonces esta factura tiene 45 días de atraso. Ahora retroceda la fecha al 15 de octubre, o avance al 15 de diciembre, los días vencidos son 15 y 60 respectivamente. Estaba tratando de seguir una publicación anterior (https://community.powerbi.com/t5/Desktop/Accounts-Receivable-Aging-Report/td-p/106367), pero eso no responde a ningún tipo de dropdown de fechas /recogedor. En el ejemplo mencionado anteriormente, la persona que respondió tenía un calendario separado basado en la fecha de vencimiento mínima de la tabla y hoy. Luego usaron INT (MAX (‘Fecha'[Date]) -MAX (‘Facturas'[InvoiceDueDate]). Obtengo un valor estático. Intenté unirlo a mi tabla de fechas principal tanto en la fecha del libro mayor como en la fecha de vencimiento de la factura, pero no tuve suerte. Una vez que pueda mover los días vencidos con la fecha, entonces puedo calcular mis montos vencidos. ¡¡Gracias por adelantado!!
v-jiascu-msft
En respuesta a tlenzmeier
Hola @tlenzmeier,
Si quieres mantener la medida anterior [PastDue], puedes agregar otro:
Buckets = SWITCH ( TRUE (), ISBLANK ( [PastDue] ), "Current", [PastDue] >= 1 && [PastDue] <= 30, "Bucket1", [PastDue] >= 31 && [PastDue] <= 60, "Bucket2", [PastDue] >= 61 && [PastDue] <= 90, "Bucket3", [PastDue] >= 91, "Bucket4",
"Error" )
Si solo desea una medida, puede usar esta:
Buckets In One = VAR SelectedDate = IF ( HASONEVALUE ( 'Indicator'[Date] ), VALUES ( 'Indicator'[Date] ), BLANK () ) VAR PastDue = IF ( MIN ( 'Invoice'[ InvoiceDueDate] ) >= SelectedDate || ISBLANK ( SelectedDate ), BLANK (), DATEDIFF ( MIN ( 'Invoice'[ InvoiceDueDate] ), SelectedDate, DAY ) ) RETURN SWITCH ( TRUE (), ISBLANK ( [PastDue] ), "Current", [PastDue] >= 1 && [PastDue] <= 30, "Bucket1", [PastDue] >= 31 && [PastDue] <= 60, "Bucket2", [PastDue] >= 61 && [PastDue] <= 90, "Bucket3", [PastDue] >= 91, "Bucket4",
"Error" )
Atentamente,
Valle
v-jiascu-msft
En respuesta a tlenzmeier
De nada.
Si desea agregar los depósitos como encabezados de columna, me temo que es demasiado difícil. Lo visual podría ser Matrix. Hagamos algunas explicaciones.
1. No hay depósitos en las tablas de origen. Son dinámicos.
2. Los valores dinámicos no se pueden agregar en la columna. Tal vez podamos crear una nueva tabla de todos los depósitos. El problema es que no podemos crear una relación con las tablas que tenemos ahora.
Quizás haya una solución. Le sugiero que cree un nuevo hilo en este foro para centrarse en esta necesidad.
Gracias por aceptar mi respuesta.
Atentamente,
Valle
v-jiascu-msft
Hola @tlenzmeier,
¿Podría compartir una muestra? La fórmula que citó necesita un contexto para funcionar. Si lo pones en un visual de tarjeta, obtendrás un valor estático. Por lo general, se necesita una tabla de fechas en su escenario.
¡Atentamente!
Valle
tlenzmeier
En respuesta a v-jiascu-msft
Tengo dos mesas. La primera tabla es mi dimensión de fecha. La segunda tabla es mi tabla de facturas.
Entonces parece algo así:
CustomerID, PrimaryKey, InvoiceAmount, InvoiceDueDate, GeneralLedgerDate.
Hay una combinación de uno a varios desde la dimensión de fecha hasta la tabla de facturas en la fecha del libro mayor. Mi objetivo es determinar cuántos días de atraso tiene una factura en un momento determinado. Por ejemplo, si tengo una factura emitida el 1 de octubre de 2017 y no se ha pagado nada, entonces el 1 de noviembre de 2017 tendría 30 días de atraso. De igual forma, el 1 de diciembre de 2017, estaría en mora de 60 días. En SQL, es bastante sencillo hacer un DATEDIFF, pero en este caso, necesito lograr lo mismo, pero una fecha proviene de mi dimensión de fecha y la otra proviene de la tabla de facturas. He intentado numerosas cosas, todas las cuales terminan con un error a lo largo del tiempo de que una fecha no puede ser mayor que la otra.
v-jiascu-msft
En respuesta a tlenzmeier
Hola @tlenzmeier,
La columna de fecha que necesita es un indicador en lugar de un filtro. Sugeriría agregar otra tabla para que actúe como indicador. Puede consultarlo en este archivo.
PastDue = VAR SelectedDate = IF ( HASONEVALUE ( 'Indicator'[Date] ), VALUES ( 'Indicator'[Date] ), BLANK () ) RETURN IF ( MIN ( 'Invoice'[ InvoiceDueDate] ) >= SelectedDate || ISBLANK ( SelectedDate ), BLANK (), DATEDIFF ( MIN ( 'Invoice'[ InvoiceDueDate] ), SelectedDate, DAY ) )
Atentamente,
Valle
tlenzmeier
En respuesta a v-jiascu-msft
Esto parece prometedor. Una última pregunta, ¿cuál sería el DAX para agrupar los montos por días vencidos? Por ejemplo, menos de un día de atraso es actual, 1-30 es un depósito, 31-60 es un depósito, 61-90 es un depósito y 90+ es un depósito.
¡Gracias!
v-jiascu-msft
En respuesta a tlenzmeier
Hola @tlenzmeier,
Si quieres mantener la medida anterior [PastDue], puedes agregar otro:
Buckets = SWITCH ( TRUE (), ISBLANK ( [PastDue] ), "Current", [PastDue] >= 1 && [PastDue] <= 30, "Bucket1", [PastDue] >= 31 && [PastDue] <= 60, "Bucket2", [PastDue] >= 61 && [PastDue] <= 90, "Bucket3", [PastDue] >= 91, "Bucket4",
"Error" )
Si solo desea una medida, puede usar esta:
Buckets In One = VAR SelectedDate = IF ( HASONEVALUE ( 'Indicator'[Date] ), VALUES ( 'Indicator'[Date] ), BLANK () ) VAR PastDue = IF ( MIN ( 'Invoice'[ InvoiceDueDate] ) >= SelectedDate || ISBLANK ( SelectedDate ), BLANK (), DATEDIFF ( MIN ( 'Invoice'[ InvoiceDueDate] ), SelectedDate, DAY ) ) RETURN SWITCH ( TRUE (), ISBLANK ( [PastDue] ), "Current", [PastDue] >= 1 && [PastDue] <= 30, "Bucket1", [PastDue] >= 31 && [PastDue] <= 60, "Bucket2", [PastDue] >= 61 && [PastDue] <= 90, "Bucket3", [PastDue] >= 91, "Bucket4",
"Error" )
Atentamente,
Valle
tlenzmeier
En respuesta a v-jiascu-msft
Valle,
¡¡Primero que nada, gracias!!
Ahora una pregunta más. Necesito presentar esta información de forma visual y en una tabla. El objeto visual podría ser una dona y la tabla tendría el número de factura, la fecha de la factura, la fecha de vencimiento, los días vencidos y luego los cubos en la fila del encabezado como columnas. Entonces, visualmente, al mirar la tabla, el usuario vería los Buckets 1-4 y sus correspondientes cantidades en dólares.
¡Una vez más, gracias! Muy agradecido.
v-jiascu-msft
En respuesta a tlenzmeier
De nada.
Si desea agregar los depósitos como encabezados de columna, me temo que es demasiado difícil. Lo visual podría ser Matrix. Hagamos algunas explicaciones.
1. No hay depósitos en las tablas de origen. Son dinámicos.
2. Los valores dinámicos no se pueden agregar en la columna. Tal vez podamos crear una nueva tabla de todos los depósitos. El problema es que no podemos crear una relación con las tablas que tenemos ahora.
Quizás haya una solución. Le sugiero que cree un nuevo hilo en este foro para centrarse en esta necesidad.
Gracias por aceptar mi respuesta.
Atentamente,
Valle
Morten_DK
En respuesta a v-jiascu-msft
He tenido éxito al hacer los cubos haciendo esto:
Cubos de cuentas por cobrar vencidas =
CAMBIAR (
CIERTO ();
[Receivables datediff] <= 0; "0 días";
[Receivables datediff] > 0
&& [Receivables datediff] <= 14; "1-14 días vencidos";
[Receivables datediff] > 14
&& [Receivables datediff] <= 30; "15-30 días vencidos";
[Receivables datediff] > 30
&& [Receivables datediff] <= 90; "31-90 días vencidos";
[Receivables datediff] > 90
&& [Receivables datediff] <= 360; "91-360 días vencidos";
[Receivables datediff] > 360
&& [Receivables datediff] <1000000; "Más de 360 días vencidos";
«Error»
)
Eso también funciona cuando se coloca en filas, pero no puedo usarlo en un gráfico como eje X o como columnas en una matriz. ¿Hay alguna forma de evitar eso?