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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Creación de medidas de crecimiento con datos faltantes

Hola, tengo problemas para calcular una solicitud que recibí y esperaba que alguien pudiera ayudar. Tengo una tabla que contiene el número total de contactos agrupados por varias columnas (como empresa y rol). La tabla tiene varias instantáneas de esos agregados al comienzo de cada mes más la fecha actual.


Estoy tratando de calcular el crecimiento de este recuento de contactos para imágenes QTD / YTD con el usuario teniendo la flexibilidad de seleccionar los meses en cuestión, pero teniendo problemas donde los datos no están disponibles para un punto en el tiempo como se ilustra en la matriz a continuación (usando Excel para poder reemplazar con datos ficticios).

Estructura de la tabla:

AS_OF_DATE

ACCOUNT_NAME

CONTACT_ROLE

NUM_CONTACTS

4/1/2022

Empresa A

Ingeniero

3

5/1/2022

Empresa A

Ingeniero

17

5/24/2022

Empresa A

Ingeniero

16

5/1/2022

Empresa A

Marketing

1

5/24/2022

Empresa A

Marketing

1

4/1/2022

Empresa A

Sin rol

3

5/1/2022

Empresa A

Sin rol

2

5/24/2022

Empresa A

Sin rol

2

4/1/2022

Empresa A

Ventas

1

4/1/2022

Empresa A

Principal

1

5/1/2022

Empresa A

Principal

1

5/24/2022

Empresa A

Principal

1

4/1/2022

Empresa A

Admin

1

5/1/2022

Empresa A

Admin

2

5/24/2022

Empresa A

Admin

2

5/1/2022

Empresa A

Gerente de Ventas

1

5/24/2022

Empresa A

Gerente de Ventas

1

5/1/2022

Empresa A

Gerente Técnico

1

5/24/2022

Empresa A

Gerente Técnico

1

Resultados de la matriz (se muestra como tabla dinámica):

hrafnkel11_0-1653494866857.png

Mi resultado esperado para el rol de marketing, por ejemplo, sería un crecimiento de contactos de +1 de 4/1 a 5/1, pero en este caso Power BI lo ignora porque ese rol no existe en un lado de la ecuación.

Actualmente estoy usando esta medida sin suerte:

Capacity Growth =
var _min = MIN(DATE_T[Date])
var _max = MAX(DATE_T[Date])
return
CALCULATE(
    SUM('CONTACT'[NUM_CONTACTS],
    FILTER(ALL(DATE_T[Date]),DATE_T[Date]= _max)          
            )
-  
CALCULATE(
    SUM('CONTACT'[NUM_CONTACTS],
    FILTER(ALL(DATE_T[Date]),DATE_T[Date]= _min)          
            )

Pero también he seguido el camino de usar esta columna calculada para obtener la cantidad anterior, luego comparar la cantidad actual con la anterior a través de una medida. Esto presenta problemas similares en torno a los datos que faltan en ambos lados de la ecuación.

Previous Contact Count = 
CALCULATE(
    MIN('CONTACT'[NUM_CONTACTS]),
    FILTER('CONTACT','CONTACT'[CONTACT_ROLE_ID] = EARLIER('CONTACT'[CONTACT_ROLE_ID]) &&
    'CONTACT'[AS_OF_DATE] < EARLIER('CONTACT'[AS_OF_DATE]))
    )

¿Alguna idea sobre cómo podría hacer esto?

¡Gracias!

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Solo para cerrar el ciclo de esto, terminé empujando la lógica a SQL ya que no podía descubrir cómo hacer que se calculara correctamente dentro de Power BI. Básicamente, apliqué todas las fechas de instantáneas faltantes para cada rol presente, luego las inserté de nuevo en la tabla con NUM_CONTACTS = 0. Me preocupaba el rendimiento, pero parece funcionar perfectamente bien.

@JamesFr06una vez que contabilicé los 0s, usé tu DAX para terminar el trabajo y funcionó perfectamente. ¡Gracias de nuevo por la ayuda!

Syndicate_Admin
Administrator
Administrator

Fórmula con formato más fácil de leer

MtD de crecimiento =
DÓNDE minperiode =
CALCULAR (
MIN ( 'Crecimiento del marketing'[AS_OF_DATE] ),
TODOSEXCEPTO ( 'Crecimiento del marketing', 'Crecimiento del marketing'[CONTACT_ROLE] )
)
DÓNDE período actual = 'Crecimiento del marketing'[AS_OF_DATE]
DÓNDE papel de contacto = 'Crecimiento del marketing'[CONTACT_ROLE]
DÓNDE período anterior =
CALCULAR (
MÁXIMO ( 'Crecimiento del marketing'[AS_OF_DATE] ),
TODOSEXCEPTO ( 'Crecimiento del marketing', 'Crecimiento del marketing'[CONTACT_ROLE] ),
'Crecimiento del marketing'[AS_OF_DATE] < período actual
)
DÓNDE actualscontact =
CALCULAR (
MÁXIMO ( 'Crecimiento del marketing'[NUM_CONTACTS] ),
TODOSEXCEPTO ( 'Crecimiento del marketing', 'Crecimiento del marketing'[CONTACT_ROLE] ),
'Crecimiento del marketing'[AS_OF_DATE] = período actual
)
DÓNDE anteriorcontacto =
CALCULAR (
MÁXIMO ( 'Crecimiento del marketing'[NUM_CONTACTS] ),
TODOSEXCEPTO ( 'Crecimiento del marketing', 'Crecimiento del marketing'[CONTACT_ROLE] ),
'Crecimiento del marketing'[AS_OF_DATE] = período anterior
)
DEVOLUCIÓN
SI (
período actual = minperiode,
«Crecimiento del marketing»[NUM_CONTACTS],
actualscontact - anteriorcontacto
)

Muchas gracias, James. Realmente aprecio la respuesta. Esta columna calculada parece darme los mismos resultados que hacer una columna calculada usando EARLIER para obtener el valor anterior, luego crear otra columna para restar las dos. El problema parece seguir siendo los casos en los que no hay valor en ninguno de los lados de la ecuación.

Por ejemplo, tengo dos imágenes a continuación: la primera es el recuento total de contactos por día y la 2ª es el resultado de la columna de crecimiento que publicó. Todo parece alinearse, excepto un caso como el rol Ventas que comenzó con un recuento de 1 y luego ya no apareció en el conjunto de datos después de eso. Lo que esperaría ver es un crecimiento de -1 el 1 de mayo para ese papel, pero se muestra en blanco. ¿Alguna idea de cómo evitar eso? Se siente casi como si necesitara APLICAR TODOS LOS VALORES POSIBLES EN AMBOS LADOS DE LA ECUACIÓN PARA QUE SE REPRESENTE CORRECTAMENTE, PERO SI LO HAGO EN SQL, EL TAMAÑO DE LA TABLA AUMENTARÁ ENORMEMENTE. Me imagino que habría una manera de hacer eso en DAX y sería menos costoso. ¡Gracias!

hrafnkel11_1-1653505221815.png

hrafnkel11_2-1653505234647.png

Hola

Me estoy quedando con filas faltantes. No logro retruir un cero para que se haga la sustracción. Si alguien puede ayudar

Gracias por intentarlo, James. Si alguien tiene algún otro consejo, ¡realmente lo agradecería! ¡Gracias!

Syndicate_Admin
Administrator
Administrator

Hola

Espero que esto sea lo que necesitas

MtD de crecimiento =
Dónde minperiode=calcular(min('Crecimiento del marketing'[AS_OF_DATE]),TODOSEXCEPTO('Crecimiento del marketing','Crecimiento del marketing'[CONTACT_ROLE]))
Dónde período actual='Crecimiento del marketing'[AS_OF_DATE]
Dónde papel de contacto='Crecimiento del marketing'[CONTACT_ROLE]
Dónde período anterior=calcular(MÁXIMO('Crecimiento del marketing'[AS_OF_DATE]),TODOSEXCEPTO('Crecimiento del marketing','Crecimiento del marketing'[CONTACT_ROLE]),'Crecimiento del marketing'[AS_OF_DATE]<período actual)
Dónde actualscontact=calcular(MÁXIMO('Crecimiento del marketing'[NUM_CONTACTS]),TODOSEXCEPTO('Crecimiento del marketing','Crecimiento del marketing'[CONTACT_ROLE]),'Crecimiento del marketing'[AS_OF_DATE]=período actual)
Dónde anteriorcontacto=calcular(MÁXIMO('Crecimiento del marketing'[NUM_CONTACTS]),TODOSEXCEPTO('Crecimiento del marketing','Crecimiento del marketing'[CONTACT_ROLE]),'Crecimiento del marketing'[AS_OF_DATE]=período anterior)
devolución
si(período actual=minperiode,'Crecimiento del marketing'[NUM_CONTACTS],actualscontact-anteriorcontacto)
JamesFr06_0-1653499119899.png

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors