always error "cannot insert value NULL" sqlserver
First observation is that your update statement has no WHERE clause. This means that it will update all rows of the table. Are you sure you want that?

From the comments, it seems that all rows have year_period = 2016 and you do want to update all of them. In my opinion, it wouldn't hurt to explicitly add this condition in the statement. The opposite, it would avoid any unwanted changes, in case you run it in the future, say next year when you have rows with 2016 and 2017.
Second, the error is due to for some rows, either the subquery returns a NULL value or it return no rows at all. 

You can easily find the "missing" values (those that the subquery returns no rows) with this:

SELECT DISTINCT tr_kpi_id
FROM tmpiscunitmap AS t
WHERE NOT EXISTS
      ( SELECT *
        FROM    tmptr_kpi AS a
            INNER JOIN tmptr_kpi AS b ON a.tr_kpi_code = b.tr_kpi_code
        WHERE
            a.year_period = 2015 AND
            b.year_period = 2016 AND
            a.tr_kpi_id = t.tr_kpi_id
      ) 
--  AND year_period = 2016 
 ;