파워 쿼리 M의 기간 지원

파워 쿼리 M의 기간은 일, 시간, 분 및 초로 표현된 두 시간 사이의 차이를 나타냅니다. 고객 상호 작용 간의 시간을 계산하든, 경과된 시간을 기준으로 레코드를 필터링하든, 동적 시간 기반 논리를 빌드하든 관계없이 지속 시간은 강력하고 지능적인 데이터 모델을 만드는 데 필수적입니다.

이 문서에서는 파워 쿼리 M에서 기간의 구조, 생성 및 조작을 살펴봅니다. 여기에는 사용자 고유의 데이터 워크플로에서 기간을 효과적으로 사용하는 데 도움이 되는 실용적인 예제 및 공유 팁이 포함되어 있습니다.

기간 만들기

기간은 함수에 의해 정의됩니다 #duration(<days>, <hours>, <minutes>, <seconds>) . 예를 들어 #duration(2, 3, 0, 0) 2일 및 3시간의 기간을 나타냅니다. 파워 쿼리 M은 컨텍스트 및 필요한 정밀도 수준에 따라 기간을 만드는 여러 가지 방법을 제공합니다.

#duration 함수 사용

기간을 만드는 가장 직접적인 방법은 구문을 사용하는 #duration(<days>, <hours>, <minutes>, <seconds>) 것입니다. 각 인수는 숫자여야 하며 결과는 기간 값입니다.

#duration(2, 5, 30, 0) // 2 days, 5 hours, 30 minutes

이 함수는 소수 자릿수 초도 지원합니다.

#duration(0, 0, 0, 1.75) // 1.75 seconds

날짜 및 시간 값에서 기간 만들기

한 날짜 및 시간 값을 다른 날짜와 시간 값에서 빼서 기간을 만들 수도 있습니다. 결과는 둘 사이의 시간 범위를 나타내는 기간입니다.

let
    Source =
    {
        #date(2025, 7, 24) - #date(2025, 7, 23),
        // Result: #duration(1, 0, 0, 0)
        #time(12, 0, 0) - #time(11, 30, 30),
        // Result: #duration(0, 0, 29, 30)
        #datetime(2025, 7, 24, 12, 0, 0) - #datetime(2025, 7, 23, 12, 0, 0),
        // Result: #duration(1, 0, 0, 0)
        #datetimezone(2025, 7, 24, 12, 0, 0, 7, 0) - #datetimezone(2025, 7, 23, 10, 30, 0, 4, 0),
        // Result: #duration(0, 22, 30, 0)
        #datetime(2025, 7, 24, 12, 0, 0) - DateTime.From(#date(2025, 7, 23))
        // Result: #duration(1, 12, 0, 0)
    }
in
    Source

비고

다른 날짜 및 시간 형식에서 하나의 날짜 및 시간 형식을 빼면(예: 값에서 date 값 빼기datetime) 오류가 발생합니다. 다른 날짜 및 시간 형식을 사용하여 기간을 결정해야 하는 경우 , Date.From, DateTime.From또는 DateTimeZone.From 함수를 사용하여 Time.From날짜 및 시간 형식 중 하나를 명시적으로 변경합니다.

호환되는 값에서 변환

함수는 Duration.From 호환되는 값을 기간으로 변환할 수 있습니다. 자세한 내용은 (값)으로Duration.From 이동합니다.

기간 작업

파워 쿼리 M에서 기간이 만들어지면 다양한 작업 및 함수를 사용하여 조작할 수 있습니다. 이러한 기능은 시간 기반 논리 및 계산을 위해 기간을 매우 다양하게 만듭니다.

산술 연산

기간은 표준 산술 연산을 지원합니다.

  • 추가 및 빼기: 서로 또는 날짜 및 시간 값에서 기간을 추가하거나 뺍니다.

    let
        Source = {
            #duration(1, 2, 0, 0) + #duration(0, 3, 30, 0),
            // Result: #duration(1, 5, 30, 0)
            #duration(1, 2, 0, 0) - #duration(0, 3, 30, 0),
            // Result: #duration(0, 22, 30, 0)
            #datetime(2025, 7, 24, 12, 0, 0) + #duration(0, 2, 0, 0),
            // Result: #datetime(2025, 7, 24, 14, 0, 0)
            #datetime(2025, 7, 24, 12, 0, 0) - #duration(0, 2, 0, 0),
            // Result: #datetime(2025, 7, 24, 10, 0, 0)
            #time(12, 0, 0) - #duration(0, 3, 30, 0)
            // Result: #time(8, 30, 0)
        }
    in
        Source
    
  • 부정: 기간을 부정하여 방향을 되돌릴 수 있습니다.

    let
        Source = {
            #datetime(2025, 7, 24, 12, 0, 0) + -#duration(0, 2, 0, 0),
            // Result (subtracts two hours): #datetime(2025, 7, 24, 10, 0, 0)
            #datetime(2025, 7, 23, 12, 0, 0) - #datetime(2025, 7, 24, 12, 0, 0)
            // Result: -#duration(1, 0, 0, 0)
        }
    in
        Source
    

곱하기 및 나누기

기간을 숫자 값으로 곱하거나 나눌 수 있습니다.

let
    Source = {
        #duration(0, 2, 0, 0) * 2,
        // Result (4 hours): #duration(0, 4, 0, 0)
        #duration(1, 0, 0, 0) / 2
        // Result (12 hours): #duration(0, 12, 0, 0)
    }
in
    Source

이 계산은 기간 크기 조정 또는 평균 시간 간격에 유용합니다.

비교

표준 비교 연산자를 사용하여 기간을 비교할 수 있습니다.

let
    Source = #duration(1, 0, 0, 0) > #duration(0, 23, 59, 59)
        // Result: true
in
    Source

이 계산을 통해 경과된 시간을 기준으로 행 필터링과 같은 조건부 논리에서 기간을 사용할 수 있습니다.

형식 호환성

기간은 산술 식의 날짜 및 시간 값과 호환되지만 서로 교환할 수는 없습니다. 예를 들어 두 날짜 및 시간 값을 빼면 두 개의 날짜 및 시간 값을 duration추가하는 것은 유효하지 않습니다.

let
    Source =
    {
        #datetime(2025, 7, 24, 12, 0, 0) - #datetime(2025, 7, 23, 12, 0, 0),
        // Result: #duration(1, 0, 0, 0)
        #datetime(2025, 7, 24, 12, 0, 0) + #datetime(2025, 7, 23, 12, 0, 0)
        // Result: Error
    }
in
    Source

M의 기간 함수

파워 쿼리 M에는 기간 작업을 위한 기본 제공 함수 집합이 포함되어 있습니다. 이러한 함수는 변환, 구성 요소 추출 및 기간 값의 집계를 허용하므로 시간 기반 변환에 필수적인 도구가 됩니다.

Duration.From(값)

이 함수는 Duration.From 호환되는 값을 기간으로 변환합니다. 호환되는 값은 하루의 분수로 해석되는 숫자 또는 기간의 텍스트 표현으로 구성됩니다. Duration.FromText 텍스트 표현 형식에 대한 자세한 내용은 로 이동합니다.

let
    Source =
    {
        Duration.From(1.5),
        // Result: 1.5 days = #duration(1, 12, 0, 0)
        Duration.From("2.05:55:20.242")
        // Result: #duration(2, 5, 55, 20.242)
    }
in
    Source

구성 요소 접근자

이러한 함수는 기간의 특정 부분을 추출합니다.

  • Duration.Days(<duration>)

    기간의 전체 일 수를 반환합니다.

  • Duration.Hours(<duration>)

    전체 일수를 초과하는 시간을 반환합니다.

  • Duration.Minutes(<duration>)

    전체 시간을 초과하는 시간(분)을 반환합니다.

  • Duration.Seconds(<duration>)

    전체 분을 초과하는 시간(초)을 반환합니다.

let
    Source = #duration(2, 5, 30, 45),
    TextFormat = Text.Format(
        "Duration = #{0} days, #{1} hours, #{2} minutes, and #{3} seconds.",
        {
            Duration.Days(Source),
            Duration.Hours(Source),
            Duration.Minutes(Source),
            Duration.Seconds(Source)
        }
    )
    // Results: "Duration = 2 days, 5 hours, 30 minutes, and 45 seconds."
in
    TextFormat

총 값 함수

이러한 함수는 소수 부분을 포함하여 단일 단위로 기간의 총 값을 반환합니다.

  • Duration.TotalDays(<duration>)
  • Duration.TotalHours(<duration>)
  • Duration.TotalMinutes(<duration>)
  • Duration.TotalSeconds(<duration>)
let
    Source =
    {
        Duration.TotalDays(#duration(1, 12, 0, 0)),    // 1.5 days
        Duration.TotalHours(#duration(1, 12, 0, 0)),   // 36 hours
        Duration.TotalMinutes(#duration(1, 12, 0, 0)), // 2160 minutes
        Duration.TotalSeconds(#duration(1, 12, 0, 0))  // 129600 seconds
    }
in
    Source

기간 정규화

대부분의 경우 기간은 일, 시간(최대 23시간), 분(최대 59분) 및 초(최대 59.9999999초)로 구성됩니다. 그러나 경우에 따라 기간 매개 변수의 최대값을 초과할 수 있습니다. 이 경우 파워 쿼리 M은 다음 값을 자동으로 정규화합니다.

  • 초 오버플로(분)
  • 시간 단위로 분 오버플로
  • 시간이 일로 오버플로

예를 들어 실행 중인 프로세스의 시작 날짜와 시간을 제공하는 열이 있다고 가정해 보겠습니다. 또한 프로세스가 완료되는 데 걸린 시간(초)을 보여 주는 열이 있습니다. 프로세스가 완료된 날짜와 시간을 보여 주는 세 번째 열을 만들려고 합니다.

let
    Source = #table(type table[StartTime = datetime, Seconds = Int64.Type],
    {
        {#datetime(2025, 7, 25, 8, 0, 0), 5400},
        {#datetime(2025, 7, 25, 13, 15, 0), 86400},
        {#datetime(2025, 7, 24, 22, 30, 0), 172800}
    }),
    AddSeconds = Table.AddColumn(
        Source,
        "EndTime",
        each [StartTime] + #duration(0, 0, 0, [Seconds]),
        type datetime
    )
in
    AddSeconds

다음 표는 이러한 계산의 결과입니다.

시작 시간 및 기간(초)에서 파생된 종료 날짜 및 시간 열을 포함하는 테이블의 스크린샷.

따라서 프로세스가 발생한 시간(초)만 있었음에도 불구하고 파워 쿼리 M은 결과를 평가할 때 해당 기간 값을 분, 시간 및 일로 롤업합니다.

주, 월 및 연도를 나타냅니다.

기간은 고정 단위(일, 시간, 분, 초)를 기반으로 하므로 길이가 다른 주, 월 또는 연도의 기본 개념은 없습니다. duration 파워 쿼리 M의 형식은 일정 규칙을 고려하지 않는 고정 구조입니다. 월 또는 연도에 걸친 정확한 기간을 위해 고정 기간을 사용하는 대신 다른 날짜와 시간을 뺍니다. 이 방법은 윤년, 다양한 월 길이 및 DST(일광 절약 시간)를 올바르게 처리합니다. 그러나 쿼리가 로컬(파워 쿼리 데스크톱) 또는 온라인(파워 쿼리 온라인)에서 실행되는지 여부에 따라 일부 날짜 및 시간 동작이 다를 수 있습니다. 자세한 내용은 현재 날짜 및 시간의 로컬, 고정 및 UTC 변형으로 이동합니다. 일반적으로 장기 계산에 고정된 기간을 사용하지 않도록 합니다.