Amazon Vendor Central to Power BI: synthetic source-to-report example Prepared 17 October 2026 by Turing BI https://turingbi.com/insights/connect-amazon-to-power-bi PURPOSE Trace two invented Vendor Sales source rows into a CSV and compare the totals with the separate source aggregate before creating Power BI measures. Every record and identifier is synthetic. SYN-ASIN-A/B, SYN-VENDOR, SYN-MARKETPLACE-US and SYN-REPORT are teaching labels, not valid Amazon request identifiers. The JSON follows selected Vendor Sales report field shapes; it is not a downloaded API response. No live API, DAX, Desktop or Service execution is claimed. No PBIX is included. FILES vendor-sales-source.json: source-shaped teaching report with salesByAsin rows and a separate salesAggregate control. vendor-sales.csv: normalised rows from salesByAsin only. normalise-vendor-sales.py: local standard-library Python 3 normaliser. measures.dax: create each definition as a separate measure. expected-results.csv: totals and display formats for the teaching model. SOURCE CONTRACT Programme: Vendor, not Seller Central or advertising. Report type: GET_VENDOR_SALES_REPORT. Options: reportPeriod DAY, distributorView MANUFACTURING, sellingProgram RETAIL. Date: 14 September 2026. Currency: assumed USD for this US-marketplace scenario. Reporting timezone: PST, following Amazon's Vendor Retail Analytics definition, irrespective of marketplace location. The data retains date-only period labels; the example does not infer or convert a UTC offset. MANUFACTURING includes manufactured ASINs regardless of who sourced them to Amazon. Ordered metrics are populated for MANUFACTURING; this example must not be relabelled SOURCING with those fields assumed available. MAPPING reportSpecification supplies type, options, marketplace and last-updated date. salesByAsin[].startDate/endDate/asin -> start_date/end_date/asin. orderedUnits -> ordered_units; orderedRevenue.amount -> ordered_revenue. shippedUnits -> shipped_units; shippedRevenue.amount -> shipped_revenue. customerReturns -> customer_returns; shippedCogs.amount -> reported_shipped_cogs. Each monetary object's currencyCode is checked before the row is flattened. The normaliser adds invented account/report labels, an illustrative DONE status and the timestamp 2026-09-18T12:00:00Z. These do not establish a processed API job. RUN THE LOCAL NORMALISER Unzip all files into one folder. Run: python3 normalise-vendor-sales.py To check the supplied CSV without replacing it: python3 normalise-vendor-sales.py --check The script reads the bundled JSON and writes/checks the CSV in that same folder. It uses local files and the Python standard library, with no network connection. Its fixed teaching metadata needs replacement and validation for a live build. IMPORT INTO POWER BI Desktop: Get data > Text/CSV > vendor-sales.csv > Transform Data. Name the query AmazonVendorSales. Keep identifiers, timezone and metadata as Text; set start_date/end_date/source_last_updated_date to Date. Set ordered_units, shipped_units and customer_returns to Whole Number. Set ordered_revenue, shipped_revenue and reported_shipped_cogs to Fixed Decimal Number. Close & Apply. Create each measure separately from measures.dax. Use cards for the totals and a table by asin. Format amounts as USD with two decimal places. The CSV contains only the two product rows; salesAggregate stays separate. CONTROL RESULTS Ordered Units 25; Ordered Revenue USD 600.00; Shipped Units 20; Shipped Revenue USD 480.00; Customer Return Units 3. Revenue per Shipped Unit = 480 / 20 = USD 24.00. The two row averages are USD 20.00 and USD 30.00. Their simple mean, USD 25.00, uses the wrong unit weighting. The combined result is USD 24.00. Reported shipped COGS totals USD 340.00. It is a distinct source metric, not a calculation of the vendor's own costs or profit. INTERPRETATION AND LOAD CONTROLS Ordered and shipped measures describe different activity. They are not cash settlements or the supplier's profit. Amazon defines revenue fields with return adjustments; subtracting the same refunds again can double-count adjustments. Customer Return Units is the period's reported quantity. The example does not calculate a cohort return rate, convert those units to money, or establish which original shipments they belong to. Keep Seller finance/settlement data, Vendor retail metrics and advertising attribution in separately defined facts. Add costs only from the agreed sources. Use the same marketplace, report options, period and currency for reconciliation. Retain one current row per vendor, marketplace, ASIN, period, view, programme, report type and currency. Replace repeat extractions at that grain; keep source documents and load history separately. Do not append the source aggregate or sum overlapping report periods. Changed source values require a refreshed check. Check live access, report completion, source coverage and Power BI Service refresh separately. Tokens and signed download URLs belong in controlled extraction infrastructure. This teaching pack contains no account credentials. OFFICIAL FIELD DEFINITIONS https://developer-docs.amazon/sp-api/docs/report-type-values-analytics https://github.com/amzn/selling-partner-api-models/blob/main/schemas/reports/vendorSalesReport.json