Fabric is Generally Available. Browse Fabric Presentations. Work towards your Fabric certification with the Cloud Skills Challenge.
Hola a todos los miembros de la Junta Directiva de Power Bi,
Necesito una ayuda en el diseño de la fórmula Dax. Debajo de mi fórmula está en Excel, quiero convertir esto en Dax. ¿Podría alguien ayudarme / guiarme en esto.
Col AO name = Request Type
Col AP name = Time Taken
=IF(AND(AO2="MR",INT(24*AP2)>8),"> 8 Hrs",
IF(AND(AO2="MR",INT(24*AP2)<=8),INT(24*AP2),
IF(AND(AO2="MR Routine",AP2<TIMEVALUE("00:30:00")),"< 30 Min",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("00:30:00"),AP2<TIMEVALUE("01:00:00")),"30 Min - 1 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("01:00:00"),AP2<TIMEVALUE("01:30:00")),"1 Hr - 1.5 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("01:30:00"),AP2<TIMEVALUE("02:00:00")),"1.5 Hr - 2 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("02:00:00"),AP2<TIMEVALUE("02:30:00")),"2 Hr - 2.5 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("02:30:00"),AP2<TIMEVALUE("03:00:00")),"2.5 Hr - 3 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("03:00:00"),AP2<TIMEVALUE("03:30:00")),"3 Hr - 3.5 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("03:30:00"),AP2<TIMEVALUE("04:00:00")),"3.5 Hr - 4 Hr",
IF(AND(AO2="MR Routine",AP2>=TIMEVALUE("04:00:00")),"> 4 Hr",
IF(AND(AO2="RN",INT(24*AP2)<8),"< 8 Hrs",
IF(AND(AO2="RN",INT(24*AP2)>=8,INT(24*AP2)<16),"8 - 16 hrs",
IF(AND(AO2="RN",INT(24*AP2)>=16,INT(24*AP2)<24),"16 - 24 hrs",
IF(AND(AO2="RN",INT(24*AP2)>=24,INT(24*AP2)<36),"24 hrs - 36 hrs",
IF(AND(AO2="RN",INT(24*AP2)>=36,INT(24*AP2)<48),"36 hrs - 48 hrs",
IF(AND(AO2="RN",INT(24*AP2)>=48),"> 48 hrs",
IF(AO2="NA","NA",INT(24*AP2)))))))))))))))))))
Allí, @PowerBIBeginer;
1.La columna en la que estamos tratando de obtener esta salida es Texto, como "> 4 Hr" y "> 48 hrs"; Debido a que el resultado de salida tiene caracteres y letras, debe ser texto. Para mantener la coherencia, una columna solo puede tener un tipo, lo que requiere que los resultados de salida sean todo texto. Por lo tanto, el int inicial (24 * ap2) no cumple con los requisitos, lo que resulta en un error.
2.Si su tipo de datos [Tiempo tomado] = Número decimal y Formato = número entero .
y Tipo de solicitud tipo de columna tipo de datos Texto.
Lo probé correctamente, sin embargo, este error se muestra debido al tipo de datos, lo que significa que el texto no se puede comparar con el número. A través de su descripción, no encontré la comparación entre el número y el texto. Así que todavía espero compartir su código 、 errores y algunas capturas de pantalla de datos simples sin información confidencial. gracias.
Saludos
Apoyo a la comunidad Team_ Yalan Wu
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Allí, @PowerBIBeginer;
El dax no puede generar tanto números como texto. Tienes que elegir uno u otro.
Para solucionar esto, puede convertir el número en texto utilizando la FORMAT
función:
INT ( 24 * MAX ( [Time Taken] ) )
cámbielo como se muestra a continuación:
FORMAT ( INT ( 24 * [Time Taken] ), "0" )
Saludos
Apoyo a la comunidad Team_ Yalan Wu
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Gracias por responder de nuevo a mi consulta. Esto es realmente apreciante.
Pero ahora, después de aplicar esto, estoy recibiendo msg de error:
"Las operaciones de comparación de DAX no admiten la comparación de valores de tipo Text con valores de tipo Integer. Considere la posibilidad de utilizar la función VALUE o FORMAT para convertir uno de los valores."
Allí, @PowerBIBeginer;
¿Puede compartirme un archivo simple o una captura de pantalla sobre sus datos y errores sin información confidencial? ¿No está claro aquí cuál es su formato [Time Taken]?
Sospecho que hay un problema en INT (24 * [Tiempo tomado]) > = 36 o [Tiempo tomado] > = VALOR DE TIEMPO ("02:30:00").
Saludos
Apoyo a la comunidad Team_ Yalan Wu
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Hola señor, gracias por responderme.
Tengo un par de preguntas.. ¿Podría sugerir pls sobre el mismo..
1. La columna en la que estamos tratando de obtener esta salida, ¿debería ser de qué tipo de datos?
= ¿Numérico o texto?
2. La columna Tiempo tomado tiene formato debajo.
tipo de datos = Número decimal
Formato = número entero
¿Es esto correcto?
3. La columna de tipo de solicitud tiene el formato a continuación.
tipo de datos = Texto
Formato = Texto
¿Es esto correcto?
Permítanme, por favor, corregir esto primero. Gracias
Allí, @PowerBIBeginer;
Si crea una columna por dax, puede cambiar la fórmula como se muestra a continuación:
if =
SWITCH (
TRUE (),
AND ( [Request Type] = "MR", INT ( 24 * [Time Taken] ) > 8 ), "> 8 Hrs",
AND ( [Request Type] = "MR", INT ( 24 * [Time Taken] ) <= 8 ), INT ( 24 * [Time Taken] ),
AND ( [Request Type] = "MR Routine", [Time Taken] < TIMEVALUE ( "00:30:00" ) ), "< 30 Min",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "00:30:00" )&& [Time Taken] < TIMEVALUE ( "01:00:00" ), "30 Min - 1 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "01:00:00" )&& [Time Taken] < TIMEVALUE ( "01:30:00" ), "1 Hr - 1.5 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "01:30:00" )&& [Time Taken] < TIMEVALUE ( "02:00:00" ), "1.5 Hr - 2 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "02:00:00" )&& [Time Taken] < TIMEVALUE ( "02:30:00" ), "2 Hr - 2.5 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "02:30:00" )&& [Time Taken] < TIMEVALUE ( "03:00:00" ), "2.5 Hr - 3 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "03:00:00" )&& [Time Taken] < TIMEVALUE ( "03:30:00" ), "3 Hr - 3.5 Hr",
[Request Type] = "MR Routine"&& [Time Taken] >= TIMEVALUE ( "03:30:00" )&& [Time Taken] < TIMEVALUE ( "04:00:00" ), "3.5 Hr - 4 Hr",
AND ( [Request Type] = "MR Routine", [Time Taken] >= TIMEVALUE ( "04:00:00" ) ), "> 4 Hr",
AND ( [Request Type] = "RN", INT ( 24 * [Time Taken] ) < 8 ), "< 8 Hrs",
[Request Type] = "RN"&& INT ( 24 * [Time Taken] ) >= 8&& INT ( 24 * [Time Taken] ) < 16, "8 - 16 hrs",
[Request Type] = "RN"&& INT ( 24 * [Time Taken] ) >= 16&& INT ( 24 * [Time Taken] ) < 24, "16 - 24 hrs",
[Request Type] = "RN"&& INT ( 24 * [Time Taken] ) >= 24&& INT ( 24 * [Time Taken] ) < 36, "24 hrs - 36 hrs",
[Request Type] = "RN"&& INT ( 24 * [Time Taken] ) >= 36&& INT ( 24 * [Time Taken] ) < 48, "36 hrs - 48 hrs",
[Request Type] = "RN"&& INT ( 24 * [Time Taken] ) >= 48, "> 48 hrs",
[Request Type] = "NA", "NA",INT ( 24 * [Time Taken] ))
si crea una medida por dax , debe modificarla.
if =
SWITCH (
TRUE (),
AND ( MAX ( [Request Type] ) = "MR", INT ( 24 * MAX ( [Time Taken] ) ) > 8 ), "> 8 Hrs",
AND ( MAX ( [Request Type] ) = "MR", INT ( 24 * MAX ( [Time Taken] ) ) <= 8 ), INT ( 24 * MAX ( [Time Taken] ) ),
AND (MAX ( [Request Type] ) = "MR Routine",MAX ( [Time Taken] ) < TIMEVALUE ( "00:30:00" )), "< 30 Min",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "00:30:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "01:00:00" ), "30 Min - 1 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "01:00:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "01:30:00" ), "1 Hr - 1.5 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "01:30:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "02:00:00" ), "1.5 Hr - 2 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "02:00:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "02:30:00" ), "2 Hr - 2.5 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "02:30:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "03:00:00" ), "2.5 Hr - 3 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "03:00:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "03:30:00" ), "3 Hr - 3.5 Hr",
MAX ( [Request Type] ) = "MR Routine"&& MAX ( [Time Taken] ) >= TIMEVALUE ( "03:30:00" )&& MAX ( [Time Taken] ) < TIMEVALUE ( "04:00:00" ), "3.5 Hr - 4 Hr",
AND (MAX ( [Request Type] ) = "MR Routine",MAX ( [Time Taken] ) >= TIMEVALUE ( "04:00:00" )), "> 4 Hr",
AND ( MAX ( [Request Type] ) = "RN", INT ( 24 * MAX ( [Time Taken] ) ) < 8 ), "< 8 Hrs",
MAX ( [Request Type] ) = "RN"&& INT ( 24 * MAX ( [Time Taken] ) ) >= 8&& INT ( 24 * MAX ( [Time Taken] ) ) < 16, "8 - 16 hrs",
MAX ( [Request Type] ) = "RN"&& INT ( 24 * MAX ( [Time Taken] ) ) >= 16&& INT ( 24 * MAX ( [Time Taken] ) ) < 24, "16 - 24 hrs",
MAX ( [Request Type] ) = "RN"&& INT ( 24 * MAX ( [Time Taken] ) ) >= 24&& INT ( 24 * MAX ( [Time Taken] ) ) < 36, "24 hrs - 36 hrs",
MAX ( [Request Type] ) = "RN"&& INT ( 24 * MAX ( [Time Taken] ) ) >= 36&& INT ( 24 * MAX ( [Time Taken] ) ) < 48, "36 hrs - 48 hrs",
MAX ( [Request Type] ) = "RN"&& INT ( 24 * MAX ( [Time Taken] ) ) >= 48, "> 48 hrs",
MAX ( [Request Type] ) = "NA", "NA",INT ( 24 * MAX ( [Time Taken] ) ))
Si no está bien, ¿puede compartir un archivo simple o más detalles?
Saludos
Apoyo a la comunidad Team_ Yalan Wu
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Muchas gracias por proporcionar una respuesta y explicación tan detalladas.
He aplicado esto, pero estoy recibiendo este error.
"Las expresiones que producen variantes de tipo de datos no se pueden usar para definir columnas calculadas".
¿Podría por favor hacerme saber qué hacer..
@amitchandak, Gracias por la respuesta. Permítanme probar algo como esto, que es totalmente nuevo para mí.
@PowerBIBeginer, AP2 y AO2 se reemplazarán con nombres de columna como [AP] y [AO]
Función Timevalue con tiempo
En lugar de tantos si se usa el interruptor true()
Switch(True(),
<Condición>, <Resultado>,
)
recomienda
Declaración de #PowerBI Switch-Case: https://www.youtube.com/watch?v=gelJWktlR80&list=PLPaNVDMhUXGaaqV92SBD5X2hk3TMNlHhb&index=56
Check out the November 2023 Power BI update to learn about new features.
Read the latest Fabric Community announcements, including updates on Power BI, Synapse, Data Factory and Data Activator.