public ReturnerRetentionDataPoints CalculateCURR(DateTime ProcessDate)
        {
            ReturnerRetentionDataPoints retentionDate = new ReturnerRetentionDataPoints();
            List<string> cont = GetContinuingUserIdsfrom8to14DaysAgoRange(ProcessDate);
            List<string> returningCont = GetReturningContinuingUserIdsZeroToSixRange(ProcessDate);
            List<string> intersection = cont.Intersect(returningCont).ToList();

            if (intersection.Count > 0)
            {
                decimal percentage = Decimal.Divide(intersection.Count, cont.Count);
                percentage = Decimal.Multiply(percentage, 100);
                percentage = Decimal.Round(percentage, 2);
                percentage = Decimal.Floor(percentage);
                retentionDate.RecordDate = ProcessDate.Date;
                retentionDate.CountPreviousWeek = cont.Count;
                retentionDate.ReturningContinuing = intersection.Count;
                retentionDate.Percentage = percentage;
            }

            return retentionDate;
        }
        public ReturnerRetentionDataPoints CalculateNURR(DateTime ProcessDate)
        {
            ReturnerRetentionDataPoints retentionDate = new ReturnerRetentionDataPoints();

            List<string> lastWeek = GetReturningNurs(ProcessDate);
            List<string> newUsers = GetNewUsersUserIdsFrom8to14DaysAgoRange(ProcessDate);
            List<string> intersection = newUsers.Intersect(lastWeek).ToList();

            if (intersection.Count > 0)
            {
                decimal percentage = Decimal.Divide(intersection.Count, newUsers.Count);
                percentage = Decimal.Multiply(percentage, 100);
                percentage = Decimal.Round(percentage, 2);
                percentage = Decimal.Floor(percentage);

                retentionDate.RecordDate = ProcessDate.Date;
                retentionDate.CountPreviousWeek = newUsers.Count;
                retentionDate.ReturningContinuing = intersection.Count;
                retentionDate.Percentage = percentage;
            }

            return retentionDate;
        }
        public ReturnerBuckets Get()
        {
            Get7DayTotalCountUsers();
            string query = String.Format(@"SELECT * FROM {1} where DATE(Date) = DATE('{0}')", Date.ToString("yyyy/MM/dd"), RETENTION_RETURNER_VIEW_TABLE);
            try
            {
                DataTable singleRetentionRow = DBManager.Instance.Query(Datastore.Monitoring, query);

                NURR = new ReturnerRetentionDataPoints()
                {
                    RecordDate = Date,
                    startRange = Date.AddDays(-6),
                    Last7DaysTotalCount = AllUserIdsLast7Days.Count,
                    Type = RetentionCohortType.NewUser,
                };
                CURR = new ReturnerRetentionDataPoints()
                {
                    RecordDate = Date,
                    startRange = Date.AddDays(-6),
                    Last7DaysTotalCount = AllUserIdsLast7Days.Count,
                    Type = RetentionCohortType.ContinuingUser
                };
                RURR = new ReturnerRetentionDataPoints()
                {
                    RecordDate = Date,
                    startRange = Date.AddDays(-6),
                    Last7DaysTotalCount = AllUserIdsLast7Days.Count,
                    Type = RetentionCohortType.ReactivatedUser
                };

                if (singleRetentionRow.Rows.Count > 0)
                {

                    DataRow c = singleRetentionRow.Rows[0];
                    if (c["NewUserCohort"] != DBNull.Value)
                    {
                        NURR.RelevantMetricProcessedCount = c.Field<int>("NewUserCohort");
                    }
                    if (c["ContinuingUsersCohort"] != DBNull.Value)
                    {
                        CURR.RelevantMetricProcessedCount = c.Field<int>("ContinuingUsersCohort");
                    }

                    if (c["ReactivatedUsersCohort"] != DBNull.Value)
                    {
                        RURR.RelevantMetricProcessedCount = c.Field<int>("ReactivatedUsersCohort");
                    }

                    if (c["NURR"] != DBNull.Value)
                    {
                        NURR.Percentage = c.Field<decimal>("NURR");
                    }

                    if (c["CURR"] != DBNull.Value)
                    {
                        CURR.Percentage = c.Field<decimal>("CURR");
                    }

                    if (c["RURR"] != DBNull.Value)
                    {
                        RURR.Percentage = c.Field<decimal>("RURR");
                    }
                }
                else
                {
                    CalculateNURR();
                    CalculateCURR();
                    CalculateRURR();
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.Error("Returners Get Problems" + Date.ToString());
            }

            return this;
        }