cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Helper I
Helper I

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

Accepted Solutions
Highlighted
Super User III
Super User III

Re: Múltiples condiciones en la declaración OR

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? Please mark my post as a solution! Kudos are also appreciated!

Proud to be a Super User!




View solution in original post

9 REPLIES 9
Highlighted
Super User IV
Super User IV

Re: Múltiples condiciones en la declaración OR

@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(<>,<>)



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

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?

Highlighted
Community Support
Community Support

Re: Múltiples condiciones en la declaración OR

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.
Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

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] )
)

Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

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.

Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

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

Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

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!!

Highlighted
Super User III
Super User III

Re: Múltiples condiciones en la declaración OR

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? Please mark my post as a solution! Kudos are also appreciated!

Proud to be a Super User!




View solution in original post

Highlighted
Helper I
Helper I

Re: Múltiples condiciones en la declaración OR

¡¡Gracias!!

¡Esto es exactamente lo que estaba buscando!

Impresionante1

Helpful resources

Announcements
Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021

Tech Marathon

Maratón de Soluciones de Negocio Microsoft

Una semana de contenido con +100 sesiones educativas, consultorios, +10 workshops Premium, Hackaton, EXPO, Networking Hall y mucho más!

Top Solution Authors