Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
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
Serial | Cal Date | Cal Xq |
100141 | 12/5/19 14:12 | 0.081 |
100141 | 4/12/15 11:36 | 0.085 |
100290 | 6/16/15 9:19 | 0.077 |
100321 | 1/21/19 14:44 | 0.082 |
100321 | 1/21/19 11:12 | 0.079 |
100670 | 1/2/20 11:24 | 0.079 |
100670 | 9/4/18 15:39 | 0.081 |
Qc
Serial | Fecha de QC | Cal Date | QC Xq | Cal Check |
100141 | 6/15/19 | 4/12/2015 | 0.081 | -4.71% |
100141 | 10/15/19 | 4/12/2015 | 0.082 | -3.53% |
100141 | 2/15/20 | 12/5/2019 | 0.079 | -2.47% |
100141 | 6/15/20 | 12/5/2019 | 0.08 | -1.23% |
100290 | 6/15/19 | 6/16/2015 | 0.079 | 2.60% |
100290 | 10/15/19 | 6/16/2015 | 0.078 | 1.30% |
100290 | 2/15/20 | 6/16/2015 | 0.077 | 0.00% |
100290 | 6/15/20 | 6/16/2015 | 0.077 | 0.00% |
100321 | 6/15/19 | 1/21/2019 | 0.08 | -2.44% |
100321 | 10/15/19 | 1/21/2019 | 0.081 | -1.22% |
100321 | 2/15/20 | 1/21/2019 | 0.079 | -3.66% |
100321 | 6/15/20 | 1/21/2019 | 0.082 | 0.00% |
100670 | 6/15/19 | 9/4/2018 | 0.079 | -2.47% |
100670 | 10/15/19 | 9/4/2018 | 0.077 | -4.94% |
100670 | 2/15/20 | 1/2/2020 | 0.082 | 3.80% |
100670 | 6/15/20 | 1/2/2020 | 0.081 | 2.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!
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]
¡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!
¿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!
Proud to be a Super User!
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?
Proud to be a Super User!
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]?
Proud to be a Super User!
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?
Proud to be a Super User!
puede compartir su pbix
Proud to be a Super User!