Klaviyo to Power BI: synthetic campaign reporting example
Prepared 17 October 2026 by Turing BI
https://turingbi.com/insights/connect-klaviyo-to-power-bi

PURPOSE AND LIMITS
All records and identifiers are invented teaching data. The CSV is a normalised
staging extract, not a Klaviyo API response. Its arithmetic has been independently
checked. The request template and DAX have not been executed against a private
Klaviyo account or in Power BI Desktop/Service. No PBIX is included.

FILES
campaign-values.csv: two fictional email campaign messages.
measures.dax: create each definition as a separate Power BI measure.
expected-results.csv: control values at Decimal precision and display formats.

REPORT BASIS
One synthetic account, two messages, email only, one assumed Placed Order metric.
Reporting dates: 1 to 30 September 2026, account-local calendar dates.
Account timezone: Europe/London. Source values are assumed GBP.
The retrieved_at timestamp is illustrative, not evidence of a live extraction.
Klaviyo's currency setting alone does not convert source amounts into GBP.
Delivered means received email count. clicks_unique is unique within each message.
conversions counts attributed Placed Order events here, not unique customers.
conversion_value is their attributed value, not store net sales, profit or lift.

IMPORT
Power BI Desktop: Get data > Text/CSV > campaign-values.csv > Transform Data.
Name the query KlaviyoCampaigns. Set identifiers, channel, currency, timezone,
window strings and retrieval timestamp to Text. Set delivered, clicks_unique and
conversions to Whole Number. Set conversion_value to Fixed Decimal Number.
Close & Apply. Add measures separately from measures.dax. Use cards for totals
and a table grouped by campaign_message_id.
Format Email Click Rate as a percentage with two decimals. Format monetary
measures as GBP with two decimals. Counts use whole numbers.

CONTROL RESULTS
Delivered Emails: 1500. Message Unique Clicks: 80. Attributed Orders: 25.
Attributed Order Value: GBP 1700.00. Email Click Rate: 5.33% after rounding.
Attributed Value per Delivery: GBP 1.13. Attributed Value per Order: GBP 68.00.
The row click rates are 4% and 8%; averaging them to 6% gives the wrong weighting.
Summed per-message unique clicks do not establish distinct people across messages.
Do not calculate Klaviyo conversion rate from total conversion events; that rate
uses conversion_uniques, which this teaching extract does not include.

SNAPSHOT AND SOURCE CONTROLS
Load one current snapshot per account, campaign, campaign message, send channel,
conversion metric and report window. Replace/upsert repeat extractions of the
same window at that grain; do not append them or sum overlapping reporting
windows. Keep audit history separately.
Record attribution settings, currency/value semantics and retrieval time in a
live build. Preserve report window/timezone semantics when reconciling.
Keep attributed performance separate from total Shopify order revenue.
Check API coverage and Power BI Service refresh before relying on a build.
Keep private API keys server-side; this pack contains no account credentials.
