일정 기간 동안 KPI의 평균 델타 변화를 계산합니다.

일정 기간 동안 KPI의 델타 변화를 계산해야 하는 경우가 많습니다. 일별, 주별, 월별 또는 분기별 수준일 수 있습니다. 제품 KPI의 변경 사항을 모니터링하는 것은 매우 중요한 작업입니다. 트렌드를 분석하면 제품을 개선하는 데 도움이 됩니다.



이 블로그에서는 지난 6개월 동안 기사에 대한 총 방문자 수의 월 평균 증가/감소를 찾아야 하는 유사한 상황에 대해 논의할 것입니다.

(표에는 각 기사에 대한 지난 7개월 동안의 데이터가 포함되어 있습니다.)

╔════════════════╦═══════════════╦═════════════════╗
║  article_id    ║ year_month    ║ total_visits    ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202201        ║ 700             ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202202        ║ 1100            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202203        ║ 1200            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202204        ║ 1440            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202205        ║ 4300            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202206        ║ 4500            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 1              ║ 202207        ║ 4100            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 5              ║ 202203        ║ 9800            ║
╠════════════════╬═══════════════╬═════════════════╣
║ 5              ║ 202204        ║ 12000           ║
╠════════════════╬═══════════════╬═════════════════╣
║ 5              ║ 202205        ║ 14000           ║
╚════════════════╩═══════════════╩═════════════════╝
--------------------------------------------------------------
The expected output for the article with ID 1
╔════════════════╦═════════════╗
║  article_id    ║ monthly_avg ║
╠════════════════╬═════════════╣
║ 1              ║ 760         ║
╚════════════════╩═════════════╝


이를 해결하는 첫 번째 단계는 모든 기사에 대해 이번 달과 지난 달 간의 방문 수 차이를 계산하는 것입니다. 여기서 LAG라는 특수 기능을 사용할 수 있습니다.

LAG function provides access to a row at a given physical offset that comes before the current row, which means the function gives us the nth last row value of a particular column. It takes at least 2 arguments in this case, first is the column and second is the offset.



LAG 함수를 사용하여 얻은 지난 달 방문에서 이번 달 방문을 빼서 방문 차이를 계산하는 CTE를 만듭니다.

WITH cte_articles
AS (
    SELECT article_id
        ,year_month
        ,total_visits - (
            LAG(total_visits, 1) OVER (
                PARTITION BY article_id ORDER BY year_month ASC
                )
            ) AS diff_in_visits
    FROM articles
    )


이제 어려운 작업이 완료되었습니다. 지난 6개월 간의 데이터만 포함하도록 필터를 추가하지 않은 이유가 궁금하실 것입니다. 지난 6개월의 월간 차이를 계산하려면 7개월의 데이터가 필요하고 LAG 함수가 첫 달 행의 마지막 오프셋 값을 제공하면 null이 되기 때문입니다.

AVERAGE 함수를 사용하여 방문의 평균 차이를 계산할 때 이 null은 무시됩니다.

모든 기사의 평균을 계산합니다.

SELECT article_id
    ,avg(diff_in_visits) AS monthly_avg
FROM cte_articles
GROUP BY article_id;


이것은 SQL만 사용하여 KPI의 평균 델타 변경을 얼마나 쉽게 계산할 수 있는지 보여줍니다.

좋은 웹페이지 즐겨찾기