I have this in my init.el - I did it years ago and it could be refined, but works for my needs. My custom agenda view breaks the agenda into 4 blocks of todos
(setq org-agenda-custom-commands
(quote
(("n" "Agenda and all TODO's"
((agenda "" nil)
(alltodo "" nil))
nil)
("wr" "Weekly Report"
((todo "DONE|CANCELLED"
((org-agenda-overriding-header "Completed and Cancelled : Last Week")))
(todo "STARTED|NEXT"
((org-agenda-overriding-header "WIP")))
(todo "HOLD|DELEGATED"
((org-agenda-overriding-header "On Hold and Delegated Tasks")))
(todo "TODO"
((org-agenda-overriding-header "Task Backlog"))))
nil nil))))