You might want an introduction to ExecuteSQL() so you do not need to establish relationships to get reporting data.
This should be pretty simple:
ExecuteSQL( "SELECT COUNT(*) FROM ORGs WHERE Start_Date >= ? AND Cancel_Date IS NULL" ; "" ; "" ; GetAsDate( "1/1/" & Year (get(currentdate)) ) )
That counts the number of ORGs with a start_date greater/equal to the first of the current year, and the cancel_date is empty.
You can use the Tools > Data Viewer to play around with that calculation until it returns the value you are expecting. There is a great guide on using the ExecuteSQL() function here:
Make sure to read the comments as well.
It's worth training on, since it makes reporting a LOT easier since you don't have to setup fields, calculations and relationships to get summaries through constrained or dynamic relationships.
I’ve had trouble with ExecuteSQL before so I found another, very cumbersome way to do what I wanted. Using several relationships and count calc fields, I calculated all of the Orders prior to the Start Date and all of the Cancellations before the Start Date. Subtracted one from the other to get Clients as of Start Date. Then repeated for End Date.
FYI … Matching on YEARS::StartDate > ORGs::Order Date threw me a curve until discovered that blank Order Dates in ORGs were apparently counted as matches but I got that sorted out.
Anyway, thanks for your help. I’ve read all of the materials on SQL that you referenced but it seems very “fiddly” to me but I greatly appreciate your reply.