Bekerja dengan tabel kalender

Analisis Deret Waktu di SQL Server

Maham Faisal Khan

Senior Data Science Content Developer

Apa itu tabel kalender?

SELECT *
FROM dbo.Calendar;
DateKey Date Day DayOfWeek DayName ...
20000101 2000-01-01 1 7 Saturday ...
20000102 2000-01-02 2 1 Sunday ...
20000103 2000-01-03 3 2 Monday ...
Analisis Deret Waktu di SQL Server

Isi tabel kalender

Kolom Umum

  • Date
  • Day Name
  • Is Weekend

Tahun Kalender

  • Calendar month
  • Calendar quarter
  • Calendar year

Tahun Fiskal

  • Fiscal week of year
  • Fiscal quarter
  • Fiscal first day of year

Kolom Khusus

  • Holiday name
  • Lunar details
  • ISO week of year
Analisis Deret Waktu di SQL Server

Membangun tabel kalender

CREATE TABLE dbo.Calendar
(
    DateKey INT NOT NULL,
    [Date] DATE NOT NULL,
    [Day] TINYINT NOT NULL,
    DayOfWeek TINYINT NOT NULL,
    DayName VARCHAR(10) NOT NULL,
    ...
)
SELECT
    CAST(D.DateKey AS INT) AS DateKey,
    D.[DATE] AS [Date],
    CAST(D.[day] AS TINYINT) AS [day],
    CAST(d.[dayofweek] AS TINYINT) AS [DayOfWeek],
    CAST(DATENAME(WEEKDAY, d.[Date]) AS VARCHAR(10)) AS [DayName],
    ...
Analisis Deret Waktu di SQL Server

Menggunakan tabel kalender

SELECT
    c.Date
FROM dbo.Calendar c
WHERE
    c.MonthName = 'April'
    AND c.DayName = 'Saturday'
    AND c.CalendarYear = 2020
ORDER BY
    c.Date;
Date
2020-04-04
2020-04-11
2020-04-18
2020-04-25
Analisis Deret Waktu di SQL Server

Menggunakan tabel kalender

SELECT
    c.Date
FROM dbo.Calendar c
WHERE
    c.MonthName = 'April'
    AND c.DayName = 'Saturday'
    AND c.CalendarYear = 2020
ORDER BY
    c.Date;
Date
2020-04-04
2020-04-11
2020-04-18
2020-04-25
Analisis Deret Waktu di SQL Server

Catatan singkat tentang APPLY()

SELECT
    FYStart =
        DATEADD(MONTH, -6,
            DATEADD(YEAR,
                DATEDIFF(YEAR, 0,
                    DATEADD(MONTH, 6, d.[date])), 0)),
    FiscalDayOfYear =
        DATEDIFF(DAY,
            DATEADD(MONTH, -6,
                DATEADD(YEAR,
                    DATEDIFF(YEAR, 0,
                        DATEADD(MONTH, 6, d.[date])), 0)), d.[Date]) + 1,
    FiscalWeekOfYear =
        DATEDIFF(WEEK,
            DATEADD(MONTH, -6,
                DATEADD(YEAR,
                    DATEDIFF(YEAR, 0,
                        DATEADD(MONTH, 6, d.[date])), 0)), d.[Date]) + 1
FROM dbo.Calendar d;
Analisis Deret Waktu di SQL Server

Catatan singkat tentang APPLY()

SELECT
    fy.FYStart,
    FiscalDayOfYear = DATEDIFF(DAY, fy.FYStart, d.[Date]) + 1,
    FiscalWeekOfYear = DATEDIFF(WEEK, fy.FYStart, d.[Date]) + 1
FROM dbo.Calendar d
    CROSS APPLY
    (
        SELECT FYStart =
            DATEADD(MONTH, -6,
                DATEADD(YEAR,
                    DATEDIFF(YEAR, 0,
                        DATEADD(MONTH, 6, d.[date])), 0))
    ) fy;
Analisis Deret Waktu di SQL Server

Ayo berlatih!

Analisis Deret Waktu di SQL Server

Preparing Video For Download...