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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Syndicate_Admin
Administrator
Administrator

DAX || Power BI || Calaculado

Hola a todos
La siguiente es 1 tabla:

maverickf17_0-1753089371145.png


La siguiente es la tabla de calendario:

maverickf17_1-1753089417071.png


¿Qué estoy tratando de lograr?
--> Quiero crear un dax dinámico que calcule la suma de los nuevos suscriptores en función de condt
Por ejemplo, el condt puede ser 1) mes no

dax1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)
calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))
----------------------------------------------------------------------------------------
A continuación se muestra el resultado
maverickf17_2-1753089682756.png

-------------------------------------------------
1) La primera pregunta sería por qué obtengo calcaulate_new_subs valor durante todo el mes en el sitio, no he hecho clic en nada en la cortadora.
Idealmente, se debería haber suministrado 0 de acuerdo con el dax y el espacio en blanco debería devolverse en la matriz correcta

--------------------------------
2) La segunda pregunta sería si soy suma, soy capaz de lograr el mismo resultado que el anterior.
¿Cuál es la diferencia entre usar

dax1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y
Sum_new_subscriber =SUMA(net_subscriber_growth[NuevosSuscriptores])
si el resultado final es el mismo solo en este escenario?

maverickf17_3-1753090712255.png

-----------------------------------------------------------------------------------------
3) Si estoy usando todo el filtro de cálculo interno.

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(all(net_subscriber_growth),MES(net_subscriber_growth[Mes]) = [month_selection]))

Obtengo el resultado como se muestra a continuación.

maverickf17_4-1753091047600.png


¿Es este el comportamiento esperado de ALL Dax?
----------------------------------------------------------------------------------
4) La cuarta pregunta sería cuál es la diferencia entre
1)CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),FILTRO(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y

2) CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),MES(net_subscriber_growth[Mes]) = [month_selection])


---------------------------------------------

Gracias
Arjun M

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Las respuestas se encuentran a continuación, basadas en el siguiente código

DAX1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)
calculate_new_subs = CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),FILTRO(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

1) La primera pregunta sería por qué obtengo calcaulate_new_subs valor durante todo el mes en el sitio, no he hecho clic en nada en la cortadora.
Idealmente, se debería haber suministrado 0 de acuerdo con el dax y el espacio en blanco debería devolverse en la matriz correcta

Respuesta: El código desencadena la transición de contexto para cada mes, por lo que siempre verá los meses en el objeto visual. Cambie el código según:

calculate_new_subs =
Selección de VAR =[month_selection]
DEVOLUCIÓN

CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MONTH(net_subscriber_growth[Month]) = selección ))

--------------------------------
2) La segunda pregunta sería si soy suma, soy capaz de lograr el mismo resultado que el anterior.
¿Cuál es la diferencia entre usar

DAX1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y
Sum_new_subscriber =SUMA(net_subscriber_growth[NuevosSuscriptores])
si el resultado final es el mismo solo en este escenario?
Respuesta: vea la primera pregunta, estaba activando la transición de contexto para que siempre vea el mes actual y por lo tanto CALCULAR es inútil con ese código (vea mi versión para obtener lo que desea)

FBergamaschi_0-1753093857991.png

-----------------------------------------------------------------------------------------
3) Si estoy usando todo el filtro de cálculo interno.

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(all(net_subscriber_growth),MES(net_subscriber_growth[Mes]) = [month_selection]))

Obtengo el resultado como se muestra a continuación.

FBergamaschi_1-1753093857975.png


¿Es este el comportamiento esperado de ALL Dax?

Respuesta: sí, está considerando toda la tabla para cada mes con ese código, y todavía está activando la transición de contexto, por lo que ahora ve todos los meses para cada mes
----------------------------------------------------------------------------------
4) La cuarta pregunta sería cuál es la diferencia entre
1)CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),FILTRO(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y

2) CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),MES(net_subscriber_growth[Mes]) = [month_selection])

Answer

2) se traduce automáticamente a

CALCULATE(
suma(net_subscriber_growth[NewSubscribers]),
FILTRO (
TODOS (
net_subscriber_growth[Month]) ),
net_subscriber_growth[Mes] =
[month_selection]
)
)

Entonces, en el caso 2, solo está aplicando la condición a la columna del mes, ignorando los filtros si existen (como el mes seleccionado), en el primer caso, está aplicando la condición a cada fila de toda la tabla y está considerando los filtros aplicados a esa tabla (por ejemplo, el mes)

El caso 2) es más eficiente
---------------------------------------------

Si esto ayudó, considere dar felicitaciones y marcar como una solución

@me en las respuestas o perderé tu hilo

considere la posibilidad de votar esta idea de Power BI

Francesco Bergamaschi

MBA, M.Eng, M.Econ, Profesor de BI

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Las respuestas se encuentran a continuación, basadas en el siguiente código

DAX1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)
calculate_new_subs = CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),FILTRO(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

1) La primera pregunta sería por qué obtengo calcaulate_new_subs valor durante todo el mes en el sitio, no he hecho clic en nada en la cortadora.
Idealmente, se debería haber suministrado 0 de acuerdo con el dax y el espacio en blanco debería devolverse en la matriz correcta

Respuesta: El código desencadena la transición de contexto para cada mes, por lo que siempre verá los meses en el objeto visual. Cambie el código según:

calculate_new_subs =
Selección de VAR =[month_selection]
DEVOLUCIÓN

CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MONTH(net_subscriber_growth[Month]) = selección ))

--------------------------------
2) La segunda pregunta sería si soy suma, soy capaz de lograr el mismo resultado que el anterior.
¿Cuál es la diferencia entre usar

DAX1)

month_selection = SELECTEDVALUE('calendar'[month_no],0)
dax2)

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y
Sum_new_subscriber =SUMA(net_subscriber_growth[NuevosSuscriptores])
si el resultado final es el mismo solo en este escenario?
Respuesta: vea la primera pregunta, estaba activando la transición de contexto para que siempre vea el mes actual y por lo tanto CALCULAR es inútil con ese código (vea mi versión para obtener lo que desea)

FBergamaschi_0-1753093857991.png

-----------------------------------------------------------------------------------------
3) Si estoy usando todo el filtro de cálculo interno.

calculate_new_subs = CALCULATE(sum(net_subscriber_growth[NewSubscribers]),FILTER(all(net_subscriber_growth),MES(net_subscriber_growth[Mes]) = [month_selection]))

Obtengo el resultado como se muestra a continuación.

FBergamaschi_1-1753093857975.png


¿Es este el comportamiento esperado de ALL Dax?

Respuesta: sí, está considerando toda la tabla para cada mes con ese código, y todavía está activando la transición de contexto, por lo que ahora ve todos los meses para cada mes
----------------------------------------------------------------------------------
4) La cuarta pregunta sería cuál es la diferencia entre
1)CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),FILTRO(net_subscriber_growth,MES(net_subscriber_growth[Mes]) = [month_selection]))

y

2) CALCULAR(suma(net_subscriber_growth[NuevosSuscriptores]),MES(net_subscriber_growth[Mes]) = [month_selection])

Answer

2) se traduce automáticamente a

CALCULATE(
suma(net_subscriber_growth[NewSubscribers]),
FILTRO (
TODOS (
net_subscriber_growth[Month]) ),
net_subscriber_growth[Mes] =
[month_selection]
)
)

Entonces, en el caso 2, solo está aplicando la condición a la columna del mes, ignorando los filtros si existen (como el mes seleccionado), en el primer caso, está aplicando la condición a cada fila de toda la tabla y está considerando los filtros aplicados a esa tabla (por ejemplo, el mes)

El caso 2) es más eficiente
---------------------------------------------

Si esto ayudó, considere dar felicitaciones y marcar como una solución

@me en las respuestas o perderé tu hilo

considere la posibilidad de votar esta idea de Power BI

Francesco Bergamaschi

MBA, M.Eng, M.Econ, Profesor de BI

Oye, @FBergamaschi ¿podemos conectarnos por favor a través de una reunión?
¿Si está bien?
Por favor, envíame un mensaje directo.

Syndicate_Admin
Administrator
Administrator

@maverickf17 , puedo ver que tienes una fecha en el mes. Une esto con la tabla de fechas y crea medidas acumulativas

Asegúrese de unirse con la fecha de la tabla de fechas y filtre usando la tabla de fechas.

Para los nuevos suscriptores, la suma de la tabla de fechas de filtro solo es suficiente

SUM(Tabla[Nuevos suscriptores])

Este período comienza o hasta el mes pasado total de suscriptores

BOP= CALCULATE(SUM(Tabla[Nuevos suscriptores]),filter(all(date),date[date] <min(date[date]))) -
CALCULATE(SUM(Tabla[Suscriptores abandonados]),filter(all(date),date[date] <min(date[date])))

Este período Fin o hasta este mes total de suscriptores
EOP= CALCULATE(SUM(Table[New Subscribeers]),filter(all(date),date[date] <=Max(date[date]))) -
CALCULATE(SUM(Table[Suscriptores abandonados]),filter(all(date),date[date] <= Max(date[date])))

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

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

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors