Może zamiast tego użyć IN
SELECT `salesorder`,
`masterproduct`,
`family`,
`birthstamp`,
`duedate`,
COUNT( * ) AS `total`
FROM `report`
WHERE `birthstamp` BETWEEN '$startDT' AND '$endDT'
AND `family` IN ('Software_1Y','XI_1Y','PI_1Y')
GROUP BY `salesorder`,
`masterproduct`,
`family`,
`duedate`;
Powodem, dla którego nie są zwracane żadne wartości, jest ta sekcja
AND `family` = 'Software_1Y'
AND `family = 'XI_1Y'
AND `family` = 'PI_1Y'
family
nie może mieć wszystkich 3 wartości naraz, ale może to być 1 z 3 wartości.
Właśnie dlatego użyjesz IN.
Innym sposobem spojrzenia na to byłoby użycie OR, ale to naprawdę długo się męczy.