There are other ways to present this data that is simpler than the "cross tab" format you are specifying.
But what you want can be setup up in a list view layout where the body is replaced by a sub summary layout part.
The columns might be produced by calculation fields that use getSummary to refer to a summary field's subtotal.
The data really needs to be looking at the year rather than the value, and here's the kicker - I'll most likely be pulling data from other (very similar) tables to report on as well. Therefore, each line of customer data would have data Y and N's from 2 or 3 tables.
My daft logic suggests something like:
If (there's at least one record for 2014 for this customer) then "Yes" else "".
That would be a calc which is displayed exclusively in the 2014 column, with similar for others years.
The result of the calc then just gets put on the report as required.
Does that seem viable?
ExecuteSQL comes to mind as a way to check a table to see if there is at least one record in the table for a given year and customer.