[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『パワークエリ データ型変更』(ハシビロコウ)
お世話になっております。
<1>のような表をパワークエリで取得すると、デフォルトでは<2>のように日付がシリアル値になります。
データ型を日付に変更しますと、列全体が反映されてしまい<3>のようになってしまいます。
取り込み後も<1>のように行1のみ日付表記にすることは出来るのでしょうか。
単純な内容で恐縮ですが、ご教授お願い致します。
<1>
A B C
1 品物 8月1日 8月2日 8月3日
2 りんご 1
3 みかん 2 1 3
4 いちご 3 1
<2>
A B C
1 品物 44774 44775 44776
2 りんご 1
3 みかん 2 1 3
4 いちご 3 1
<3>
A B C
1 品物 2022/8/1 2022/8/2 2022/8/1
2 りんご 1900/1/1
3 みかん 1900/1/2 1900/1/1 1900/1/3
4 いちご 1900/1/3 1900/1/1
< 使用 Excel:Office365、使用 OS:unknown >
やってみましたが、そうならないんですが・・・・ 先頭行をテーブルの見出しとして使用するをチェックしてますか?
詳細エディタの内容を貼れますか? (´・ω・`) 2022/07/23(土) 11:48
ご返信ありがとうございます。
以下、詳細エディタとなります。
let
ソース = Excel.Workbook(File.Contents("C:\●\●\Book2.xlsx"), null, true), Sheet1_Sheet = ソース{[Item="Sheet1",Kind="Sheet"]}[Data], 変更された型 = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}, {"Column2", Int64.Type}, {"Column3", Int64.Type}, {"Column4", Int64.Type}}) in 変更された型 (ハシビロコウ) 2022/07/23(土) 11:57
最初に試したとき、テーブルからやってました ブックから読み込んでいるんですね。 再現しました
姑息的手段としては、行と列を入れ替えて、日付にして再度行と列を入れ替えて・・・ let ソース = Excel.Workbook(File.Contents("C:\Users\aaaa\Desktop\test.xlsx"), null, true), Sheet1_Sheet = ソース{[Item="Sheet1",Kind="Sheet"]}[Data], 転置されたテーブル = Table.Transpose(Sheet1_Sheet), 昇格されたヘッダー数1 = Table.PromoteHeaders(転置されたテーブル, [PromoteAllScalars=true]), 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数1,{{"品物", type date}}), 降格されたヘッダー数 = Table.DemoteHeaders(変更された型), 転置されたテーブル2 = Table.Transpose(降格されたヘッダー数), 昇格されたヘッダー数2 = Table.PromoteHeaders(転置されたテーブル2, [PromoteAllScalars=true]) in 昇格されたヘッダー数2 とすればたぶんなんとか。 でも、もうちょっとちゃんとしたやり方がありそうな気がします。
識者の回答をお待ち下さい。 私もちょっと調べてみますが、あまり期待しないでください。 (´・ω・`) 2022/07/23(土) 12:18
ご親切にありがとうございます。
やはり一度で変換する方法は厳しいようですね。
私の為にお時間を割いていただき申し訳ありません。
(ハシビロコウ) 2022/07/23(土) 12:51
元データの情報を文字列に変えてしまうことで解消はされます。
※元データを「'8月1日」と入力しておく
※これは、(´・ω・`)さんがテーブルから読み込むと再現しなかったという理由でもあります。
クエリとしては書式情報は取得せずにデータ化する以上、8月1日は44774としか読取ができないはずです。
そのためクエリ内で44774を日付のように見せかける処置が必要になると思います。
また、最終的にヘッダーにした時点で44774という数値データではなくなるため、最初から文字列として扱うというのはどうかと思い提案した次第です。
また、列名を一括変換する手法は以下を参照いただくと可能かと思います。
https://qiita.com/Yellow11/items/d5b7a1610e63c7efe955
ただし、この場合、数値(44774、44775、・・・)と日付表記(8月1日、8月2日、・・・)の表を別で保持する必要が出てくるため、これをするなら(´・ω・`)さん が回答されている手法の方が適切であり、メンテナンス等も簡単にできると思います。
(さいさい) 2022/07/24(日) 02:45
なるほど、1行目から列名を作成できればいいのですよね という方向でかんがえてみます。 (´・ω・`) 2022/07/24(日) 08:54
ということで、こうなりました let ソース = Excel.Workbook(File.Contents("C:\Users\aaaa\Desktop\test.xlsx"), null, true), Sheet1_Sheet = ソース{[Item="Sheet1",Kind="Sheet"]}[Data], 現在のカラム名リスト = Table.ColumnNames(Sheet1_Sheet), 新しいカラム名リスト = List.Transform(Record.ToList(Table.First(Sheet1_Sheet,0)),each try Date.ToText(Date.From(_),"M") otherwise _), 変更したカラム名 = Table.RenameColumns(Table.RemoveRows(Sheet1_Sheet,0), List.Zip({現在のカラム名リスト,新しいカラム名リスト})) in 変更したカラム名 (´・ω・`) 2022/07/24(日) 09:18
ただ今、上記の手法で狙いの形になったことを確認しました。
誠にありがとうございました。
(ハシビロコウ) 2022/07/25(月) 08:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.