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.
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 único | Tabla Un ID único | Fecha | Una columna booleana basada en cierto texto en un campo de descripción | Fecha más temprana en TRUE resultante de la expresión |
1 | 10 | 20/10/2019 | Falso | 21/10/2019 |
2 | 10 | 21/10/2019 | Verdad | 21/10/2019 |
3 | 10 | 22/10/2019 | Verdad | 21/10/2019 |
4 | 11 | 01/12/2019 | Verdad | 01/12/2019 |
5 | 11 | 13/12/2019 | Falso | 01/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.
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.
Aquí está mi archivo de prueba para su referencia ( Merge1 ).
@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 ])
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
To learn more about Power BI, follow me on Twitter or subscribe 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()
)
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |