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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Wayfarer
Helper I
Helper I

Sustitución de columnas calculadas DAX EARLIER por Power Query/M

Hola. Necesito ayuda para convertir columnas calculadas de DAX mediante la función EARLIER a Power Query. ¿Se puede hacer?

Este es un ejemplo de mi escenario. La relación es la Tabla A 1:M Tabla B.

Tabla B:

Tabla B Id únicoTabla Un ID únicoFechaUna columna booleana basada en cierto texto en un campo de descripciónFecha más temprana en TRUE resultante de la expresión
11020/10/2019Falso21/10/2019
21021/10/2019Verdad21/10/2019
31022/10/2019Verdad21/10/2019
41101/12/2019Verdad01/12/2019
51113/12/2019Falso01/12/2019

¿Puede Power Query devolver la fecha más temprana en la que se produce TRUE para cada tabla un identificador único? Por ejemplo, las filas de fechas con B ID único 2 y 4. Supongo que esto se agregaría como una columna a la Tabla B. Pero tal vez un mejor diseño de modelo sería crear una tabla separada que consiste en la Tabla Un ID único y las fechas más tempranas??

He hecho esto con columnas calculadas DAX y función EARLIER, pero creo que es parte de los problemas de rendimiento que estoy viendo. Así que pensar en PQ - y tal vez diferente diseño de modelo - podría hacerlo más eficientemente?

Algunas ideas que he visto involucran A Table.Group, no estoy seguro de que sea el camino correcto.

4 REPLIES 4
v-eachen-msft
Community Support
Community Support

Hola @Wayfarer ,

Puede utilizar la función Table.SelectRows() para mantener los datos "true". A continuación, utilice Table.Group() para obtener el resultado.

Aquí está mi resultado.

1-1.PNG

Aquí está mi archivo de prueba para su referencia ( Merge1 ).

Community Support Team _ Eads
If this post helps, then please consider Accept it as the solution to help the other members find it.
amitchandak
Super User
Super User

@Wayfarer , la relación entre A y B no está clara. Pero intente

Nueva columna en A - Maxx(filter(A,A[Unique ID] ?anterior(A[Unique ID]) && A[Date]<earlier(A[Date]) && A[Status] ? True),A[Date])

Nueva columna en B - Maxx(filter(B,A[Unique ID] ?(B[ID])),A[Nueva columna en A ])

mahoneypat
Employee
Employee

Esto podría hacerse en consulta (y probablemente incluiría un grupo por paso), pero creo que DAX es la mejor manera de ir. ¿Cómo sabes que esto está causando un problema de rendimiento? Puede comparar la actualización como es en lugar de donde se elimina esta columna (o comentarla con una expresión mucho más simple (por ejemplo, columna 1 //su expresión actual).

Si la diferencia es significativa, comparta la expresión DAX para ver si se podría optimizar.

Si esto funciona para usted, por favor márquelo como solución. Los felicitaciones también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


EDITAR: Aclaración sobre tablas. La tabla A es como los registros de "encabezado"; La tabla B es como los registros de "acción" que se aplican al encabezado. La tabla B (acciones) contiene el identificador único de la tabla A (encabezado). Así que 1 encabezado -> muchas acciones.

Oye, gracias por la respuesta. Disculpas por el muro de texto a seguir..

Pensé que DAX era probablemente el camino a seguir también, para ser honesto; justo en la forma en que interpreto cómo / qué usar DAX para y la función EARLIER en particular. Sin embargo, la interpretación podría ser errónea.

Tienes razón, voy a hacer algunas pruebas adicionales. Pero percibí problemas de rendimiento / configuración ineficiente porque my las actualizaciones son bastante lentas, lo cual es subjetivo, pero para esta consulta sola tal vez 15 minutos más o menos. En cuanto al tamaño, es de 7.7GB recuperado, y noto que la actualización gira durante algún tiempo después de alcanzar esos 7.7GB, como si se tratara de columnas calculadas de DAX que se procesan para cada fila que pasa. Si hago una actualización completa en el escritorio, en lugar de una consulta a la vez, a veces obtendré errores debido a que ramm se agote - tengo 16GB. Además del tiempo de actualización, el "Trabajar en él" después de ingresar algunas de las fórmulas DAX se mantiene durante lo que parece ser mucho tiempo.

Un poco de contexto: la lógica "comprobar la fecha más temprana (o más reciente)" que estoy haciendo se aplica 5 veces, para diferentes métricas. Todo ayuda a calcular el tiempo entre ciertos cambios (de estado) en un registro de "encabezado". En el mundo de SQL, haría esto como una agregación en una subconsulta o auto-unión. Cada cambio se identifica por cierto texto en un campo de texto en el registro de "acción", no hay una tabla de historial explícita solo para los cambios de estado. Por lo tanto, para cada cambio separado para el que necesito proporcionar información de tiempo, hay 5x comprobaciones de "primero, ¿este registro de "acción" corresponde a un cambio de estado"; 5x comprueba para obtener la "primera / última fecha en la que sucedió" (puede haber varios cambios hacia adelante y hacia atrás); y luego 5x cálculos para la diferencia de fecha.

Cambié la columna calculada de DAX devolviendo un booleano para "este registro de "acción" corresponde a un cambio de estado" en una columna de Power Query, y eso ayudó un poco. Simplemente no sabía muy bien cómo replicar la búsqueda de tipo ANTERIOR en Power Query.

Esto es lo que estoy usando para devolver la fecha más temprana de una ocurrencia en un criterio:

First date at x = 
MINX
(
    FILTER
    (
        <table>
        , <table>[unique id] = EARLIER(<table>[unique id]) && <table>[bool calc column t/f]
    )
    , <table>[date]
)

Entonces estos son los días entre los cambios:

Days between x and y = 
IF
(
    <table>[First date at x] < <table>[Last date at y]
    , DATEDIFF(<table>[First date at x], <table>[Last date at y], DAY)
    , BLANK()
)

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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