[[20230716202520]] 『パワークエリで時間列と日付列を足したい』(びき) ページの最後に飛ぶ

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

 

『パワークエリで時間列と日付列を足したい』(びき)

お世話になります
CSVデータで日付列と時間列を足すのはいったん数値にする必要があるのでしょうか?
下記のようなデータを日時にしたくて、エディタで[始日付]+[始時間]としたらエラーになりました。

始日付  始時間
2023/5/21 0:36:34

よろしくお願いします

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


Excelではなくエディタで?

(?) 2023/07/16(日) 21:28:12


はい、クエリエディターのカスタム列でしてみています
(びき) 2023/07/16(日) 21:45:33

すみませんクエリでCSV読み込むときにと書くべきだったと思います
(びき) 2023/07/16(日) 21:47:11

 [始日付]と[始時間]の型がどうなっているかによります。

 日付型と時刻型は加算できないようです

 [始日付]を日付/時刻型、[始時間]を期間型に変換してしまえば加算できます
(´・ω・`) 2023/07/16(日) 23:25:31

ありがとうございます
日付型と時刻型です。
早速変換してみます

(びき) 2023/07/17(月) 00:24:27


[始時間]を期間型にするとエラーになるので、
型を両方同じにして、日付/時刻型 同士、 日付同士にしてみましたが、+するとエラーになりました。
クエリ-が古いせいかもしれませんのでまた別のPCで試します
有難うございました
(びき) 2023/07/17(月) 00:47:48

 先に書いたように、日付時刻型と期間型でないと加算はうまくいきません

 CSVから読むときに最初に型を変更してもよいし
 let
    ソース = Csv.Document(File.Contents("test.csv"),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
    昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true]),
    変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"始日付", type datetime}, {"始時間", type duration}}),
    追加されたカスタム = Table.AddColumn(変更された型, "カスタム", each [始日付]+[始時間])
 in
    追加されたカスタム

 日付型、時刻型で読んでおいて変換してもよいし
 let
    ソース = Csv.Document(File.Contents("D:\test.csv"),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
    昇格されたヘッダー数 = Table.PromoteHeaders(ソース, [PromoteAllScalars=true]),
    変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"始日付", type date}, {"始時間", type time}}),
    追加されたカスタム = Table.AddColumn(変更された型, "カスタム", each DateTime.From([始日付])+Duration.From(Number.From([始時間])))
 in
    追加されたカスタム

 文字列を作っておいてから日付時刻型に変換するとか、
 ほかにもやり方はあると思いますので
 2010でもうまくやれる方法はあると思います。たぶん
(´・ω・`) 2023/07/17(月) 07:45:22

はい、CSVから日付型、時刻型で読んでおいて時刻型の[始時間]を期間型にするとエラーとなり変換できなかったので同じ型で試してみました。
どちらも10進数にすればできそうですが、日付型でできそうな気がしておりました。

(びき) 2023/07/17(月) 09:44:34


 時刻型を期間型に変換するとき、以下にかいてあるように、
 Duration.From 
https://learn.microsoft.com/ja-jp/powerquery-m/duration-from
 Duration.FromText
https://learn.microsoft.com/ja-jp/powerquery-m/duration-fromtext 

 = Table.AddColumn(変更された型, "カスタム", each Duration.From(Number.From([時刻])))
 とするか
 = Table.AddColumn(変更された型, "カスタム", each Duration.FromText(Time.ToText([時刻])))

 としないといけないです
(´・ω・`) 2023/07/17(月) 11:04:39

有難うございました。
AddColumnで、できました。
例からの列か変換でしておりましたが、AddColumnでないとダメなんですね。
ありがとうございます
(びき) 2023/07/17(月) 13:22:04

 後日、ログを読んだ人に変な誤解をされるといやなので一応書いておきます。

 例からの列も万能では無いようなのですが、

 >AddColumnでないとダメなんですね。
 「AddColumnでないとダメ」というのは誤解を招きます

 2023/07/17(月) 07:45:22の最初のサンプルはTable.TransformColumnTypesです

 これを操作でするなら、(2010だとちょっと違うかもしれませんが)
 列を選んで右クリックして型の変更で期間を選ぶ か
 リボンの変換タブの任意の列グループで、データ型を期間を選択です
(´・ω・`) 2023/07/17(月) 14:32:03

エクセル2010ですが、
列を選んで右クリックして型の変更で期間←これがエラーとなり、
例から列で…の終わりとかいろいろあるけれど「期間」が見当たらず、
カスタム列でいただいた式を貼りました。

(びき) 2023/07/17(月) 14:58:45


 確認しました
 >列を選んで右クリックして型の変更で期間←これがエラーとなり
 CSVから読み込んでいるなら、2番目か3番目のステップに「変更された型」があると思いますが、
 このステップを選んで型の変更をして、「現在のものを置換」を選びます
 時刻型になっている列に対して、期間型への型の変換を「新規手順の追加」するとエラーになります
(´・ω・`) 2023/07/18(火) 10:02:55

有難うございます。

2019で同じ操作をしたらエラーにならず、スムーズでした。

少し前になりますが2010で、「クエリが最新ではありません。新しいのをインストールしてください」のようなメッセージが出ていたのを思い出しました。

(びき) 2023/07/18(火) 21:52:54


コメント返信:

[ 一覧(最新更新順) ]


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