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

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.

Reply
SergioTorrinha
Resolver II
Resolver II

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

¡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
SergioTorrinha
Resolver II
Resolver II

¡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.

¡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. 🙂

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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