Are you trying to build a dimensional (Kimball) data warehouse? If so, there are some changes you can make.
(1) You don't need dateWiseData.
(2) You don't need total_impressions on devices.
(3) You don't need total_impressions on advertiserData.
Might I suggest that your model should look like more like this:
calendar (id, cal_date, cal_year, cal_month, ... )
device (id, name)
advertiser (id, name)
impression (calendar_id, device_id, advertiser_id, impression_count)
This assumes that a fact can have more than one impression. If this is not correct, then you have what is known as a "factless fact", and the table should look like this:
impression (calendar_id, device_id, advertiser_id)
Now you can run queries that, for example, calculate the total impressions by device on a given date:
select device.name,count(*)
from impression
inner join device on device.id = device_id
inner join calendar on calendar.id = calendar_id
where calendar.cal_date = '2016-02-08'
group by device.name;
Does that meet your requirement?
EDIT: Respond to question, below.
In that case you want the first form of the fact table:
impression (calendar_id, device_id, advertiser_id, impression_count)
and your query to find impressions by advertiser looks like this:
select advertiser.name,sum(impression_count)
from impression
inner join advertiser on advertiser.id = advertiser_id
inner join calendar on calendar.id = calendar_id
where calendar.cal_date = '2016-02-08'
group by advertiser.name;
If you attempt to carry totals anywhere else you will end up in a world of pain.