Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
7 years ago
Solved

Calculate average orders customer first, second, third etc. month

The problem I have is that I want to calculated the amount of orders an user places per month since creation.

I have two tables User:

 

UserIDCreation User Date
101-05-15
202-06-15
303-07-15
404-08-15
505-09-15

Orders:

Order DateUserID
02-06-151
03-07-151
04-08-152
05-09-154
02-11-155

 

 

I wanted to COUNTROWS per user in the offset period since the account creation, but I can only find functions or patterns to do a fix period for ALL users.

Does someone know how to calculate per user the amount of orders in the first, second etc. month of it's lifetime?

Desired outcome would be something like.

Month since creationAverage amount orders
110
25
36
42
53
64




 

  • Hi Anonymous 

    Try this:

    1. Create a 1-to-many unidirectional relationship between UserTable[UserID] and OrdersTable[UserID]

    2. Create a one-column calculated table:

     

     

    AuxTable = 
    VAR _MaxDiff =
        MAXX (
            ADDCOLUMNS (
                UserTable;
                "MonthDiff"; DATEDIFF (
                    UserTable[Creation User Date];
                    CALCULATE ( MAX ( OrdersTable[Order Date] ) );
                    MONTH
                )
            );
            [MonthDiff]
        )
    RETURN
        SELECTCOLUMNS ( GENERATESERIES ( 1; _MaxDiff + 1); "MonthSinceCreation"; [Value] )

    3. Place AuxTable[MonthSinceCreation] just created in the previous step in the rows of a matrix visual

     

    4. Create this measure and place it in values of the matrix visual:

     

     

    AverageAmountOrders = 
    AVERAGEX (
        ALL ( UserTable);
        CALCULATE (
            COUNT ( OrdersTable[Order Date] );
            FILTER (
                CALCULATETABLE ( OrdersTable );
                DATEDIFF ( UserTable[Creation User Date]; OrdersTable[Order Date]; MONTH )
                    <= (SELECTEDVALUE ( AuxTable[MonthSinceCreation] ) - 1)
            )
        )
    ) + 0

     

     

     

     

     

6 Replies

  • AlB's avatar
    AlB
    Icon for Community Champion rankCommunity Champion

    Hi Anonymous 

    Try this:

    1. Create a 1-to-many unidirectional relationship between UserTable[UserID] and OrdersTable[UserID]

    2. Create a one-column calculated table:

     

     

    AuxTable = 
    VAR _MaxDiff =
        MAXX (
            ADDCOLUMNS (
                UserTable;
                "MonthDiff"; DATEDIFF (
                    UserTable[Creation User Date];
                    CALCULATE ( MAX ( OrdersTable[Order Date] ) );
                    MONTH
                )
            );
            [MonthDiff]
        )
    RETURN
        SELECTCOLUMNS ( GENERATESERIES ( 1; _MaxDiff + 1); "MonthSinceCreation"; [Value] )

    3. Place AuxTable[MonthSinceCreation] just created in the previous step in the rows of a matrix visual

     

    4. Create this measure and place it in values of the matrix visual:

     

     

    AverageAmountOrders = 
    AVERAGEX (
        ALL ( UserTable);
        CALCULATE (
            COUNT ( OrdersTable[Order Date] );
            FILTER (
                CALCULATETABLE ( OrdersTable );
                DATEDIFF ( UserTable[Creation User Date]; OrdersTable[Order Date]; MONTH )
                    <= (SELECTEDVALUE ( AuxTable[MonthSinceCreation] ) - 1)
            )
        )
    ) + 0

     

     

     

     

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi AlB,

       

      Thank you very much for helping out.

      When I put these in a matrix I get only a total average. It seems something goes wrong with making the series.

      Do you have further suggestions by any chance?

       

      Thank you very much again for helping.

      • AlB's avatar
        AlB
        Icon for Community Champion rankCommunity Champion

        Anonymous 

         

        what do you mean by a total average? I would need a clear example based on sample data with the expected result to understand what you are trying to do

  • Hi,

     

    Please clarify how you arrived at the numbers in the average amount orders column?  How did you get 10,5 etc.