Self-join via two CTEs — weekly channel buckets + a HAVING COUNT(DISTINCT) filter for dual-channel weeks. Pattern every cannibalization audit starts from.