The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Tengo algunos datos semanales de stock, que se parece a esto
Fin de semana | SOH actual | En | OUT |
1/09/2019 | 4992 | 218 | 100 |
8/09/2019 | 22 | 135 | |
15/09/2019 | 200 | 113 | |
22/09/2019 | 5050 | 246 | 128 |
29/09/2019 | 213 | 151 | |
6/10/2019 | 166 | 160 | |
13/10/2019 | 88 | 94 | |
20/10/2019 | 240 | 118 |
Quiero añadir una columna calculada para determinar el stock disponible, donde el cálculo es:
SOH (la semana pasada) + IN - OUT
Sólo tengo información SOH real para algunos períodos, así que en ese caso, necesito usar el número SOH calculado en lugar de real, usando la fórmula (de excel):
CALC SOH ?
IF(ISBLANK(SOH real (LW)),
CALC SOH (LW) + IN - OUT,
SOH REAL (LW) + IN - OUT
Mi columna calculada para SOH (LW) es:
Cuando hago esto en Power BI, obtengo una referencia circular. No puedo averiguar cómo implementar esto, por favor ayuda!
Solved! Go to Solution.
ha actualizado el DAX en función del resultado esperado.
Column =
VAR lastsohdate=maxx(FILTER('Table','Table'[Week end]<EARLIER('Table'[Week end])&&NOT(ISBLANK('Table'[Actual SOH]))),'Table'[Week end])
VAR lastsoh=maxx(FILTER('Table','Table'[Week end]=lastsohdate),'Table'[Actual SOH])
return if(ISBLANK('Table'[Actual SOH]),lastsoh+sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>lastsohdate),'Table'[IN])-sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>lastsohdate),'Table'[OUT]),'Table'[Actual SOH])
Para la respuesta tardía, he estado bastante ocupado estos días.
Column =
VAR lastsohdate=MAXX(FILTER('Table','Table'[Date]<EARLIER('Table'[Date])&&'Table'[ACTUAL SOH]<>0&&'Table'[State]=EARLIER('Table'[State])),'Table'[Date])
VAR lastsoh=maxx(FILTER('Table','Table'[Date]=lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[Actual SOH])
return if(ISBLANK('Table'[Actual SOH]),lastsoh+sumx(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date])&&'Table'[Date]>lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[IN])-sumx(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date])&&'Table'[Date]>lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[OUT]),'Table'[Actual SOH])
¿Es esto lo que quieres?
Column =
VAR lastsohdate=maxx(FILTER('Table','Table'[Week end]<EARLIER('Table'[Week end])&&NOT(ISBLANK('Table'[Actual SOH]))),'Table'[Week end])
VAR lastsoh=maxx(FILTER('Table','Table'[Week end]=lastsohdate),'Table'[Actual SOH])
return if(ISBLANK('Table'[Actual SOH]),lastsoh+sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>=lastsohdate),'Table'[IN])-sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>=lastsohdate),'Table'[OUT]),'Table'[Actual SOH]+'Table'[IN]-'Table'[OUT])
Desgraciadamente no.
Esto es lo que espero:
David
ha actualizado el DAX en función del resultado esperado.
Column =
VAR lastsohdate=maxx(FILTER('Table','Table'[Week end]<EARLIER('Table'[Week end])&&NOT(ISBLANK('Table'[Actual SOH]))),'Table'[Week end])
VAR lastsoh=maxx(FILTER('Table','Table'[Week end]=lastsohdate),'Table'[Actual SOH])
return if(ISBLANK('Table'[Actual SOH]),lastsoh+sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>lastsohdate),'Table'[IN])-sumx(FILTER('Table','Table'[Week end]<=EARLIER('Table'[Week end])&&'Table'[Week end]>lastsohdate),'Table'[OUT]),'Table'[Actual SOH])
Gracias @ryan_mayu
Se me ha dado una complicación adicional, donde necesito incluir un estado:
¿Cómo modificaría el DAX para incluirlo?
Gracias
David
Para la respuesta tardía, he estado bastante ocupado estos días.
Column =
VAR lastsohdate=MAXX(FILTER('Table','Table'[Date]<EARLIER('Table'[Date])&&'Table'[ACTUAL SOH]<>0&&'Table'[State]=EARLIER('Table'[State])),'Table'[Date])
VAR lastsoh=maxx(FILTER('Table','Table'[Date]=lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[Actual SOH])
return if(ISBLANK('Table'[Actual SOH]),lastsoh+sumx(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date])&&'Table'[Date]>lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[IN])-sumx(FILTER('Table','Table'[Date]<=EARLIER('Table'[Date])&&'Table'[Date]>lastsohdate&&'Table'[State]=EARLIER('Table'[State])),'Table'[OUT]),'Table'[Actual SOH])
Eso parece funcionar.
Sólo para que entiendo, lo que esto está haciendo es sumar los IN y OU desde el último SOH real a la fecha actual, y agregar al último SOH real?
Gracias
David
Eso basado en la fórmula de Excel que proporcionó. Si tenemos real, entonces tome real. Si no, tomamos el real anterior y añadimos todo a partir de ese momento y menos todo a partir de ese momento
¿Cómo se calcula su SOH para la primera fila sin SOH LW y LW real? ¿Puede proporcionar la columna SOH esperada en los datos de ejemplo anteriores? ¿Está buscando una solución en M o DAX?
Estos serían mis valores esperados.
1/09/19 - 4992
8/9/19 - 4879
15/9/19 - 4966
22/9/19 - 5050 (igual que el real)
29/9/19 - 5112
6/10/19 - 5118
Intenté poner una mesa, pero seguía recibiendo un error.
Si hay un SOH real, que se convierte en el SOH CALC.
Estoy buscando una solución DAX, ya que vengo de una tabla calculada, y necesito un resultado para cada semana, incluso cuando los datos base no están allí.
¡Gracias!
@david_michell , Pruebe una nueva columna como
nueva columna ?
var _max [Fin de semana] - 7
devolución
maxx(filter(Table, [Week end] á _max),[SOH]) + [IN] - [OUT]
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the June 2024 Power BI update to learn about new features.