Forum Discussion

USABB_Data's avatar
USABB_Data
Icon for Helper II rankHelper II
7 years ago

Calculate Order Value Total ($) When Containing Item used in Filter - Duplicate Order #'s in system

I see the other thread posted here: https://community.powerbi.com/t5/Desktop/Measure-Total-order-value-for-orders-with-item/m-p/322848#M143881

 

However, we have duplicate order #'s in our system...Ex: Order number 123456 happened in 2015 and 2019.  When I use this DAX calculation (bottom of page), it is summing the sales for the 2019 order and 2015 order.  I have a filter saying order date has to be greater than 01/01/2017 so I don't care about the 2015 sale but it still is summed in the formula.  Any help?

 

 

Sales Order Total Value Containing Items = CALCULATE(SUM('Sales Detail'[Sales]),ALL('Sales Detail'),(VALUES('Sales Detail'[Sales Order #])))

13 Replies

  • Cmcmahan's avatar
    Cmcmahan
    Icon for Resident Rockstar rankResident Rockstar

    You may have a filter requiring dates to be greater than 01/01/2017, but using ALL('Sales Detail') removes that filter.

     

    Try: 

    Sales Order Total Value Containing Items = CALCULATE(SUM('Sales Detail'[Sales]),ALLSELECTED('Sales Detail'),VALUES('Sales Detail'[Sales Order #]))
    • USABB_Data's avatar
      USABB_Data
      Icon for Helper II rankHelper II

      Thanks cmcmahan.  I should've been more clear in that I have a filter containing items as well.  Using your suggestion, I get the Sales $ for just those items in the order and not the entire Order $ value.

  • v-lili6-msft's avatar
    v-lili6-msft
    Icon for Community Support rankCommunity Support

    hi, USABB_Data 

    For that example case, It is not a dynamic way.

    Try this formula to create a measure:

    Measure = VAR _orders=VALUES(Orders[OrderId]) return
    CALCULATE(SUM(Orders[Sales]),FILTER(ALLSELECTED(Orders),Orders[OrderId] in _orders))

    and here is a sample pbix file, please try it.

    If not your case, please share your expected output.

     

    Best Regards,

    Lin

     

     

    • USABB_Data's avatar
      USABB_Data
      Icon for Helper II rankHelper II

      This is closer and it works well without the filter but I need that filter on because I want to see total order value of orders containing at least one item from Item Class 1 or 2 (my example in SQL at the bottom).   In the demo screenshot below, I would want line 1 to show Sales 100 (which it does) but Measure of 600 because that's the total Sales Order Total $ of Order ID 1.  It could be possible that with filters, my ask is not quite possible.

       

      This SQL statement is what I need to recreate.  It generates a list of Distinct Sales Order #'s based on the Item Classes of 1 and 2.  Then it pulls the total sales of that Sales Order # (not just items from Item Classes 1 and 2).

       

      SELECT *
      FROM
        (SELECT DISTINCT DTL.SALES_ORDER_#
        FROM SALES AS DTL
        WHERE DTL.INVOICE_DATE >= '07/11/2019' AND
          DTL.ITEM_CLASS IN ('1','2')
        )DOCS
        INNER JOIN
        (SELECT DTL.SALES_ORDER_#, SUM(DTL.SALES) AS SALES
        FROM SALES AS DTL
        WHERE DTL.INVOICE_DATE >= '07/11/2019'
        GROUP BY DTL.DOCUMENT_NUMBER
      )SALES ON DOCS.DOCUMENT_NUMBER = SALES.DOCUMENT_NUMBER
      • Cmcmahan's avatar
        Cmcmahan
        Icon for Resident Rockstar rankResident Rockstar

        Try this measure:

        OrderTotal = 
        CALCULATE( SUM(Orders[Sales]),ALLEXCEPT(ALLSELECTED(Orders), Orders[OrderId]) )