LOGO-850-stripe.png

A 93% approval rate sounds great... until you look closer.

On the surface, this global payment portfolio looked incredibly healthy: a steady 93.12% approval rate across $20.28M in Total Payment Volume (TPV). But macro-level KPIs often lie. By diving into the raw transaction data, I discovered that these aggregated metrics were masking severe revenue leakage and operational bottlenecks concentrated in just a few key international corridors

The Stack & Scope β€’ Tools Used: SQL Server, SQL, Power BI, Root Cause Analysis
β€’ Dataset Scale: 200,000 global transactions totaling $20.28M TPV and $208.58K in processing fee revenue

πŸ“Š Executive Power BI Dashboard

first page.png

Executive Insight: This dashboard serves as the operational command center. It highlights how a healthy 93.12% aggregate approval rate completely masks severe performance drops in regional corridors.

πŸ” Root Cause Analysis & Key Insights

page 2.png

πŸ’» The Technical Engine: SQL Code

--Hypothesis 1--
--Countries may have different approval rates--

SELECT
    Country,
    COUNT(*) AS Transactions,
    ROUND(
        100.0 *
        SUM(CASE WHEN Status='Approved' THEN 1 ELSE 0 END)
        / COUNT(*),
        2
    ) AS ApprovalRate
FROM Stripe
GROUP BY Country
ORDER BY ApprovalRate ASC;

SELECT
    Country,
    SUM(Revenue) AS Revenue
FROM Stripe
GROUP BY Country
ORDER BY Revenue DESC;

SELECT
    Country,
    ROUND(
        100.0 *
        SUM(CASE WHEN FraudFlag='Yes' THEN 1 ELSE 0 END)
        / COUNT(*),
        2
    ) AS FraudRate
FROM Stripe
GROUP BY Country
ORDER BY FraudRate DESC;
--Hypothesis 2--
--Certain payment methods may perform better than others--

SELECT
    PaymentMethod,
    COUNT(*) AS Transactions,
    ROUND(
        100.0 *
        SUM(CASE WHEN Status='Approved' THEN 1 ELSE 0 END)
        / COUNT(*),
        2
    ) AS ApprovalRate
FROM Stripe
GROUP BY PaymentMethod
ORDER BY ApprovalRate ASC;

SELECT
    PaymentMethod,
    SUM(Revenue) AS Revenue
FROM Stripe
GROUP BY PaymentMethod
ORDER BY Revenue DESC;
--Hypothesis 3--
--Fraud controls may be causing additional declines--

SELECT
    DeclineReason,
    COUNT(*) AS Declines
FROM Stripe
WHERE Status = 'Declined'
GROUP BY DeclineReason
ORDER BY Declines DESC;