次の方法で共有


Power Query M での期間のサポート

Power Query M の期間は、日、時間、分、秒で表される 2 つの時点の差を表します。 顧客との対話の間の時間を計算する場合でも、経過時間に基づいてレコードをフィルター処理する場合でも、動的な時間ベースのロジックを構築する場合でも、堅牢でインテリジェントなデータ モデルを作成するには、期間が不可欠です。

この記事では、Power Query M の期間の構造、作成、および操作について説明します。これには、実際の例と共有のヒントが含まれており、独自のデータ ワークフローで期間を効果的に使用するのに役立ちます。

期間を作成する

期間は、 #duration(<days>, <hours>, <minutes>, <seconds>) 関数によって定義されます。 たとえば、 #duration(2, 3, 0, 0) は 2 日と 3 時間の期間を表します。 Power Query M には、コンテキストと必要な精度のレベルに応じて、期間を作成するいくつかの方法が用意されています。

#duration関数を使用する

期間を作成する最も直接的な方法は、 #duration(<days>, <hours>, <minutes>, <seconds>) 構文を使用する方法です。 各引数は数値である必要があり、結果は duration 値です。

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

この関数では、秒の小数部もサポートされています。

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

日付と時刻の値から期間を作成する

期間は、ある日付と時刻の値を別の日付と時刻の値から減算することによっても作成できます。 結果は、2 つの間の期間を表す期間です。

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

別の日付と時刻型から 1 つの日付と時刻型を減算すると (たとえば、date値からdatetime値を減算する)、エラーが発生します。 期間を決定するために異なる日付と時刻の種類を使用する必要がある場合は、 Date.FromDateTime.FromDateTimeZone.From、または Time.From 関数を使用して、日付と時刻のいずれかの型を明示的に変更します。

互換性のある値から変換する

Duration.From関数は、互換性のある値を期間に変換できます。 詳細については、「 Duration.From(値)」を参照してください。

期間の操作

Power Query 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

この計算により、経過時間に基づいて行をフィルター処理するなど、条件付きロジックで期間を使用できます。

タイプの互換性

期間は、算術式の日付と時刻の値と互換性がありますが、それらの値と互換性がありません。 たとえば、2 つの日付と時刻の値を減算すると、 durationが生成されますが、2 つの日付と時刻の値を追加することは無効です。

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 の Duration 関数

Power Query M には、期間を操作するための一連の組み込み関数が含まれています。 これらの関数を使用すると、変換、コンポーネントの抽出、期間値の集計が可能になり、時間ベースの変換に不可欠なツールになります。

Duration.From(値)

Duration.From関数は、互換性のある値を期間に変換します。 互換性のある値は、1 日の一部として解釈される数値または期間のテキスト表現で構成されます。 テキスト表現形式の詳細については、「 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

合計値関数

これらの関数は、小数部を含む、1 つの単位の期間の合計値を返します。

  • 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.99999999 秒) で構成されます。 ただし、期間パラメーターの最大値を超える場合があります。 この場合、Power Query M は次の値を自動的に正規化します。

  • 秒が分単位でオーバーフローする
  • 分が数時間にオーバーフローする
  • 時間が日にオーバーフローする

たとえば、実行中のプロセスの開始日時を示す列があるとします。 さらに、プロセスが完了するまでにかかった時間を秒単位で示す列があります。 プロセスが完了した日付と時刻を示す 3 番目の列を作成します。

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

次の表は、これらの計算の結果です。

開始時刻と期間から派生した終了日時列を含むテーブルのスクリーンショット (秒)。

そのため、プロセスが実行された秒数しかなくても、Power Query M はその期間の値を分、時間、および結果が評価される日にロールアップします。

週、月、年を表す

期間は固定単位 (日、時間、分、秒) に基づいているため、週、月、年というネイティブな概念はなく、長さが異なります。 Power Query M の duration 型は、カレンダー ルールを考慮しない固定構造です。 月または年にわたる正確な期間の場合は、固定期間を使用する代わりに、別の日付と時刻から 1 つの日付と時刻を減算します。 この方法では、閏年、さまざまな月の長さ、夏時間 (DST) が正しく処理されます。 ただし、クエリがローカル (Power Query Desktop) またはオンライン (Power Query Online) のどちらで実行されるかによって、一部の日付と時刻の動作が異なる場合があることにも注意してください。 詳細については、現在の 日付と時刻のローカル、固定、および UTC のバリアントに関するページを参照してください。 一般に、長期計算では固定期間に依存しないようにします。