Forum Discussion

nicole1995's avatar
nicole1995
Frequent Visitor
5 years ago
Solved

Count and filter between two dates

Hello

 

I have two tables, one with current subscriptions and ones with expired subscriptions linked by memberID. I need to check from the current subscriptions who have renewed and is not a new member.  To do this I want to check for any subscriptions in the Expired table where the end date is between the Current subscription start date - 1 Day and -1 Month. I then need to use the results as part of a pivot table where the row will be subscription type and the column will be start date. 

 

This is an example of my required output

 


Below is my dax query but I keep getting "a table of multiple values was supplied where a single value was expected"

Renewed =
CALCULATE(COUNTROWS('CurrentSubscriptions'),
FILTER('ExpiredSubscriptions',
'ExpiredSubscriptions'[EndDate] <= DATEADD('CurrentSubscriptions'[StartDate].[Date],-1,DAY)
&& 'ExpiredSubscriptions'[EndDate] >= DATEADD('CurrentSubscriptions'[StartDate].[Date],-1,MONTH)
))
 
Im not sure if what I'm doing is close the right way of handling this. Could anyone please advise?
 
Thanks
  • Hi, nicole1995 

     

    Based on your description, I created data to reproduce your scenario. The pbix file is attached in the end.

    Current Subscription:

     

    Expired Subscription:

     

    You may create a measure as below.

    Result = 
    var t = 
    ADDCOLUMNS(
        ALL('Current Subscriptions'),
        "Result",
        var _startdate = [StartDate]
        var _date = EOMONTH(_startdate,-1)
        var _d = DATE(YEAR(_date),MONTH(_date),DAY(_startdate))
        return
        COUNTROWS(
            FILTER(
                ALL('Expired Subscriptions'),
                [MemberID]=EARLIER('Current Subscriptions'[MemberID])&&
                [EndDate]>=_d&&
                [EndDate]<=_startdate-1
            )
        )
    )
    var _result =
    SUMX(
        SUMMARIZE(
            'Current Subscriptions',
            'Current Subscriptions'[Type],
            'Current Subscriptions'[StartDate].[Month],
            "Re",
            SUMX(
                FILTER(
                    t,
                    [Type]=SELECTEDVALUE('Current Subscriptions'[Type])&&
                    'Current Subscriptions'[StartDate].[Month]=EARLIER('Current Subscriptions'[StartDate].[Month])
                ),
                [Result]
            )
        ),
        [Re]
    )
    return
    IF(
        ISBLANK(_result),
        0,
        _result
    )

     

    Result:

     

    Best Regards

    Allan

     

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

     

     

6 Replies

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

    Hi, nicole1995 

     

    Based on your description, I created data to reproduce your scenario. The pbix file is attached in the end.

    Current Subscription:

     

    Expired Subscription:

     

    You may create a measure as below.

    Result = 
    var t = 
    ADDCOLUMNS(
        ALL('Current Subscriptions'),
        "Result",
        var _startdate = [StartDate]
        var _date = EOMONTH(_startdate,-1)
        var _d = DATE(YEAR(_date),MONTH(_date),DAY(_startdate))
        return
        COUNTROWS(
            FILTER(
                ALL('Expired Subscriptions'),
                [MemberID]=EARLIER('Current Subscriptions'[MemberID])&&
                [EndDate]>=_d&&
                [EndDate]<=_startdate-1
            )
        )
    )
    var _result =
    SUMX(
        SUMMARIZE(
            'Current Subscriptions',
            'Current Subscriptions'[Type],
            'Current Subscriptions'[StartDate].[Month],
            "Re",
            SUMX(
                FILTER(
                    t,
                    [Type]=SELECTEDVALUE('Current Subscriptions'[Type])&&
                    'Current Subscriptions'[StartDate].[Month]=EARLIER('Current Subscriptions'[StartDate].[Month])
                ),
                [Result]
            )
        ),
        [Re]
    )
    return
    IF(
        ISBLANK(_result),
        0,
        _result
    )

     

    Result:

     

    Best Regards

    Allan

     

    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

    nicole1995 - DATEADD will return a column of values. Try:

    CALCULATE(
    COUNTROWS('CurrentSubscriptions'),
    FILTER(
    'ExpiredSubscriptions',
    'ExpiredSubscriptions'[EndDate] <= ('CurrentSubscriptions'[StartDate].[Date] -1) * 1.
    && 'ExpiredSubscriptions'[EndDate] >= EOMONT('CurrentSubscriptions'[StartDate].[Date],-1)
    ))

    • nicole1995's avatar
      nicole1995
      Frequent Visitor

      Hi Greg_Deckler 

       

      Thanks for your quick reply.

       

      I have tried the query but it won't let me filter between two tables. Is there something I'm missing ?

      • Greg_Deckler's avatar
        Greg_Deckler
        Community Champion

        nicole1995 - Oh, you probably need an aggregator around a column reference (MAX, MIN, etc.) or MAXX(RELATEDTABLE(...)...)