to add to Michael,
anything you do in a new column on the reporting surface is not cached long-term, even when precalculated. This is because as you apply slicers/groupings/etc, it has to recompute anyway. Since lookups are expensive, they are better in the data layer.
HOWEVER, really the right tool in my opinion [though sometimes there are reasons not to use it] isinference. If you inference link the dataset that you are doing the lookups to into your model object, than you'll be able to report directly on the columns from that dataset without doing lookups. Unless both datasets are backing model objets in different parts of the model this can often be the best option. If you have reference datasets, link them to your model object, and nothing else, and all of the columns will be available in reporting.