[[20220725171720]] 『パワークエリ:時刻を10進数に変換したい。デー』(まっち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『パワークエリ:時刻を10進数に変換したい。データ型の変更タイミング』(まっち)

以下のテーブルがあるとします。
時間 10進数変換
1:00
1:05
1:10
1:15
1:20
1:25
1:30
1:35
1:40
1:45
1:50
1:55

(1)やりたいこと
時間 10進数変換
1:00  1
1:05  1.083333333
1:10  1.166666667
1:15  1.25
1:20  1.333333333
1:25  1.416666667
1:30  1.5
1:35  1.583333333
1:40  1.666666667
1:45  1.75
1:50  1.833333333
1:55  1.916666667

(2)やったこと
let

    ソース = Excel.CurrentWorkbook(){[Name="テーブル3"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"時間", type duration}}),
    追加されたカスタム = Table.AddColumn(変更された型, "10進数変換", each [時間]*24, type number)
in
    追加されたカスタム

(3)結果
10進数変換が空欄になる

最後の行にTable.TransformColumnTypesでtype numberを追加すればちゃんとですのです。

    追加されたカスタム = Table.AddColumn(変更された型, "10進数変換", each [時間]*24),
    変更された型1 = Table.TransformColumnTypes(追加されたカスタム,{{"10進数変換", type number}})
in
    変更された型1

なぜ、計算したところでデータ型を10進数にするとエラーになるのか知りたいのです。(計算してからデータ型変更ではなく、データ型変更してから、計算するから?)

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 number型の列にduration型の値を入れようとしてるから
 前にも回答してるはずです
 型を合わせてください
(´・ω・`) 2022/07/25(月) 18:34

https://docs.microsoft.com/ja-jp/powerquery-m/duration-totalminutes
 TotalMinuteを60で割ればいいとおもいます
 未検証です
(´・ω・`) 2022/07/25(月) 18:52

ご連絡ありがとうございます。
いつもデータ型で間違うので、ちゃんと型を合わせているつもりで、
最初に
1 変更された型で、"時間"を duration型に変更して
2 追加されたカスタムで、[時間]*24を計算して、number型に変更
と頭の中で理解していました。

でも、結果的には
1 変更された型で、"時間"を duration型に変更して
2 追加されたカスタムで、[時間]*24を 計算して
3 変更された型1で、計算結果を number型に変更
しなければならない。

データ型をあわせるタイミングの理解がまだまだです。

 TotalMinuteも勉強していきます。

(まっち) 2022/07/26(火) 09:29


 >[時間]*24を計算して、number型に変更 
 duration型を*24したら、number型になるとどうして思いましたか?
 durationのままです

 let
    ソース = Excel.CurrentWorkbook(){[Name="テーブル1"]}[Content],
    変更された型 = Table.TransformColumnTypes(ソース,{{"時間", type duration}}),
    追加されたカスタム = Table.AddColumn(変更された型, "10進数変換", each Duration.TotalSeconds([時間])/3600, type number)
 in
    追加されたカスタム

 型が分からないならany型にしておけば良くないですか?
(´・ω・`) 2022/07/26(火) 10:06

カスタム列の式を「= Number.From([時間])*24」としたらどうですか?
(d-q-t-p) 2022/07/26(火) 10:15

 >= Number.From([時間])*24
 これが一番簡単みたいですね。
(´・ω・`) 2022/07/26(火) 10:22

> duration型を*24したら、number型になるとどうして思いましたか?

実は、
Table.AddColumn(変更された型, "10進数変換", each [時間]*24, type number)
いままでこれを、「"10進数変換"を type numberに変更するもの」と考えていました。

Table.AddColumn(変更された型, "10進数変換", each Duration.TotalMinutes([時間]/60))
でできました。

 Number.From([時間])*24
本当に勉強になります。

ありがとうございました。

(まっち) 2022/07/26(火) 11:02


 >Table.AddColumn(変更された型, "10進数変換", each [時間]*24, type number)
 >いままでこれを、「"10進数変換"を type numberに変更するもの」と考えていました。

 それは違うとなんども... 
[[20220719113839]]

 再掲しておきます
(´・ω・`) 2022/07/26(火) 12:29

まったくもって申し訳ございません。

他の方のコードでよく
Table.AddColumnの時に、必ず、,type ●●と
逐一設定しておるので、まねしているうちに
すっかり抜け落ちていました。
(まっち) 2022/07/26(火) 13:11


別の部署から
 Number.FromやDate.Fromでくくればいいじゃんと言われました。

いろいろな方法があるようで・・・
(まっち) 2022/07/26(火) 15:17


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.