Facebook (Meta) Ads to Power BI: synthetic reporting example Prepared 17 October 2026 by Turing BI https://turingbi.com/insights/connect-meta-ads-to-power-bi PURPOSE AND LIMITS All records and identifiers are invented teaching data. This normalised CSV is not a Meta API response or a client result. Arithmetic is independently checked. No private Meta API, DAX or Power BI Desktop/Service execution is claimed. No PBIX is included. This pack contains no ad account credentials or tokens. FILES campaign-daily.csv: four daily rows, two fictional campaigns in one account. measures.dax: create each definition as a separate measure on MetaCampaigns. expected-results.csv: control values at Decimal precision and display formats. REPORT BASIS Reporting dates: 14 and 15 September 2026, account timezone Europe/London. Assumed account/source currency: GBP. Action reporting time: impression. Chosen attribution window: 7d_click. This is not an Ads Manager default claim. The purchase action label TEACHING_WEBSITE_PURCHASE is invented for this model; it is not a Meta API identifier. Live extraction must select one verified account-returned purchase action_type and the entry with the same action_type in the action_values array. The extraction timestamp is illustrative, not evidence of a live account request. Preserve source metric precision in live data; sample whole counts do not establish that every live reported conversion count is an integer. IMPORT Desktop: Get data > Text/CSV > campaign-daily.csv > Transform Data. Name the query MetaCampaigns. Set date_start/date_stop to Date; spend and reported_purchase_value to Fixed Decimal Number. For this sample, set impressions, inline_link_clicks and reported_purchases to Whole Number. Keep identifiers and reporting-basis metadata as Text. Close & Apply. Add each measure separately. Use cards for totals and a table by reporting date and campaign_id. Format Link CTR as percentage with two decimals, Meta Reported ROAS as decimal ratio, and monetary measures as GBP two decimals. CONTROL RESULTS Spend GBP 600.00; impressions 45000; link clicks 690; reported purchases 40; reported purchase value GBP 2400.00; Meta Reported ROAS 4.00; Link CTR 1.53%; cost per link click GBP 0.87; cost per reported purchase GBP 15.00; CPM GBP 13.33 after rounding. The four row ROAS values are 6, 3, 4.8 and 3.6. Their average, 4.35, uses the wrong spend weighting. Divide total reported value by total spend to get 4.00. SOURCE AND SNAPSHOT CONTROLS Keep one current row per account/campaign/day/reporting basis. Replace repeat extractions at that grain; keep audit history separately. Do not combine campaign totals with ad-level rows or sum overlapping extracts. Extract the selected action count/value as scalars without expanding both action arrays into a Cartesian join that repeats cost. Do not sum purchase aliases. Keep unavailable/omitted actions distinct from verified zero results. Match Ads Manager's dates, timezone, metric and supported attribution settings before comparing. Store the actual validated source definitions in a live build. Keep Meta-reported value, GA4-attributed revenue and store revenue separate. The ratio shown here is not profit, incrementality or a promise of ad results. Validate API coverage and actual Power BI Service refresh before relying on a build.