Forum Discussion

Polar_A's avatar
Polar_A
Helper I
2 years ago
Solved

DAX If Statement

Hi can I get some help please.

I want to write an if statement so that if the shipping status is Complete then it only shows the most recent record based on the shipping date. This means that the shipping date of 08/02/2024 will be the record to show. I'm not sure if I need to group by the RefNumber:

 

ShippingDateDateCustomerAddedInvoiceRecvdDateShipping StatusRefNumber
09/04/202430/04/202430/04/2024Active23118616
15/09/202319/09/202319/09/2023Complete23109497
17/10/202319/09/202320/10/2023Complete23109497
08/02/202419/09/202314/02/2024Complete23109497

 

KR,

 

Polar

  • Hi Polar_A ,

     

    If you want to add a new column to mark the data you need, then try the following expression.

     

     

    Column = 
    VAR MaxShipDate = CALCULATE(MAX('Table'[ShippingDate]),ALLEXCEPT('Table','Table'[RefNumber]))
    RETURN
    IF('Table'[Shipping Status]="Complete" && 'Table'[ShippingDate]=MaxShipDate,1)

     

    If you want to create a new table, then try the following table expression.

     

     

    Table 2 = 
    FILTER(
        'Table',
        'Table'[Shipping Status]="Complete" &&
            'Table'[ShippingDate]=CALCULATE(MAX('Table'[ShippingDate]),ALLEXCEPT('Table','Table'[RefNumber]))
    )

     

     

     

    Did I answer your question? If yes, pls mark my post as a solution and appreciate your Kudos !

     

    Thank you~

     

     

  • Polar_A - You can do this with a measure by using the following DAX:

     

    Show Record = 
    VAR _ref =
        SELECTEDVALUE ( 'Table (4)'[RefNumber] )
    VAR _ship_status =
        SELECTEDVALUE ( 'Table (4)'[Shipping Status] )
    VAR _ship_date =
        SELECTEDVALUE ( 'Table (4)'[ShippingDate] )
    VAR calc =
        CALCULATE (
            MAX ( 'Table (4)'[ShippingDate] ),
            FILTER ( ALL ( 'Table (4)' ), 'Table (4)'[RefNumber] = _ref )
        )
    RETURN
        SWITCH (
            TRUE (),
            _ship_status <> "Complete", 1,
            IF ( CALCULATE ( calc, 'Table (4)'[RefNumber] = _ref ) = _ship_date, 1, 0 )
        )

     

    You can then add the measure as a filter to the visual and set the value to 1, please see the screenshot below (you do not need the measure in the table, you can just add it to the filter pane):

     

     

    If this works for you, please accept it as the solution. 

     

     

5 Replies

  • Hi Polar_A ,

     

    If you want to add a new column to mark the data you need, then try the following expression.

     

     

    Column = 
    VAR MaxShipDate = CALCULATE(MAX('Table'[ShippingDate]),ALLEXCEPT('Table','Table'[RefNumber]))
    RETURN
    IF('Table'[Shipping Status]="Complete" && 'Table'[ShippingDate]=MaxShipDate,1)

     

    If you want to create a new table, then try the following table expression.

     

     

    Table 2 = 
    FILTER(
        'Table',
        'Table'[Shipping Status]="Complete" &&
            'Table'[ShippingDate]=CALCULATE(MAX('Table'[ShippingDate]),ALLEXCEPT('Table','Table'[RefNumber]))
    )

     

     

     

    Did I answer your question? If yes, pls mark my post as a solution and appreciate your Kudos !

     

    Thank you~

     

     

    • Asrquareddd_11's avatar
      Asrquareddd_11
      New Member

      Hello xifeng_L I am new to PowerBI, I have this Data table and I wanted get an output shown in the picture. There should be one category per workpack and the date will be just the latest date of the category.

       

       

      • xifeng_L's avatar
        xifeng_L
        Super User

        Hi Asrquareddd_11 , Your question is unrelated to the topic of this post. You can create a new post to describe your problem and provide sample data (not screenshots).

  • Polar_A - You can do this with a measure by using the following DAX:

     

    Show Record = 
    VAR _ref =
        SELECTEDVALUE ( 'Table (4)'[RefNumber] )
    VAR _ship_status =
        SELECTEDVALUE ( 'Table (4)'[Shipping Status] )
    VAR _ship_date =
        SELECTEDVALUE ( 'Table (4)'[ShippingDate] )
    VAR calc =
        CALCULATE (
            MAX ( 'Table (4)'[ShippingDate] ),
            FILTER ( ALL ( 'Table (4)' ), 'Table (4)'[RefNumber] = _ref )
        )
    RETURN
        SWITCH (
            TRUE (),
            _ship_status <> "Complete", 1,
            IF ( CALCULATE ( calc, 'Table (4)'[RefNumber] = _ref ) = _ship_date, 1, 0 )
        )

     

    You can then add the measure as a filter to the visual and set the value to 1, please see the screenshot below (you do not need the measure in the table, you can just add it to the filter pane):

     

     

    If this works for you, please accept it as the solution.