Is there a reason you're using separate programs for each channel? Cost attribution perhaps?
Seems like you could use separate campaigns for each source but all within the same program.
Possible (somewhat complicated) answer: create a new program channel with different program statuses, each one a different source. Then when you click on the main program overview, you can see how many leads are at each status (aka from each source), but the total members will tell you everyone who visited, converted, etc.
That might not cut it, especially if you're tracking successes through program status. If you don't want to create a new program channel, just use different campaigns for each source and see how many members each campaign has.
I had thought about using program channels as well since that would show me everything but alas I am using successes. Sounds like separate campaigns is the way to go.
Unless you have RCE or you are pushing leads to a parent-child SFDC Campaign, this will be very difficult.
I highly recommend using One Program to push out one asset, then use URL params to add the lead to a SFDC Campaign based on Channel Type. I wrote about this several times on my site.