If you want to provide your user a chart that they can play with, probably, you shouldn’t store these in the backend and do the calculation in the frontend depending on the filters and everything the user sets. And in order to do this, probably you need to keep track of customer movements (like when they are lost, when they registered etc) in a different data type so you can easily make calculations and extract charts out of it. I hope this gives you some starting point.
You can keep each event in separate fields on the user like joined date (somehow exists like created, or left date etc. But these will only follow one thing per user. If they join only once etc.