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

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Segmentadoras AS AT

Hola, estoy tratando de crear un informe de envejecimiento de RA "COMO AT". Tengo una conexión dinámica, pero no tengo acceso para realizar cambios en el modelo de datos subyacente, por lo que estoy intentando hacer todo en DAX.

Si miro el nivel de transacción, tengo la fecha de vencimiento (no vinculada a un dim) y una fecha que se usa si la fecha de vencimiento está en blanco. Utilizo esta medida para crear los cubos AR normales de 1-30, 31-60, 61-90, 91+.

Para calcular el número de días abiertos, utilizo la siguiente medida, que siempre me da el resultado actual.

# Días Abiertos AR =

VAR First_Date =

SI(

ISBLANK(MAX('Líneas de transacción'[Fecha de vencimiento/Recibir por])),

MAX('Líneas de transacción'[Fecha]),

MAX('Líneas de transacción'[Fecha de vencimiento/Recibir por])

)

VAR Second_Date =

MAXX(

ALLSELECTED('Fecha de transacción'),'Fecha de transacción'[*Fecha (trans)]

)

DEVOLUCIÓN

DATEDIFF(

First_Date,

SI(Second_Date > HOY(),

HOY(),

Second_Date

),

DÍA

)

Tengo una segmentación para que el usuario seleccione una fecha correcta, pero no quiero que esta segmentación filtre las transacciones, de lo contrario, no recojo todas las transacciones con un saldo abierto. La dimensión de fecha y la tabla de líneas de transacciones tienen una relación de uno a varios.

El resultado de esta medida es que siempre calcula la segunda fecha, como Today(), ya que el MAXX siempre devuelve el máximo de la tabla de fechas de transacción.

¿Cómo hago para obtener la fecha seleccionada sin que esa fecha filtre la tabla?


Gracias

Steve

1 ACCEPTED SOLUTION

Hola @Steve_M

Como mencioné en mi respuesta anterior, los filtros que provienen de una tabla relacionada afectarán qué registros son visibles. Por lo tanto, si selecciona 28/11, solo verá las filas 28/11. Funciones como ALL, ALLSELECTED, REMOVEFILTERS, etc. afectan a los resultados de una medida, pero no pueden mostrar las filas no seleccionadas. Cambie la segmentación de datos a antes si desea mostrar también las filas con fechas anteriores a la seleccionada actualmente.

danextian_0-1733872228264.png

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola @Steve_M

Gracias por ponerse en contacto con la comunidad de Microsoft Fabric.

Para solucionar el problema, debe asegurarse de que la segmentación de datos "Fecha de caducidad" funcione sin filtrar directamente la tabla de líneas de transacción, pero que aún le permita calcular el número de días abiertos en relación con la "Fecha de caducidad" seleccionada.

A continuación, se muestra cómo puede lograrlo mediante esta consulta de DAX a continuación:

# Días Abiertos AR =

VAR First_Date =

SI(

ISBLANK(MAX('Líneas de transacción'[Fecha de vencimiento/Recibir por])),

MAX('Líneas de transacción'[Fecha]),

MAX('Líneas de transacción'[Fecha de vencimiento/Recibir por])

)

VAR AsAtDate =

SELECTEDVALUE('Date Dimension'[Date], TODAY()) -- Obtiene la fecha seleccionada o por defecto es TODAY()

DEVOLUCIÓN

DATEDIFF(

First_Date,

IF(AsAtDate > TODAY(), TODAY(), AsAtDate), -- Asegúrese de que la fecha no exceda la fecha de hoy

DÍA

)

  • En este caso, SELECTEDVALUE recupera la fecha seleccionada por el usuario de la segmentación.
  • Si no se selecciona ninguna fecha, el valor predeterminado es TODAY().
  • Si la fecha "as-at" seleccionada está en el futuro, se establece de forma predeterminada en la fecha de hoy para evitar discrepancias.
  • La segmentación no filtra ninguna transacción, lo que garantiza resultados precisos.

Este enfoque debe cumplir con sus requisitos y garantizar cálculos precisos de envejecimiento de RA para cualquier fecha seleccionada. ¡Avísame si necesitas más ajustes!

Si esta publicación ayuda, considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Gracias y saludos,

Anjan Kumar Chippa

Syndicate_Admin
Administrator
Administrator

Hola @Steve_M

El método más simple para que las transacciones no se equipen es usar el cortador "antes" y cubrir la fecha de inicio con una forma. Si está utilizando una conexión en tiempo real y no hay una tabla de fechas desconectadas en el modelo, estará limitado a esto. Tendrá más flexibilidad al conectarse a un modelo semántico a través de una consulta directa (si está habilitada). Si bien puede usar medidas para modificar el contexto del filtro y mostrar valores fuera del rango seleccionado, una tabla de fechas relacionada mostrará solo las filas que se han seleccionado.

danextian_0-1733807619726.png

Aquí está la demo- https://community.fabric.microsoft.com/t5/Data-Stories-Gallery/Accounts-Receivable-Aging-Schedule/td...

Ejemplo de pbix y tutorial en YouTube.

Syndicate_Admin
Administrator
Administrator

@Steve_M

Medida actualizada para # Días abiertos AR:

# Days Open AR =
VAR First_Date =
IF(
ISBLANK(MAX('Transaction Lines'[Due Date/Receive By])),
MAX('Transaction Lines'[Date]),
MAX('Transaction Lines'[Due Date/Receive By])
)

VAR Selected_AsAtDate =
SELECTEDVALUE('Transaction Date'[*Date (trans)], TODAY())

RETURN
DATEDIFF(
First_Date,
MIN(Selected_AsAtDate, TODAY()),
DAY
)

💌Si esto ayudó, ¡una marca de Kudos 👍 o Solution sería genial! 🎉
Bien
Kedar
Conéctate en LinkedIn

Syndicate_Admin
Administrator
Administrator

Hola @Steve_M ,

Puede probar el siguiente código: -

# Days Open AR =

VAR First_Date = 
    IF(
        ISBLANK(MAX('Transaction Lines'[Due Date/Receive By])), 
        MAX('Transaction Lines'[Date]), 
        MAX('Transaction Lines'[Due Date/Receive By])
    )

VAR Selected_Date = 
    CALCULATE(
        MAX('Transaction Date'[*Date (trans)]), 
        ALLSELECTED('Transaction Date')
    )

VAR Second_Date = 
    IF(
        Selected_Date > TODAY(),
        TODAY(),
        Selected_Date
    )

RETURN
    DATEDIFF(First_Date, Second_Date, DAY)

Sería muy útil si pudiera compartir los datos de muestra y la salida requerida para responder de manera más específica.

Gracias Samarth, sigo obteniendo el mismo resultado. A continuación se muestra lo que estoy tratando de lograr; cuando la fecha seleccionada es, por ejemplo, el 28 de noviembre, quiero calcular usando esa fecha. Si la fecha seleccionada es el 31 de diciembre, que es mayor que hoy, utilice la fecha de hoy. Puede ver en la segmentación de datos de depuración que el código para calcular la segunda fecha está funcionando, pero cuando se usa en el objeto visual con el filtrado desactivado, el valor máximo devuelve el máximo de la tabla de fechas y no la fecha seleccionada. Ni siquiera sé si esto es posible. Trabajar con una conexión en vivo lo está haciendo difícil, pero es con lo que tengo que lidiar

Steve_M_3-1733860241052.png

Hola @Steve_M

Como mencioné en mi respuesta anterior, los filtros que provienen de una tabla relacionada afectarán qué registros son visibles. Por lo tanto, si selecciona 28/11, solo verá las filas 28/11. Funciones como ALL, ALLSELECTED, REMOVEFILTERS, etc. afectan a los resultados de una medida, pero no pueden mostrar las filas no seleccionadas. Cambie la segmentación de datos a antes si desea mostrar también las filas con fechas anteriores a la seleccionada actualmente.

danextian_0-1733872228264.png

Gracias, creo que esto funcionará con el código de Samarth.

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.

Jan25PBI_Carousel

Power BI Monthly Update - January 2025

Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.

Jan NL Carousel

Fabric Community Update - January 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors