We use such report:
Select Top 1000000 tblADObjects.sAMAccountName,
tblADusers.email,
tblAssets.AssetName,
tblOperatingsystem.Caption,
tblAssets.Processor,
tblADusers.Info,
tblADusers.Division,
ex.group_name
From (Select Distinct em.ChildAdObjectID,
Stuff((Select ', ' + gg.group_name As [text()] From (Select io.ADObjectID,
Coalesce(ig.Name, io.sAMAccountName, 'unknown') group_name
From tblADGroups ig
Inner Join tblADObjects io On io.ADObjectID = ig.ADObjectID
Where Coalesce(ig.Name, io.sAMAccountName, 'unknown') Like 'O365 Users'
And io.domain = 'your_domain') gg Inner Join tblADMembership m On
gg.ADObjectID = m.ParentAdObjectID
Where m.ChildAdObjectID = em.ChildAdObjectID Order By gg.group_name,
m.ChildAdObjectID For Xml Path('')), 1, 1, '') group_name
From tblADMembership em) ex
Inner Join tblADObjects On tblADObjects.ADObjectID = ex.ChildAdObjectID And
ex.group_name <> ''
Inner Join tblADusers On tblADObjects.ADObjectID = tblADusers.ADObjectID
left Join tblAssets On tblADusers.Username = tblAssets.Username
left Join tblOperatingsystem On
tblAssets.AssetID = tblOperatingsystem.AssetID
Where tblADusers.Userdomain = 'your_domain'