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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Anonymous
Not applicable

Cálculo de valores de columna basados en la coincidencia de fecha entre tablas

Estoy intentando realizar un cálculo de columna que devolverá un valor basado en la última fecha de calibración de un instrumento antes de una comprobación de control de calidad. Tengo dos tablas, Calibración y Control de calidad, que están relacionadas por número de serie del instrumento. Para cada instrumento, puede haber varias fechas de calibración y comprobaciones de control de calidad, durante las cuales se genera un resultado (Xq). La columna calculada (cheque cal) debe comparar la diferencia entre la comprobación de control de calidad Xq y el resultado Xq de la última calibración antes de esa comprobación.

Ejemplo:

Calibración

SerialCal DateCal Xq
10014112/5/19 14:120.081
1001414/12/15 11:360.085
1002906/16/15 9:190.077
1003211/21/19 14:440.082
1003211/21/19 11:120.079
1006701/2/20 11:240.079
1006709/4/18 15:390.081

Qc

SerialFecha de QCCal DateQC XqCal Check
1001416/15/194/12/20150.081-4.71%
10014110/15/194/12/20150.082-3.53%
1001412/15/2012/5/20190.079-2.47%
1001416/15/2012/5/20190.08-1.23%
1002906/15/196/16/20150.0792.60%
10029010/15/196/16/20150.0781.30%
1002902/15/206/16/20150.0770.00%
1002906/15/206/16/20150.0770.00%
1003216/15/191/21/20190.08-2.44%
10032110/15/191/21/20190.081-1.22%
1003212/15/201/21/20190.079-3.66%
1003216/15/201/21/20190.0820.00%
1006706/15/199/4/20180.079-2.47%
10067010/15/199/4/20180.077-4.94%
1006702/15/201/2/20200.0823.80%
1006706/15/201/2/20200.0812.53%

Afortunadamente, hay una columna auxiliar en la tabla de control de calidad que enumera cuándo se realizó la última cal. Desafortunadamente, es sólo una fecha sin marca de tiempo, mientras que la columna Cal Date en la tabla Calibración incluye la hora, y puede haber varias entradas del mismo día. Si estuviera haciendo esto en Excel, usaría una matriz para que coincida con el número de serie y la fecha cal entre las dos tablas para devolver el Cal Xq adecuado y calcular la diferencia a partir de ahí. Si se ordenan de nuevo a más antiguo en la tabla, me dará el resultado correcto. Sin embargo, soy nuevo en Power BI y no he encontrado un método comparable para hacer esto con DAX.

Cualquier ayuda sería apreciada, gracias!

11 REPLIES 11
jdbuchanan71
Super User
Super User

@dpatlak

Prueba esto como un comienzo. Agregue esta columna calculada a la tabla de control de calidad.

Cal Check Column = 
VAR _Serial = QC[Serial]
VAR _Date = QC[QC Date]
VAR _LastCal = CALCULATE(
    MAX (Calibration[Cal Date]),
    Calibration[Serial] = _Serial,
    Calibration[Cal Date] <= _Date
)
RETURN
CALCULATE(
    MAX(Calibration[Cal Xq]),
    Calibration[Serial] = _Serial,
    Calibration[Cal Date] = _LastCal
)-QC[QC Xq]

Anonymous
Not applicable

@jdbuchanan71

¡Definitivamente es un comienzo promining, gracias! Estoy recibiendo el error "No se puede determinar un valor único para la columna 'Serial' en la tabla 'QC'." debido a que hay varias entradas en la tabla para cada número de serie. El uso de una función MIN o MAX produce resultados incorrectos, ya que creo que está seleccionando valores asociados con fechas diferentes en ese caso. ¿Hay alguna manera de especificar que la variable solo utiliza el número de serie, la fecha y Xq de esa fila?

¡Agradezco la ayuda!

@dpatlak

¿Lo está agregando como una columna calculada en la tabla de control de calidad, ¿sí? El VAR leerá la fila actual de la tabla en la que está trabajando.

Hola @dpatlak ,

aquí hay dos columnas calc que creo que hacer el truco

last Cal Xq val = 
var serial = [Serial]
var calDate = [QC Date]
var maxDate = CALCULATE(MAX('Calibration'[Cal Date]), FILTER(Calibration, Calibration[Serial] = 'QC'[Serial] && Calibration[Cal Date] <= calDate ))
return 
CALCULATE(MAX('Calibration'[Cal Xq]), FILTER('Calibration', Calibration[Serial] = serial && Calibration[Cal Date] = maxDate))

var = DIVIDE([QC Xq], [last Cal Xq val])-1 

Espero que esto ayude


¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!
¿Mis respuestas ayudaron a llegar a una solución? Dale un kudos haciendo clic en Thumbs Up!



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Hola @richbenmintz,

¡Disculpas por la respuesta lenta! Me habían metido en otros proyectos y éste se quedó atrasado.

Estoy usando su solución de dos columnas que parece prometedora, pero obteniendo un error de dependencia circular para la segunda columna cuando intento la función DIVIDE.

Usando la información que se encuentra en https://community.powerbi.com/t5/Desktop/Row-Identifier-within-Power-BI-for-Desktop-Circular-depende... he estado intentando usar ALLEXCEPT en la función CALCULATE para corregir el error, pero no he tenido mucha suerte.

Gracias de nuevo por su ayuda!

Hola @dpatlak,

¿Puede compartir la fórmula Columna calculada que está generando la dependencia circular?



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Las fórmulas que estoy usando son esencialmente lo que había sugerido anteriormente; por lo que la columna 1 devuelve la última calibración Xq según lo previsto:

Last Cal Xq = 
VAR _SERIAL = [SerialNumber]
VAR _RPCDATE = [TestDate]
VAR _MAXDATE = 
    CALCULATE(
        MAX(RECORDS_AD[Cal Date]), 
        FILTER(RECORDS_AD, RECORDS_AD[SerialNumber] = _SERIAL && RECORDS_AD[Cal Date] <= _RPCDATE)
        )
RETURN
    CALCULATE(
        MAX(RECORDS_AD[Xq]), 
        FILTER(RECORDS_AD, RECORDS_AD[SerialNumber] = _SERIAL && RECORDS_AD[Cal Date] = _MAXDATE)
        )

Pero la segunda columna que llamo "Off" da el error de dependencia circular:

Off = 
DIVIDE(RECORDS_RP[Xq], RECORDS_RP[Last Cal Xq])-1

Hola @dpatlak,

¿Cuál es la diferencia entre las tablas RECORDS_AD y RECORDS_RP? ¿Es RECORDS_RP[Xq] un cálculo que hace referencia a RECORDS_AD[Xq]?



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Anonymous
Not applicable

Disculpas, debería haber hecho que el lenguaje sea coherente con el ejemplo anterior - RECORDS_AD es esencialmente la tabla de calibración ("AD" para el "ajuste de calibración"), y RECORDS_RP es la tabla de control de calidad (RP para la comprobación de "rendimiento rutinario"); por lo que mi intención es calcular la diferencia entre cada RECORDS_RP[Xq] y el RECORDS_AD correspondiente[Xq] a partir de la última fecha de ajuste de calibración.

¡Perdón por la confusión!

Hola @dpatlak,

¿Puede proporcionar un ejemplo de pbix con el error?



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


puede compartir su pbix



I hope this helps,
Richard

Did I answer your question? Mark my post as a solution! Kudos Appreciated!

Proud to be a Super User!


Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors