Josh,
Each item in a SSRS report item has a DataSet attached to it. Every function is assumed to be directed towards this DataSet.
You can, however, "break out" and access other DataSets. Aggregate functions such as SUM, FIRST, and LAST take an optional second parameter which is the name of the DataSet. So, for example, your table can be attached to DataSet1 but you want the sum of all data from DataSet2:
SUM(Fields!SomeData.Value, "DataSet2")
You can also embed functions inside of your aggregates. For example, if you wanted a count of all males in DataSet2:
SUM(IIF(Fields!Gender.Value = "male", 1, 0), "DataSet2")
This should be enough for most cases but in these aggregate functions you can't reference data from any other DataSet than the one you are calling in the function. Sometimes you want to match data to another DataSet column and pull data from a different column. This is where LOOKUP and LOOKUPSET come into play. The syntax is LOOKUP(Local Field Name, Remote Field Name, Remote Field to Get, DataSet Name). For example, if you wanted to look up gender by a client's ID:
LOOKUP(Fields!Client_ID.Value, Fields!Person_ID.Value, Fields!Gender.Value, "DataSet2")
In the above example, Client_ID is a column in DataSet1. The rest of the columns exist in DataSet2. You can get more fancy with this by using string functions to check multiple columns but I assume that is more advanced than what you're trying to accomplish right now.
LOOKUPSET works the same as LOOKUP but returns an array of matches. You would use this when there is not a 1 to 1 match on the data.
Hopefully this helps out. I know LOOKUP was a little confusing for me at first and the documentation wasn't very helpful.