You do this when you need to return a reference to yourself. You typically see it in operator overloading, so that the result can return itself:
Foo &operator=(const Foo &rhs)
{
// Whatever...
return *this;
}
By doing this it allow you to easily chain calls:
a=b=c;
Whereas if returned a pointer it would look messy.
It's also commonly used in fluid api design so that you can combine calls. Using your example you could write:
Sales_Data x,y,z;
x.combine(y).combine(z);
However, if does loose a bit of its elegance when you've got a pointer lurking around:
Sales_Data *x=LoadSalesData();
Sales_Data y,z;
x->combine(y).combine(z);