Budgets rarely come at the grain of the sales data. Here Targets has one row per region and month, while Sales has one row per order. There's no key to relate them directly, so the Targets table sits in the model without a relationship.
TREATAS lends a filter from one column to another: TREATAS(VALUES(Store[Region]), Targets[Region]) takes the regions visible in the current row and applies them to Targets[Region], as if a relationship existed. Do the same for year and month, and the target follows the report wherever Sales does:
Sales Target = CALCULATE(SUM(Targets[Target]),
TREATAS(VALUES(Store[Region]), Targets[Region]),
TREATAS(VALUES('Date'[Year]), Targets[Year]),
TREATAS(VALUES('Date'[Month Number]), Targets[Month Number]))
The edge case: below the target grain, such as a single day or store, a target means little. Report variance at month and region level.