Forum Discussion

manoranjan's avatar
manoranjan
Frequent Visitor
7 years ago
Solved

Stock Cover Calculation Measure

Hi All,

 

I have Weekly data of Stock and Planned Sales. For any given week, I want to Calculate the Stock Cover.

Stock Cover = How many weeks of Sales I can cover with the Current Stock.

 

My Data is like this

Week

Stock

Sales Plan

W01

100

40

W02

120

40

W03

130

40

W04

110

40

W05

80

40

W06

100

50

W07

120

50

 

 

In the above example, Week 1 Stock = 100 units and with that I can cover my sales for next 2.5 weeks. ( In other words I can sell w2, w3, and 0.5 of w4).

 

I want to build a measure that can show below table

Week

Stock

Sales Plan

Stock Cover

W01

100

40

2.5

W02

120

40

3.0

W03

130

40

3.2

W04

110

40

2.6

 

Please help, how to calculate the Stock Cover Measure.

 

Thanks in advance.

 

  • manoranjan,

     

    You may check the following DAX.

    Column =
    VAR s = Table1[Stock]
    VAR w = Table1[Week]
    VAR t =
        FILTER ( Table1, Table1[Week] > w )
    VAR t2 =
        ADDCOLUMNS (
            t,
            "total", SUMX (
                FILTER ( t, Table1[Week] <= EARLIER ( Table1[Week] ) ),
                Table1[Sales Plan]
            )
        )
    RETURN
        IF (
            COUNTROWS ( FILTER ( t2, [total] >= s ) )
                > 0,
            COUNTROWS ( FILTER ( t2, [total] < s ) )
                + DIVIDE (
                    s
                        - MAXX ( TOPN ( 1, FILTER ( t2, [total] < s ), Table1[Week], DESC ), [total] ),
                    MAXX (
                        TOPN ( 1, FILTER ( t2, [total] >= s ), Table1[Week], ASC ),
                        Table1[Sales Plan]
                    )
                )
        )
    

12 Replies

  • v-chuncz-msft's avatar
    v-chuncz-msft
    Community Support

    manoranjan,

     

    You may check the following DAX.

    Column =
    VAR s = Table1[Stock]
    VAR w = Table1[Week]
    VAR t =
        FILTER ( Table1, Table1[Week] > w )
    VAR t2 =
        ADDCOLUMNS (
            t,
            "total", SUMX (
                FILTER ( t, Table1[Week] <= EARLIER ( Table1[Week] ) ),
                Table1[Sales Plan]
            )
        )
    RETURN
        IF (
            COUNTROWS ( FILTER ( t2, [total] >= s ) )
                > 0,
            COUNTROWS ( FILTER ( t2, [total] < s ) )
                + DIVIDE (
                    s
                        - MAXX ( TOPN ( 1, FILTER ( t2, [total] < s ), Table1[Week], DESC ), [total] ),
                    MAXX (
                        TOPN ( 1, FILTER ( t2, [total] >= s ), Table1[Week], ASC ),
                        Table1[Sales Plan]
                    )
                )
        )
    
    • manoranjan's avatar
      manoranjan
      Frequent Visitor

      Thank you v-chuncz-msft :smileyvery-happy:

       

      This solves the problem I mentioned in my post. 

      I should say, you are genius.

       

      Regards

      Mano

    • manoranjan's avatar
      manoranjan
      Frequent Visitor

      v-chuncz-msft

       

      I tried implementing this in my production Application. I was expecting this Stock Cover calculation to happen on-the-fly based on my other selections like Product Category, Store Type, Territory etc.

       

      But when we add a column it calculates the Stock Cover as a static column to the Table. This is a problem in this case, as the Sum(Stock) and Sum(Sales) varies depending on the filters made in the Slicers.

       

      Any workaround you can suggest? Please help.

       

      Regards

      Mano

       

    • darylmc's avatar
      darylmc
      Frequent Visitor

      v-chuncz-msft wrote:

      manoranjan,

       

      You may check the following DAX.

      Column =
      VAR s = Table1[Stock]
      VAR w = Table1[Week]
      VAR t =
          FILTER ( Table1, Table1[Week] > w )
      VAR t2 =
          ADDCOLUMNS (
              t,
              "total", SUMX (
                  FILTER ( t, Table1[Week] <= EARLIER ( Table1[Week] ) ),
                  Table1[Sales Plan]
              )
          )
      RETURN
          IF (
              COUNTROWS ( FILTER ( t2, [total] >= s ) )
                  > 0,
              COUNTROWS ( FILTER ( t2, [total] < s ) )
                  + DIVIDE (
                      s
                          - MAXX ( TOPN ( 1, FILTER ( t2, [total] < s ), Table1[Week], DESC ), [total] ),
                      MAXX (
                          TOPN ( 1, FILTER ( t2, [total] >= s ), Table1[Week], ASC ),
                          Table1[Sales Plan]
                      )
                  )
          )

       

      Hi All,

       

      the above DAX is perfect for a simple table. Can it be further adapted to take into account additional dimensions as per below table?

       

      Any help appreciated

       

      Product

      Week

      StockSales PlanStock Cover
      AW0110040 
      AW0212040 
      AW0313040 
      AW0411040 
      AW058040 
      AW0610050 
      AW0712050 
      BW0115080 
      BW0218080 
      BW0319580 
      BW0416580 
      BW0512080 
      BW06150100 
      BW07180100 
      • darylmc's avatar
        darylmc
        Frequent Visitor

        Got it, in the end. :manhappy:

         

        Column = 
        VAR s = Table1[Stock]
        VAR w = Table1[Week]
        VAR x = Table1[Product]
        VAR t =
            FILTER ( Table1, Table1[Week] > w && Table1[Product] = x)
        VAR t2 =
            ADDCOLUMNS (
                t,
                "total", SUMX (
                    FILTER ( t, Table1[Week] <= EARLIER ( Table1[Week] )&&Table1[Product]=EARLIER(Table1[Product])),
                    Table1[Sales Plan]
                )
            )
        RETURN
            IF (
                COUNTROWS ( FILTER ( t2, [total] >= s ) )
                    > 0,
                COUNTROWS ( FILTER ( t2, [total] < s ) )
                    + DIVIDE (
                        s
                            - MAXX ( TOPN ( 1, FILTER ( t2, [total] < s ), Table1[Week], DESC ), [total] ),
                        MAXX (
                            TOPN ( 1, FILTER ( t2, [total] >= s ), Table1[Week], ASC ),
                            Table1[Sales Plan]
                        )
                    )
            )
  • manoranjan

     

    use below formula to achive..

     

    Stock Cover = SUM(Weeks[Stock]) / SUM(Weeks[Sales Plan])

     

     

    If it is solution to your query, Pls accept as solution...

    • manoranjan's avatar
      manoranjan
      Frequent Visitor

      Thanks for reply venug20

       

      But what I want to achieve is different.

      For example, my current week (week 1) Stock is 100 units.

      Sales plan

      W2 = 40,

      W3=50,

      W4=50

       

      With the current stock of 100 units, I can sell upto 2.1 weeks forward.

       

      Your solution takes care of only the Current Weeks sales. So this will not work in my scenario.

       

  • manoranjan's avatar
    manoranjan
    Frequent Visitor

    Please guide me how to solve this.

     

    I have weekly Data of "Planned Stock" and "Planned Sales". I should calculate what is my Stock Cover every week. 

    Stock Cover is described as "How many weeks forward of Sales I can cover with the current week Stock".

     

    For example

    Week

    Stock

    Sales Plan

    Stock Cover

    W01

    100

    40

    2.5

    W02

    120

    40

    3.0

    W03

    130

    40

    3.2

    W04

    110

    40

    3.0

    W05

    80

    40

     2.8

    W0610050 3.0

     

    First week I have 100 Units in Stock, with which I can cover the sales for next 2.5 weeks.

    I want to write a Measure to calculate this on the fly, as there are other dimensions in the Data like Product Type, Category, Price Range etc. which I ignored in this example data for the sake of simplicity.

     

    Thanks in advance.

  • Anonymous's avatar
    Anonymous
    Not applicable

    Can anybody help me Stock COver calcultion as  a measure which would show the Weeks Cover at aggregate level and also when the filters apply . My data has  Weeks, Total demand, total suply, closing stock, product , location.

     With Calculated column i get an error for out of memory when i try to include the location along with week and SKU.