cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Helper I
Helper I

Cálculo recursivo DAX en métrica y no en columna

Hola a todos

Me gustaría tener una métrica de recursividad (no una columna calculada) para usar en un gráfico.
Alowme para explicar el problema(se puede encontrar adjunto un archivo de escritorio PBI con datos ficticios para este problema):

En mi modelo de datos tengo 3 tablas:

  • dimDates - es sólo una tabla de calendario simple, con fechas entre 01-08-2020 y 30-09-2020
  • dimGeo - es una tabla que representa regiones geograféricas (ID) y subregiones (geoID)
  • facTable - es donde residen los datos

Aquí es cómo se construye el modelo de datos:

datamodel.PNG

Por lo tanto, me gustaría crear 3 métricas principales:

  • Nuevos casos: este es fácil de calcular. No es nada más que una suma de valores filtrados por un par de tipos:
    Nuevos casos : CALCULATE( [Numb Cases], facTable[Type] en "type_a","type_b","type_c"))
  • Casos de refilación - este es el complicado. 🙂
    Esta métrica debe calcularse de la siguiente manera:
    En la primera semana de datos, su siempre 0 en cualquier región/subregión
    En la segunda semana, y en adelante, su dado por la suma de Nuevos casos la semana pasada y los casos de recarga de la semana pasada
    He hecho una simulación de Excel para ayudar a entender (también incluí esta métrica en PBI, aunque sé que está calculada incorrectamente)
    Excel_simulation.PNG
  • Total de casos - esta métrica es "simplemente" la suma de nuevos casos + casos de refil

Lo que he logrado hacer correctamente, en el archivo de escritorio powerbi adjunto, fue crear la métrica Nuevos casos. Las métricas totales y de recarga se calculan erróneamente y me gustaría que me ayudaras en esta tarea, que entiendo que podría no ser simple.

PBI_simulation.PNG


Lo que me gustaría construir:

  • un gráfico de barras como el que hice en Excel pero con cifras nuevas, de recarga y totales correctamente calculadas.
  • 2 gráficos de líneas: uno solo para nuevos casos y otro con estuches de recarga.

Avísame si necesitas más información.
Gracias

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Helper I
Helper I

Re: Cálculo recursivo DAX en métrica y no en columna

¡Hola a todos!

¡Resolví mi propio problema! 🙂
Así es como lo hice, en caso de que alguien más esté llegando a este problema en el futuro:

La solución encontrada no era con DAX, sino con un buen SQL antiguo.
Lo que hice fue generar en SQL una consulta que devuelve una tabla específicamente para los cálculos de casos de recarga. Esta tabla fue el resultado de un simple CROSS JOIN, algo en esta línea:

SELECCIONAR DISTINTO
a.ProductID
,DATEADD(WW, DATEDIFF(WW, 7, '01-01-' + LEFT( dateID,4 ) ) + ( CAST( RIGHT( dateID, 2 ) AS int)-1), 7) WeekStart
,b.[geoID]
,b.[Tipo]
,b.value como Recargas
DE facTable a
CROSS JOIN (
Seleccione
Productid
,dateID como dateCode
,[geoID]
,[Tipo]
,SUM( [value] ) como valor
DE facTable
Dónde
DimProductID á 'xpto'
Y Escriba ('a','b','d')
Y dateID< ( SELECT MAX( dateID) FROM facTable WHERE ProductID á 'xpto')
GROUP BY [ProductID], [dateID ], [geoID],[Type]
) como b
DONDE a.ProductID á 'xpto' y DateCode< a.dateID

Luego cargué esta tabla en PBI y me conecté a las tablas dimensiones respectivas, y eso es todo 🙂
Espero que esto ayude a alguien en el futuro.
Gracias. 🙂

View solution in original post

2 REPLIES 2
Highlighted
Helper I
Helper I

Re: Cálculo recursivo DAX en métrica y no en columna

¡Hola a todos!

Estaba pensando que, tal vez, una tabla calculada ayudaría con los cálculos de recarga, específicamente para cuando quiero informar esa métrica con el geoID.


¿Sería una solución viable?
¿Cuáles serían los impactos en el rendimiento de esto, cuando los datos crecen a lo largo del tiempo (se trata de datos semanales, por cierto)?

Gracias de antemano.

Highlighted
Helper I
Helper I

Re: Cálculo recursivo DAX en métrica y no en columna

¡Hola a todos!

¡Resolví mi propio problema! 🙂
Así es como lo hice, en caso de que alguien más esté llegando a este problema en el futuro:

La solución encontrada no era con DAX, sino con un buen SQL antiguo.
Lo que hice fue generar en SQL una consulta que devuelve una tabla específicamente para los cálculos de casos de recarga. Esta tabla fue el resultado de un simple CROSS JOIN, algo en esta línea:

SELECCIONAR DISTINTO
a.ProductID
,DATEADD(WW, DATEDIFF(WW, 7, '01-01-' + LEFT( dateID,4 ) ) + ( CAST( RIGHT( dateID, 2 ) AS int)-1), 7) WeekStart
,b.[geoID]
,b.[Tipo]
,b.value como Recargas
DE facTable a
CROSS JOIN (
Seleccione
Productid
,dateID como dateCode
,[geoID]
,[Tipo]
,SUM( [value] ) como valor
DE facTable
Dónde
DimProductID á 'xpto'
Y Escriba ('a','b','d')
Y dateID< ( SELECT MAX( dateID) FROM facTable WHERE ProductID á 'xpto')
GROUP BY [ProductID], [dateID ], [geoID],[Type]
) como b
DONDE a.ProductID á 'xpto' y DateCode< a.dateID

Luego cargué esta tabla en PBI y me conecté a las tablas dimensiones respectivas, y eso es todo 🙂
Espero que esto ayude a alguien en el futuro.
Gracias. 🙂

View solution in original post

Helpful resources

Announcements
Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021

Tech Marathon

Maratón de Soluciones de Negocio Microsoft

Una semana de contenido con +100 sesiones educativas, consultorios, +10 workshops Premium, Hackaton, EXPO, Networking Hall y mucho más!

Top Solution Authors