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.
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!!
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.
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.
Mostrar la fórmula para [Base_IBT]
Hola Ibendlin, aquí tienes lo que te piden. Es sólo una medida base típica:
o por ALL() ?
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", {}
)
"
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:
@lbendlin, también probó su método. Parece lanzar un error también:
¿Alguna idea sobre por qué está diciendo que la expresión se refiere a varias columnas?
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |