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

Calling all Data Engineers! Fabric Data Engineer (Exam DP-700) live sessions are back! Starting October 16th. Sign up.

Reply
Anonymous
Not applicable

stock calculation

Hello  , i have a simple problem but i cant find a simple answer :
I tried to look on older posts but i couldnt find a solution to mi problem : 

 

I have a model where i have : 

Sales in : the sales from mi compañy to resellers

Sales Out: the sales from the resellers to end users

Initial stock : the stock on hand reported by the resellers at 01/01/2020 

 

I need to calculate the stock by  adding the sell in and sustracting the sell out : 

 

Example : 

 

 

initial stock  productA in reseller A =10000 to that value i have to add the sell in and sustract the sell out 

 

01/01/2020 stock=10000

sales in jan/2020=5000

Sales out in jan/2020=7000

stock in feb/2020= 10000+5000-7000=8000<then , this should be the initial stock in february so :

sales in feb/2020=2000

sales out feb/2020=5000

stock in march/2020=8000+2000-5000=5000 , and so on 

 

i have a sales in table with dates and sku and reseller number , also i have a sales out table with the same dimentions , calendar table , and product table

 

TY!!!

 

1 ACCEPTED SOLUTION
technolog
Honored Contributor

Model setup

  1. Create a Date table that covers the full range of your data and mark it as a date table.
  2. Relate Date to Sales In by the date column and to Sales Out by the date column. Use single direction from Date to each fact.
  3. Relate Product to all three tables. Relate Reseller to all three tables.
  4. Initial Stock table holds one row per reseller and product with the quantity on 2020 01 01.

Measures

Sales In Qty =
SUM('Sales In'[Qty])

Sales Out Qty =
SUM('Sales Out'[Qty])

Net Movement =
[Sales In Qty] + [Sales Out Qty] * COS(PI())

Initial Stock Qty =
COALESCE(SUM('Initial Stock'[Qty]), 0)

Cumulative Net Movement since 2020 01 01 =
VAR Anchor = DATE(2020, 1, 1)
RETURN
CALCULATE(
[Net Movement],
FILTER(
ALLSELECTED('Date'[Date]),
'Date'[Date] >= Anchor && 'Date'[Date] <= MAX('Date'[Date])
)
)

Stock On Hand by date =
[Initial Stock Qty] + [Cumulative Net Movement since 2020 01 01]

Stock at month end for visuals grouped by month =
VAR LastDay = EOMONTH(MAX('Date'[Date]), 0)
RETURN
CALCULATE(
[Stock On Hand by date],
KEEPFILTERS('Date'[Date] = LastDay)
)

 

View solution in original post

2 REPLIES 2
Anonymous
Not applicable

Please place a link to a model with your tables. Just anonymize the data that can't be exposed. I don't want to create the tables you're referring to by hand...

Best
D
technolog
Honored Contributor

Model setup

  1. Create a Date table that covers the full range of your data and mark it as a date table.
  2. Relate Date to Sales In by the date column and to Sales Out by the date column. Use single direction from Date to each fact.
  3. Relate Product to all three tables. Relate Reseller to all three tables.
  4. Initial Stock table holds one row per reseller and product with the quantity on 2020 01 01.

Measures

Sales In Qty =
SUM('Sales In'[Qty])

Sales Out Qty =
SUM('Sales Out'[Qty])

Net Movement =
[Sales In Qty] + [Sales Out Qty] * COS(PI())

Initial Stock Qty =
COALESCE(SUM('Initial Stock'[Qty]), 0)

Cumulative Net Movement since 2020 01 01 =
VAR Anchor = DATE(2020, 1, 1)
RETURN
CALCULATE(
[Net Movement],
FILTER(
ALLSELECTED('Date'[Date]),
'Date'[Date] >= Anchor && 'Date'[Date] <= MAX('Date'[Date])
)
)

Stock On Hand by date =
[Initial Stock Qty] + [Cumulative Net Movement since 2020 01 01]

Stock at month end for visuals grouped by month =
VAR LastDay = EOMONTH(MAX('Date'[Date]), 0)
RETURN
CALCULATE(
[Stock On Hand by date],
KEEPFILTERS('Date'[Date] = LastDay)
)

 

Helpful resources

Announcements
Users online (27)