If you can get away with the number of sessions without messages per session then this should be achievable from the CDR database.
I had a quick play and came up with this SQL query:
---------------------------------------------------------
use LcsCDR
SELECT sd.SessionIdTime,
fu.UserUri as 'FROM User',
tu.UserUri as 'TO User'
FROM
--LYNC2013/2010
VoipDetails AS vd LEFT OUTER JOIN
SessionDetails AS sd ON sd.SessionIdTime = vd.SessionIdTime AND vd.SessionIdSeq = sd.SessionIdSeq LEFT OUTER JOIN
Phones AS fp ON vd.FromNumberId = fp.PhoneId LEFT OUTER JOIN
Phones AS cp ON vd.ConnectedNumberId = cp.PhoneId LEFT OUTER JOIN
Users AS fu ON sd.User1Id = fu.UserId LEFT OUTER JOIN
Users AS tu ON sd.User2Id = tu.UserId LEFT OUTER JOIN
Gateways AS fgw ON vd.FromGatewayId = fgw.GatewayId LEFT OUTER JOIN
Gateways AS tgw ON vd.ToGatewayId = tgw.GatewayId LEFT OUTER JOIN
MediationServers AS fms ON vd.FromMediationServerId = fms.MediationServerId LEFT OUTER JOIN
MediationServers AS tms ON vd.ToMediationServerId = tms.MediationServerId LEFT OUTER JOIN
Phones AS dp ON vd.DisconnectedByPhoneId = dp.PhoneId LEFT OUTER JOIN
Users AS du ON vd.DisconnectedByURIId = du.UserId LEFT OUTER JOIN
Users AS ru ON sd.ReferredById = ru.UserId LEFT OUTER JOIN
dbo.Media AS m ON m.SessionIdTime = sd.SessionIdTime LEFT OUTER JOIN
dbo.ClientVersions AS fcv ON sd.User1ClientVerId = fcv.VersionId LEFT OUTER JOIN
dbo.ClientVersions AS tcv ON sd.User2ClientVerId = tcv.VersionId
WHERE m.MediaId = '1'
---------------------------------------------------------
It appears that MediaId "1" is IM. Ive run out of time today so haven't had the time to validate if this provides the correct output. I can see a few PSTN numbers in the results which makes me a bit skeptical.
Modified from - http://www.lync.geek.nz/p/call-accounting.html