Forum Discussion
Anonymous
4 years agoNot applicable
Customer Repurchase Cycle
Hi Community and PowerBi Masters, I am currently working on an analysis for which I try to understand the consumer behavior in detail. The corresponding data that I have is (name of table: All_...
- 4 years ago
Anonymous Hi, considering your issues I made measures as below. I hope this helps you.
//[NumOfTotPurchase]: This counts all purchases even if order numbers are the same. e.g. if Emil purchased 4 macbooks on the same day under same oerder number, it still counts 4.
NumOfTotPurchase = countrows(All_Platforms)//[NumOfVisit]: This counts only number of visit regardless number of purchases e.g. If Emil purchased 4 macbooks, if counts only 1 as long as all purchases are done under same order numberNumOfVisit =VAR currentuser = MAX( All_Platforms[User Name] )VAR NumOfVisit =COUNTROWS(DISTINCT(SELECTCOLUMNS(FILTER( All_Platforms, All_Platforms[User Name] = currentuser ),"OrderNum", All_Platforms[Order Number],"Name", All_Platforms[User Name])))Return NumOfVisit//[NumOfReVisit]: This is the same as above [NumOfVisit] but it excludes the first visit. hence the formular is simply [NumOfVisit]-1NumOfReVisit = [NumOfVisit]-1//[AVG_Time_Revisit_Indv]: This is similar to the measure [AverageTime_Revisit] which I provided previously but it is revised to ignore bulk purchase under the same order number. But this measure cannot be used universal purpose(e.g. KPI card) since it needs specific "Name". Just make this measure in your model but don't use this. this measure will be used internally to make the final new measureAVG_Time_Revisit_Indv =VAR currentuser = MAX( All_Platforms[User Name] )VAR NumberOfDates =CALCULATE(DATEDIFF(FIRSTNONBLANK( All_Platforms[OrderTime], All_Platforms[OrderTime] ),LASTNONBLANK( All_Platforms[OrderTime], All_Platforms[OrderTime] ),DAY),All_Platforms[User Name] = currentuser)VAR NumberOfRePurcases =COUNTROWS(DISTINCT(SELECTCOLUMNS(FILTER( All_Platforms, All_Platforms[User Name] = currentuser ),"OrderNum", All_Platforms[Order Number],"Name", All_Platforms[User Name]))) - 1VAR Avg_Time_Interval =CALCULATE(DIVIDE( NumberOfDates, NumberOfRePurcases ),ALLSELECTED( all_Platforms ))Return Avg_Time_Interval//[Avg_Revisit_Interval]: This is the one you can use to show revisit interval for individual as well as overall time interval (for KPI card)Avg_Revisit_Interval =AVERAGEX(ADDCOLUMNS(VALUES( All_Platforms[User Name] ),"AvgTime", [AVG_Time_Revisit_Indv] ),[AVG_Time_Revisit_Indv])//[Time_till_next_visit ]: This is the measure you can use along with speciifc date which shows the number of dates till next visit. e.g. if you select the date when Emil visited, this measure will show the number of dates till Emil's next visitTime_till_next_visit =VAR current_date = max(All_Platforms[OrderTime])VAR Next_visit =CALCULATE(min(All_Platforms[OrderTime]),All_Platforms[OrderTime] > current_date)RETURN DATEDIFF(current_date,Next_visit,DAY)//[Avg_Revist_Time_From]: This is similar to above [Time_till_next_visit ] which you can use along with speciifc date. While [Time_till_next_visit ] shows the number of dates till next visit, this measure show average number of dates for revisit calculating till last visit date. You need to create the measure [NumOfVisit] first to create this measureAvg_Revist_Time_From =VAR current_date = max(All_Platforms[OrderTime])VAR Fianl_visit =CALCULATE(MAX(All_Platforms[OrderTime]),All_Platforms[OrderTime] > current_date)VAR DateDifference = DATEDIFF(current_date,Fianl_visit,DAY)VAR Num_visit =CALCULATE([NumOfVisit],All_Platforms[OrderTime] > current_date)RETURN DIVIDE( DateDifference,Num_visit)Please mark this as solution if this helped you.
colacan
4 years agoResolver II
Hi Jannnn04,
If you post your question one by one along with sample data, it would be easyer to answer. the question itself doesn't look that complicated but the answer would be quite broad without data. Thanks.
Anonymous
4 years agoNot applicable
Hi Colacan,
thank you for your quick response.
I will upload sample data and post the questions individually --> Updated the original post.
- colacan4 years agoResolver II
Hi Jannnn04,
For the first question, you can try calculate column as below;
NewOld =VAR CurrentUser = All_Platforms[User Name]VAR RankByCust =RANKX(FILTER( All_Platforms, All_Platforms[User Name] = CurrentUser ),All_Platforms[OrderTime], , ASC )RETURNIF( RankByCust > 1, "Old", "New" )Hope this helps you. Thanks