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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Filtro condicional en diferentes tablas

Hola a todos.


Tengo una pregunta de optimización. Actualmente tengo una medida que devuelve los valores correctos en los que estoy buscando. La medida es la siguiente:

VAR _DateFilter = DATESBETWEEN(Dim_Calendar[Date], _StartDate, _EndDate)

VAR _RegExp = 
SWITCH(_SelectedValue,
"AB", CALCULATE([Base_IBT], _DateFilter, ALL(Dim_PL_Hierarchy)), 
"CB", CALCULATE([Base_IBT], _DateFilter, ALL(Dim_Geo_Hierarchy)),
"ZY", CALCULATE([Base_IBT], _DateFilter)
)


RETURN

DIVIDE(_RegExp, _Threshold)

Como pueden ver, estoy llamando a mi medida tres veces con cada criterio de filtro siendo ligeramente diferente. Mi medida podría evaluarse tres veces incluso si está anidada dentro de la instrucción SWITCH. Puede encontrar más información sobre cómo optimizar los cálculos aquí:
https://www.sqlbi.com/articles/optimizing-mutually-exclusive-calculations/

Entonces, lo que quiero saber es... ¿Hay alguna manera de establecer condicionalmente qué tablas elocciono en lugar de calcular tres veces? Algo similar a lo que quiero hacer:

VAR _DateFilter = DATESBETWEEN(Dim_Calendar[Date], _StartDate, _EndDate)

VAR _FilterCriteria = // Of course, this does not work
SWITCH( _SelectedValue,
"AB", ALL(Dim_PL_Hierarchy),
"CB", ALL(Dim_Geo_Hierarchy),
"ZY", BLANK()
)

// I want to build something like this, instead
VAR _RegExp = CALCULATE([Base_IBT], _DateFilter, _FilterCriteria)

RETURN

DIVIDE(_RegExp, _Threshold)

Esperemos que esto sea de alguna manera posible. Cualquier ayuda sería muy apreciada!!

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

Hola @hnguyen76 ,
lo siento, no presté suficiente atención a su caso de uso real.
Aunque {} es válido cuando se utiliza directamente como reemplazo de tabla en un CALCULATE, por ejemplo,

no se puede utilizar en una instrucción SWITCH. Al igual que cualquier otra expresión de tabla no se puede utilizar allí:
SWITCH y IF tienen que devolver valores escalares, por lo que no puede crear expresiones de tabla condicional en variables DAX con ellos desafortunadamente.

Syndicate_Admin
Administrator
Administrator

He estado golpeando alrededor de esto por un tiempo. Creo que este mensaje de error lo dice más sucintamente

La expresión True/False no especifica una columna. Cada expresión True/False utilizada como expresión de filtro de tabla debe hacer referencia exactamente a una columna.

No he encontrado una manera de evitar esto. Parece que su enfoque original es el único que funciona ya que cada filtro de cálculo allí realmente sólo utiliza una columna. No parece ser posible intercambiar columnas en caliente dentro de un filtro.

La cosa {} o ALL() es un arenque rojo, no relacionado con el problema.

Syndicate_Admin
Administrator
Administrator

Mostrar la fórmula para [Base_IBT]

Hola Ibendlin, aquí tienes lo que te piden. Es sólo una medida base típica:

base_ibt.png

Syndicate_Admin
Administrator
Administrator

o por ALL() ?

Syndicate_Admin
Administrator
Administrator

Hola @hnguyen76 ,
el código probablemente funcionará si reemplaza blank() (que devuelve un valor escalar) por una tabla vacía {} :

VAR _FilterCriteria = // Of course, this does not work
SWITCH( _SelectedValue,
"AB", ALL(Dim_PL_Hierarchy),
"CB", ALL(Dim_Geo_Hierarchy),
"ZY", {}
)
Syndicate_Admin
Administrator
Administrator

"

Of course, this does not work

"

¿Quieres dar más detalles? Puede asignar tablas a variables. Los filtros son tablas. ("Todo en DAX es una tabla"). Así que esto debería funcionar muy bien, si es un poco despilfarrador (especialmente para mesas grandes)

@ImkeF , desafortunadamente Power BI está lanzando un error con su sugerencia:
error1.png

@lbendlin, también probó su método. Parece lanzar un error también:
error2.png

¿Alguna idea sobre por qué está diciendo que la expresión se refiere a varias columnas?

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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