Forum Discussion

youconnect's avatar
youconnect
Helper I
6 years ago
Solved

Countrows last date

I have this table

idstatedate
1active01/01/2020
1reserved05/01/2020
1suspended08/01/2020
1sold15/01/2020
2active02/01/2020
2suspended03/01/2020
2active05/01/2020
3active05/01/2020
4active06/01/2020
4sold08/01/2020

 

I want count rows of distinct IDs where last date equal to "active"

Result expected is: 2 (last date from these 2 IDs have the state "active".
Can you help me?

 

Thanks

  • Hi youconnect ,

     

    I am understanding your logic and have made the following calculation:

    count_active_id = 
    var last_active_date = CALCULATE(MAX(Sheet2[date]),FILTER(ALLEXCEPT(Sheet2,Sheet2[id],Sheet2[date]),Sheet2[state]="active"))
    var last_date = CALCULATE(MAX(Sheet2[date]),ALLEXCEPT(Sheet2,Sheet2[id]))
    return CALCULATE(COUNTROWS(FILTER(Sheet2,last_active_date=last_date)))

     

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

6 Replies

  • edhans's avatar
    edhans
    Community Champion

    This will do what you describe, but it is 1, not 2.

    Latest Record Count = 
    VAR LatestDate = 
    CALCULATE(
        LASTDATE('Sample Data'[Date]),
        'Sample Data'[state] = "active"
    )
    VAR ActiveIDCount = 
    CALCULATE(
        DISTINCTCOUNT('Sample Data'[id]),
        FILTER(
            'Sample Data',
            'Sample Data'[Date] = LatestDate
        )
    )
    RETURN
    COALESCE(ActiveIDCount,0)

    the last date of an active item is Jan 6, 2020, and only one ID has that date.

    How are you getting 2?

    • youconnect's avatar
      youconnect
      Helper I

      edhans 

      No.
      last date for id 1 is 15/01/2020 and state is not active, not count

      last date for id 2 is 05/01/2020 and state is active, count

      last date for id 3 is 05/01/2020 and state is active, count

      last date for id 4 is 08/01/2020 and state is not active, not count.

      So count is 2

      • edhans's avatar
        edhans
        Community Champion

        I suspect there is an cleaner way to do this, but this does the trick.

         

        Counting Measure = 
        VAR FirstTable =
            ADDCOLUMNS (
                SUMMARIZECOLUMNS ( 'Sample Data'[id] ),
                "Date2", LASTDATE ( 'Sample Data'[Date] )
            )
        VAR CombinedTable =
            NATURALINNERJOIN (
                'Sample Data',
                firsttable
            )
        VAR RowCount =
            COUNTROWS (
                FILTER (
                    FILTER (
                        CombinedTable,
                        [Date] = [Date2]
                    ),
                    [state] = "active"
                )
            )
        RETURN
        COALESCE( RowCount, 0)