Forum Discussion
SWITCH-IF y BLANKS.
¡Hola a todos!
Tengo un presupuesto para mis suministros. Hay algunos suministros presupuestados que, más adelante, no se utilizan. Por lo tanto, al devolver valores, estoy haciendo lo siguiente:
1) Primero almaceno en un var cada presupuesto (ppto).
2) Luego aplico esta fórmula de retorno:
return IF (ISBLANK([Total factura consumo]),BLANK(),SWITCH(selectedConsumo,
"Electricidad",pptoLuz+0,
"Carburante", pptoCarburante+0,
"Telefonía", pptoTelefoniaT+0,
"Gas natural", pptoGas+0,
"Agua consumo",pptoAgua+0,
"Gasoil", pptoGasoil+0,
pptoAgua+pptoCarburante+pptoGas+pptoGasoil+pptoLuz+pptoTelefoniaT
))
Pero mi problema es que, si no hay consumo (Total factura consumo) en la matriz, obtengo un valor erróneo para el subtotal, ya que suma todas las cosas presupuestadas. ¿Hay alguna forma de lidiar con la selección? Es decir, si solo se selecciona uno está funcionando bien, pero si selecciono dos o más, comienza a sumar todo (si es un valor de consumo o no).
No sé si me he aclarado.
Gracias de antemano
7 Replies
- Syndicate_Admin
Administrator
@mlsx4 seguirá haciéndolo, lo que se puede hacer es agregar alguna columna para crear una distinción.
También cambiar
ISBLANK([Total factura consumo])Para
ISBLANK([Total factura consumo]) || [Total factura consumo]<>0Gracias
- Syndicate_Admin
Administrator
Si cambio a la línea que has escrito se pone peor:
Esto es un centro. Este mes solo tengo consumos de luz y gas (que son valores normales), por lo que el subtotal debería ser: 6100€ pero como veis, el subtotal y otros valores devuelven la suma del total presupuestado.
- Syndicate_Admin
Administrator
@mlsx4 Lo que sucede con la instrucción switch es que solo se selecciona un valor y si se seleccionan dos, la situación pasará a la respuesta else.
Para este trabajo, se deben usar varias instrucciones IF y, en función de eso, se agregarán valores.
- Syndicate_Admin
Administrator
Hola de nuevo @ChiragGarg2512 ,
He cambiado por un Switch (TRUE()) que es el mismo que varios IFS y todavía tengo el mismo problema. Si lo dejo sin ninguna opción predeterminada, no mostrará nada. Si pongo la suma, no funciona
return IF (ISBLANK([Total factura consumo]),BLANK(),SWITCH(TRUE(), SELECTEDVALUE(CONSUMOS[Tipo consumo])="Electricidad",pptoLuz+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Carburante", pptoCarburante+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Telefonía", pptoTelefoniaT+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Gas natural", pptoGas+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Gas propano",pptoGas+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Agua consumo",(pptoAgua*0.95)+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Agua Hidrantes",(pptoAgua*0.05)+0, SELECTEDVALUE(CONSUMOS[Tipo consumo])="Gasoil", pptoGasoil+0 )) - Syndicate_Admin
Administrator
@mlsx4 Si desea continuar trabajando con la instrucción switch, tendrá que crear todas las combinaciones. Si el requisito es dar solo la suma del valor seleccionado, cree una variable para cada Tipo consumo usando la instrucción if y devuelva la suma de todas las variables.
Escribir la fórmula dax para cada variable puede ser así:
var _Electricidad = if(ISBLANK([Total factura consumo], 0, `value`)
Devuelve la suma de todas las variables.
- Syndicate_Admin
Administrator
Voy a recapitular de nuevo porque creo que no estoy explicando bien. Mi modelo tiene cierta complejidad...
Tengo una tabla con presupuesto (no todos los consumos están presupuestados) y tengo una tabla con consumos (precio en €, consumo, etc.). Son para diferentes centros, por lo tanto, también tengo una mesa de Centros. Y, por supuesto, una tabla de calendario. Estas son las tablas que participan en la ecuación.
Ahora, la forma en que obtengo el presupuesto es leyendo la cuenta contable. En este caso, todo comienza por 628. Así que creé una variable para cada uno. Por ejemplo, así:
var waterBudget= ABS(CALCULATE(SUM('BUDGETS'[€ MONTH]),LEFT('ACCOUNTS'[Accounting account],3)=="628" && RIGHT('ACCOUNTS'[Accounting account],3)=="001"))La razón es que en el Sistema General de Contabilidad incluimos el centro en el medio. Digamos que en el centro uno, el suministro de agua tendrá este formato: 62801xx001.
Entonces, una vez que tengo el valor de cada valor, quiero compararlo con el consumo real en €.Y aquí es donde comienza mi problema con los filtros y los valores devueltos... Si le doy la fórmula como el mensaje a continuación (nada por defecto en switch):
Si hago mi primera opción de devolver la suma, también se llevan los suministros presupuestados aunque no tengan consumo (por eso intenté comprobar si el total de la factura de consumo es 0).
Creo que no puedo sumar todas las variables de ninguna manera. Me estoy volviendo loco con esto. No sé si lo he explicado correctamente. Pero necesito ver la suma de los subtotales y no sé cómo lograrlo
- Syndicate_Admin
Administrator
Por cierto, no tengo ninguna preferencia por switch o if. Creo que switch es más limpio, pero creo que usar ifs tampoco resuelve mi problema