Forum Discussion

paul_luvaglia's avatar
paul_luvaglia
Regular Visitor
2 years ago
Solved

New Table - Calendar and Summarize

Hi,

 

I have a table of sales data by invoice number and part number. 

Each part may not be sold every month

I would like a summary table by part, year and month - but to include all year/month/part combinations even if we no invoices are in the source table for the year/month/part combination

How do I do this?

 

Many Thanks

  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi paul_luvaglia ,

     

    I think Greg_Deckler ‘s solution is great!! just change the countrows to the aggregation you need depending on your needs. If it's just following the sample data you gave, you could probably just create a simple calculated column:

    Column = IF([Qty]=BLANK(),[Qty]+0,[Qty])

     

    An attachment for your reference. Hope it helps!

     

    Best regards,
    Community Support Team_ Scott Chang

     

    If this post helps then please consider Accept it as the solution to help the other members find it more quickly.

  • Greg_Deckler's avatar
    Greg_Deckler
    2 years ago

    paul_luvaglia Sorry, got pulled away yesterday. If all you have is a single table, then you could do this tweak to the original formula. PBIX is attached below signature.

     

    Table 2 = 
      VAR __Years = DISTINCT('Table'[Year])
      VAR __Months = GENERATESERIES( MIN('Table'[Month]), MAX('Table'[Month]), 1 )
      VAR __Parts = DISTINCT('Table'[Part])
      VAR __Table =
        ADDCOLUMNS(
          CROSSJOIN(
            CROSSJOIN( __Parts, __Years ),
            __Months
          ),
          "__Count",
            VAR __Part = [Part]
            VAR __Year = [Year]
            VAR __Month = [Value]
            VAR __Result = SUMX( FILTER( 'Table', [Part] = __Part && [Year] = __Year && [Month] = __Month ), [Qty]) + 0
          RETURN
            __Result
        )
        VAR __Result = SELECTCOLUMNS( __Table, "Part", [Part], "Year", [Year], "Month", [Value], "Count", [__Count] )
    RETURN
      __Result

     

4 Replies

  • Greg_Deckler's avatar
    Greg_Deckler
    Community Champion

    paul_luvaglia Try something like:

    Table = 
      VAR __Years = DISTINCT('Table'[Year])
      VAR __Months = DISTINCT('Table'[Month])
      VAR __Parts = DISTINCT('Table'[Part])
      VAR __Table =
        ADDCOLUMNS(
          CROSSJOIN(
            CROSSJOIN( __Parts, __Years ),
            __Months
          ),
          "__Count",
            VAR __Part = [Part]
            VAR __Result = COUNTROWS( FILTER( 'Table', [Part] = __Part ) ) + 0
          RETURN
            __Result
        )
    RETURN
      __Table

    Otherwise, Sorry, having trouble following, can you post sample data as text and expected output?
    Not really enough information to go on, please first check if your issue is a common issue listed here: https://community.powerbi.com/t5/Community-Blog/Before-You-Post-Read-This/ba-p/1116882

    Also, please see this post regarding How to Get Your Question Answered Quickly: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

    The most important parts are:
    1. Sample data as text, use the table tool in the editing bar
    2. Expected output from sample data
    3. Explanation in words of how to get from 1. to 2.

  • This would be a quick example of the source

    YearMonth

    Inv Num

    PartQty
    20241

    1

    ABC4
    202422ABC6
    202423XYZ4
    202444ABC1

     

    I would like some thing as per the below

     

    YearMonthPartQty
    20241ABC4
    20242ABC6
    20243ABC

    0

    20244ABC1
    20241XYZ0
    20242XYZ0
    20243XYZ4
    20244XYZ0

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi paul_luvaglia ,

       

      I think Greg_Deckler ‘s solution is great!! just change the countrows to the aggregation you need depending on your needs. If it's just following the sample data you gave, you could probably just create a simple calculated column:

      Column = IF([Qty]=BLANK(),[Qty]+0,[Qty])

       

      An attachment for your reference. Hope it helps!

       

      Best regards,
      Community Support Team_ Scott Chang

       

      If this post helps then please consider Accept it as the solution to help the other members find it more quickly.

    • Greg_Deckler's avatar
      Greg_Deckler
      Community Champion

      paul_luvaglia Sorry, got pulled away yesterday. If all you have is a single table, then you could do this tweak to the original formula. PBIX is attached below signature.

       

      Table 2 = 
        VAR __Years = DISTINCT('Table'[Year])
        VAR __Months = GENERATESERIES( MIN('Table'[Month]), MAX('Table'[Month]), 1 )
        VAR __Parts = DISTINCT('Table'[Part])
        VAR __Table =
          ADDCOLUMNS(
            CROSSJOIN(
              CROSSJOIN( __Parts, __Years ),
              __Months
            ),
            "__Count",
              VAR __Part = [Part]
              VAR __Year = [Year]
              VAR __Month = [Value]
              VAR __Result = SUMX( FILTER( 'Table', [Part] = __Part && [Year] = __Year && [Month] = __Month ), [Qty]) + 0
            RETURN
              __Result
          )
          VAR __Result = SELECTCOLUMNS( __Table, "Part", [Part], "Year", [Year], "Month", [Value], "Count", [__Count] )
      RETURN
        __Result