Presumably, in this table, you have one record for each visit to one customer. This isn't absolutely necessary, but is the most flexible.
You can then define summary fields in this table that use the "count of" option to count the number of records and thus the number of visits made to each customer. You can then perform finds to find records for a specific date range to get the results you want.
In finds, manual or scripted, you can specify a date range while in find mode like this (using MMDDYYYY format): 3/1/2011...7/31/2011 to find all records dated during the months of March through July of 2011.
In a report, you can change the layout body into a Sub Summary part "when sorted by" customer, place this summary field in this sub summary part and you'll get your sub totals for each customer, provided you sort by the same field you specified for the sub summary part. If you place this same field in a footer or grand summary part, it will display the grand total instead of the sub total.
For charting, you can set up your chart in the layout body and specify "Use datafrom current found set", show data points for groups of records when sorted, specify the summary field for one axis and the "sorted by" field for the other in order to group the data properly for your graph.
It makes sense. Going to try it.