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

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. Register Now

Reply
Anonymous
Not applicable

Múltiples condiciones en la declaración OR

Estoy tratando de modificar una medida mediante la adición de una tercera condición a una declaración OR, pero se han encontrar con un pequeño problema! Parece que no puede tener varias condiciones en una condición en una instrucción OR.

Así que aquí está el cálculo:

CALCULATE( SUMX( DimFlightLeg, DimFlightLeg[Capacity] * DimFlightLeg[StageLength]) , DimFlightLeg[OperatorCode] á "SY" , DimFlightLeg[Status] á 1 ? DimFlightLeg[Estado] á 5o DimFlightLeg[Status] <> 1 && DimFlightLeg[DepartureDate] < 06/25/2019 ,

DimFlightLeg[Vuelo como número] < 8000 && NOT (DimFlightLeg[Vuelo como número] > 1000 && DimFlightLeg[Vuelo como un número] <-1099 ) ,

USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate]) ,

USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] ) )

El problema es con la tercera condición en la sentencia OR. ¿Cómo puede tener varias condiciones aquí? ¿El ? debe ser reemplazado por la función OR real? ¡Estoy un poco perdido!

Cualquier perspicacia o ayuda se apreciaría enormemente, ya que soy bastante nuevo en DAX!

¡¡Gracias!!

1 ACCEPTED SOLUTION

Me di cuenta de que tenía el valor de fecha codificado de forma rígida como "texto", así que lo cambié para usar la función DATE. También cambié las cláusulas de filtro para hacer lo que creo que estás buscando.

AsM Volado :
CALCULAR (
SUMX ( DimFlightLeg, DimFlightLeg[Capacidad] * DimFlightLeg[StageLength] ),
DimFlightLeg[OperatorCode] á "SY",
FILTRO (
ALL ( DimFlightLeg[Status], DimDimFlightLeg[DepartureDate] ),
O (
DimFlightLeg[Estado] EN 1, 5o,
Y (
DimFlightLeg[Estado] - 0,
DimFlightLeg[DepartureDate] < DATE ( 2019, 6, 19 )
)
)
),
DimFlightLeg[Vuelo como número] < 8000
&& NOT ( DimFlightLeg[Vuelo como número] > 1000
&& DimFlightLeg[Vuelo como número] <-1099 ),
USERELATIONSHIP ( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate] ),
USERELATIONSHIP ( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] )
)

Si esto funciona para usted, márquelo como la solución. Los elogios también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


View solution in original post

9 REPLIES 9
v-eachen-msft
Community Support
Community Support

Hola @ansonee1 ,

Pruebe la siguiente fórmula y compruebe si funciona:

OR (
    DimFlightLeg[Status] IN { 1, 5 },
    DimFlightLeg[Status] <> 1
        && DimFlightLeg[DepartureDate] < 06 / 25 / 2019
)

Community Support Team _ Eads
If this post helps, then please consider Accept it as the solution to help the other members find it.
Anonymous
Not applicable

Han pasado casi dos semanas... preguntándose si iba a ser capaz de responder a mi última pregunta con respecto a su respuesta: ¿Cómo encaja eso en la medida existente?

Sigo intentando que esto funcione.

Gracias

Anonymous
Not applicable

Gracias... pero, ¿dónde encaja este sector de código en todo el cálculo?

Esta es la medida original:

CALCULATE(
SUMX( DimFlightLeg, DimFlightLeg[Capacidad] * DimFlightLeg[StageLength])
, DimFlightLeg[OperatorCode] á "SY"
, DimFlightLeg[Estado] á 1 ? DimFlightLeg[Estado] á 5
, DimFlightLeg[Vuelo como número] < 8000 &&
NO (DimFlightLeg[Vuelo como número] > 1000 &&
DimFlightLeg[Vuelo como número] <- 1099
)
, USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate])
, USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] )
)

Anonymous
Not applicable

Así que he probado un par de cosas diferentes, siendo esta una de ellas:

ASMs Flown TEST:- CALCULATE( SUMX( DimFlightLeg, DimFlightLeg[Capacity] * DimFlightLeg[StageLength]), FILTER(DimFlightLeg, DimFlightLeg[Status] á 1 ? DimFlightLeg[Estado] n.o 5),

FILTRO( CROSSJOIN( ALL(DimFlightLeg[Status]), ALL(DimFlightLeg[DepartureDate]) ), DimFlightLeg[Status] <> 1 && DimFlightLeg[DepartureDate] < 06/25/2019 ) ,

DimFlightLeg [OperatorCode] á "SY",

DimFlightLeg[Vuelo como número] < 8000 && NOT (DimFlightLeg[Vuelo como número] > 1000 && DimFlightLeg[Vuelo como un número] <-1099 ) ,

USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate]) ,

USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] ) )

En este caso, el primer FILTER devuelve una "tabla" que cumple la condición OR. Dicho esto, el segundo FILTER es que asumo devolver cero filas, porque esencialmente no hay filas de la primera coincidencia de filtro te segundo.

Por lo tanto, pensó que CROSSJOIN evaluaría los datos por separado del primer FILTER, pero no parece que ese sea el caso.

Esencialmente necesito todas las filas que coincidan con mi quirófano original y combinar esas filas con los datos devueltos desde el segundo o luego aplicar el último par de filtros en el código del operador y el número de vuelo.

Anonymous
Not applicable

En toda mi investigación sobre esto, he encontrado que varias personas se han encontrado con el mismo problema, y no fue un error de sintaxis, sino una limitación con lo que puede hacer con respecto a las declaraciones OR y el número de columnas permitidas. Todo lo que he visto dice que una condición en un quirófano solo puede hacer referencia a UNA columna.

Por lo tanto, este cálculo funciona bien:

ASM Flown:=  Calcular( SUMX( DimFlightLeg, DimFlightLeg[Capacidad] * DimFlightLeg[StageLength])
    , DimFlightLeg[OperatorCode] = "Ella"	
    , DimFlightLeg[Estado] = 1 || DimFlightLeg[Estado] = 5
	, DimFlightLeg[Vuelo Como un Número] < 8000 &&
    No (DimFlightLeg[Vuelo Como un Número] > 1000 &&        DimFlightLeg[Vuelo Como un Número] <- 1099
        )
	, USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[Fecha de salida])
	, USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] )
)

Así que, bastante sencillo. Ahora, trato de añadir ese tercer . condición donde también quiero evaluar DimFlightLeg en Status y DepartureDate. Dame todo donde el OperatorCode es "SY" y donde el Staus es 1 O 5 O el estado es 0 Y el DepartureDate es menor que 6/19/2019:

ASM Flown:=  Calcular( SUMX( DimFlightLeg, DimFlightLeg[Capacidad] * DimFlightLeg[StageLength])
    , DimFlightLeg[OperatorCode] = "Ella"	
    , DimFlightLeg[Estado] = 1 || DimFlightLeg[Estado] = 5 || DimFlightLeg[Estado] = 0 && DimFlightLeg[Fecha de salida] < "06/19/2019"
	, DimFlightLeg[Vuelo Como un Número] < 8000 &&
    No (DimFlightLeg[Vuelo Como un Número] > 1000 &&        DimFlightLeg[Vuelo Como un Número] <- 1099
        )
	, USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[Fecha de salida])
	, USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] )
)

Si esto fuera simple SQL, thtis estaría bien, pero este cálculo produce un error:

Medir 'Medidas de prueba'[ASM Flown] : La expresión contiene varias columnas, pero solo se puede utilizar una sola columna en una expresión True/False que se utiliza como expresión de filtro de tabla.

Incluso si encierra la tercera condición OR en los parantes, sigue lanzando el mismo error.

Pensé en usar FILTER, pero eso devolvería los resultados incorrectos, ya que los FILTER son iterativos (creo que es el verbage correcto), y cada FILTRO consecutivo haría referencia a la instrucción FILTER anterior. Por lo tanto, al hacer un FILTER en el estado 1 se devolverían todas las filas en las que el estado es 1, y el siguiente FILTRO en Sttus 5 no devolvería nada, ya que el conjunto de resultados anterior solo contiene filas en las que el estado es 1.

Sólo estoy tratando de hacer un simple "compuesto" O que esa es una condición con dos columnas. Si esto fuera SQL, sería un slam dunk literalmente:

Seleccione.......De DimFlightLegDóndeEstado = 1
OEstado = 5
O
(Estado = 0 Y FECHA DE SALIDA < '06/19/2019')

Una vez más, soy bastante nuevo en DAX, lo siento mucho... pero no puedo creer que sea tan difícil? ¿O lo es? ¡Ni idea!

¡¡Gracias!!

Me di cuenta de que tenía el valor de fecha codificado de forma rígida como "texto", así que lo cambié para usar la función DATE. También cambié las cláusulas de filtro para hacer lo que creo que estás buscando.

AsM Volado :
CALCULAR (
SUMX ( DimFlightLeg, DimFlightLeg[Capacidad] * DimFlightLeg[StageLength] ),
DimFlightLeg[OperatorCode] á "SY",
FILTRO (
ALL ( DimFlightLeg[Status], DimDimFlightLeg[DepartureDate] ),
O (
DimFlightLeg[Estado] EN 1, 5o,
Y (
DimFlightLeg[Estado] - 0,
DimFlightLeg[DepartureDate] < DATE ( 2019, 6, 19 )
)
)
),
DimFlightLeg[Vuelo como número] < 8000
&& NOT ( DimFlightLeg[Vuelo como número] > 1000
&& DimFlightLeg[Vuelo como número] <-1099 ),
USERELATIONSHIP ( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate] ),
USERELATIONSHIP ( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] )
)

Si esto funciona para usted, márquelo como la solución. Los elogios también son apreciados. Por favor, avísame si no.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Anonymous
Not applicable

¡¡Gracias!!

¡Esto es exactamente lo que estaba buscando!

Impresionante1

amitchandak
Super User
Super User

@ansonee1, como son de una mesa, los pongo en un filtro

CALCULATE( SUMX( DimFlightLeg, DimFlightLeg[Capacity] * DimFlightLeg[StageLength]) , filter(DimFlightLeg, DimFlightLeg[OperatorCode] á "SY" && ( DimFlightLeg[Status] ? DimFlightLeg[Estado] á 5o DimFlightLeg[Status] <> 1 ) && DimFlightLeg[DepartureDate] < 06/25/2019 &&
DimFlightLeg[Vuelo como número] < 8000 && NOT (DimFlightLeg[Vuelo como número] > 1000 && DimFlightLeg[Vuelo como número] <-1099 )) ,
USERELATIONSHIP( DimDateDeparture[Departure_Date], DimFlightLeg[DepartureDate]) ,
USERELATIONSHIP( DimFlightLeg[FlightLegID], FactPassengerLeg[FlightLegID] ) )

Utilice paréntesis para combinar OR dentro de una unidad, siempre que corresponda. También puede utilizar AND(<>,<>) , OR(<>,<>)

Anonymous
Not applicable

Gracias por la respuesta, pero un problema: la última condición OR es una condición "completa". Así que no es que el estado puede ser 1, 5, o no igual a 1 y luego evaluar la fecha. La tercera condición debe cumplir los dos criterios: status <> 1 Y fecha < 6/25/2019. El estado es 1, o el estado es 5, o el estado no es <>1 Y la fecha < 6/25/2019.

Luego, después de que se evalúe ese quirófano y se filtren los resultados, aplique el otro filtro: DimFlightLeg[Flight as a Number] < 8000 && NOT (DimFlightLeg[Flight as a Number] >- 1000 && DimFlightLeg[Flight as a Number] <- 1099 )) .

Usando su calc, devuelve cero filas, que no es el resultado esperado.

¿Tiene que haber dos filtros?

Helpful resources

Announcements
March Fabric Community Update

Fabric Community Update - March 2024

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

Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

Fabric Partner Community

Microsoft Fabric Partner Community

Engage with the Fabric engineering team, hear of product updates, business opportunities, and resources in the Fabric Partner Community.

Top Solution Authors