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 a todos!
Tengo una tabla ("TPSMeasurements") con una categoría, una fecha y los valores medidos que quiero estudiar (la distancia de pendiente). Lo que tengo que hacer es encontrar la diferencia entre el valor actual y un valor "n" tiempo antes (normalmente 24h o 7 días) en la misma categoría. Las mediciones no son regulares, así que no soy capaz de encontrar la "Época" exacta a buscar. Consulte un ejemplo a continuación:
Para encontrar el valor necesario sin conocer la fecha/hora exacta he creado una columna Index con el siguiente DAX:
Índice =
var = fTPSMeasurements[Nombre]
fue pérdida =
FILTRO(
fTPSMeasurements;
fTPSMeasurements[Nombre]=punto
)
devolución
RANKX(
pestaña;
fTPSMeasurements[Epoch];;
Asc
)
Después, calculé cuántos D.I. hay entre la lectura actual y la primera lectura después de la hora establecida "n":
obs.: [AnalysisTime] es un parámetro que el usuario puede establecer, en horas
IDCount =
var epoch = fTPSMeasurements[Epoch]
var día = epoch-fTPSMeasurements[AnalysisTime]/24
var = fTPSMeasurements[Nombre]
var LagDate =
CALCULAR(
COUNTROWS(fTPSMeasurements);
FILTRO(
fTPSMeasurements;
fTPSMeasurements[Nombre]=punto &&
fTPSMeasurements[Epoch] >= día &&
fTPSMeasurements[Epoch] < época
)
)
devolución
LagDate
Finalmente puedo hacer lo siguiente y restar los dos valores:
SlopeDelta (mm) =
var = RELATED(dPoints[Nombre])
estaba en = fTPSMeasurements[Index] - fTPSMeasurements[IDCount]
var LagValue =
MAXX(
FILTRO(
fTPSMeasurements;
fTPSMeasurements[Nombre] = punto &&
fTPSMeasurements[Index] = ind
);
fTPSMeasurements[SlopeDistanceAtmosPppmCorrected]
)
var epoch =
MAXX(
FILTRO(
fTPSMeasurements;
fTPSMeasurements[Nombre] = punto &&
fTPSMeasurements[Index] = ind
);
fTPSMeasurements[Epoch]
)
var DeltaY =
IF(
ISBLANK(LagValue) || fTPSMeasurements[Index] = fTPSMeasurements[IDCount]+1; 0 ; Filtrar valores al inicio del proyecto
fTPSMeasurements[SlopeDistanceAtmosPppmCorrected]-LagValue
)
var DeltaX = fTPSMeasurements[AnalysisTime]
devolución
DeltaY*1000 //Valor devuelto en mm
Hasta ahora tan bueno, funciona bien en pequeños conjuntos de datos (probado en ~ 500k filas y trabajado con un poco de tiempo de carga).
Sin embargo, ahora tengo un conjunto de datos de filas de 1,6kk y está tardando mucho tiempo en cargarse.
La columna IDCount tiene el peor rendimiento, con diferencia. ¿Es posible hacer estos cálculos de otra manera?
Por favor, avísame si puedo explicarlo mejor.
¡Cualquier ayuda será muy apreciada! ¡gracias!
No @hugobdo
¿Puedes compartir el pbix?
|
Por favor, acepte la solución cuando haya terminado y considere la posibilidad de dar un pulgar hacia arriba si las publicaciones son útiles. Póngase en contacto conmigo de forma privada para obtener soporte con cualquier necesidad de BI a mayor escala, tutoría, etc. |
Hey @AlB, gracias por su respuesta!
¡seguro! Lo envié a onedrive:
https://1drv.ms/u/s!AnUEJ0hL2PrngeJKLbLkoFsQY62kCw
obs.: Remató los datos en filas de 50k y cambié de valor, debido a problemas de privacidad
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 |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |