在 Power Query 中拆分列而不转换为文本?
Split Column Without Converting to Text in Power Query?
Initial table
有没有办法在不将我的数据类型转换为文本的情况下将我的单元格拆分为多行?使用 Power Query 功能区中的“拆分列”到行功能将整个列转换为文本,我丢失了我想要的数据类型值。我已尝试将列转换回 'any' 类型,但每个单元格仍保留为文本。
After splitting
即使您在查询中显示了不同的类型,当加载查询时,它将全部加载为文本(Excel 和 Power BI)。
您的 table 格式看起来像是未旋转的强类型列。如果您将数据旋转回具有单一类型的适当列,这将变得简单。
在下面的查询中,前三个步骤将您的样本 table 返回到正确的列中,每列一个类型。
然后我只是按分隔符拆分成行,然后设置类型。
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjKuMa4xNFDSUfLJLC5RitWJVjI2AfL8SnMNwTywHJBnBOYl5ZSmAvnO+Tn5RVBpfWN9Q0tLC6CoS2JJqlJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t, Column = _t]),
#"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[Column]), "Column", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Num1", Int64.Type}, {"Num2", type number}, {"Date", type date}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"List", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "List"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"List", Int64.Type}})
in
#"Changed Type1"
如果你需要按列拆分数据,它看起来像这样:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjKuMa4xNFDSUfLJLC5RitWJVjI2AfL8SnMNwTywHJBnBOYl5ZSmAvnO+Tn5RVBpfWN9Q0tLC6CoS2JJqlJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t, Column = _t]),
#"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[Column]), "Column", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Num1", Int64.Type}, {"Num2", type number}, {"Date", type date}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "List", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"List.1", "List.2", "List.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"List.1", Int64.Type}, {"List.2", Int64.Type}, {"List.3", Int64.Type}})
in
#"Changed Type1"
这里的挑战是您必须为拆分选择最大列数。如果知道就很容易,否则您可能需要计算“|”的最大数量列中的字符。
Initial table
有没有办法在不将我的数据类型转换为文本的情况下将我的单元格拆分为多行?使用 Power Query 功能区中的“拆分列”到行功能将整个列转换为文本,我丢失了我想要的数据类型值。我已尝试将列转换回 'any' 类型,但每个单元格仍保留为文本。
After splitting
即使您在查询中显示了不同的类型,当加载查询时,它将全部加载为文本(Excel 和 Power BI)。
您的 table 格式看起来像是未旋转的强类型列。如果您将数据旋转回具有单一类型的适当列,这将变得简单。
在下面的查询中,前三个步骤将您的样本 table 返回到正确的列中,每列一个类型。
然后我只是按分隔符拆分成行,然后设置类型。
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjKuMa4xNFDSUfLJLC5RitWJVjI2AfL8SnMNwTywHJBnBOYl5ZSmAvnO+Tn5RVBpfWN9Q0tLC6CoS2JJqlJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t, Column = _t]),
#"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[Column]), "Column", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Num1", Int64.Type}, {"Num2", type number}, {"Date", type date}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"List", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "List"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"List", Int64.Type}})
in
#"Changed Type1"
如果你需要按列拆分数据,它看起来像这样:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjKuMa4xNFDSUfLJLC5RitWJVjI2AfL8SnMNwTywHJBnBOYl5ZSmAvnO+Tn5RVBpfWN9Q0tLC6CoS2JJqlJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Value = _t, Column = _t]),
#"Pivoted Column" = Table.Pivot(Source, List.Distinct(Source[Column]), "Column", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Pivoted Column",{{"Num1", Int64.Type}, {"Num2", type number}, {"Date", type date}}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "List", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), {"List.1", "List.2", "List.3"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"List.1", Int64.Type}, {"List.2", Int64.Type}, {"List.3", Int64.Type}})
in
#"Changed Type1"
这里的挑战是您必须为拆分选择最大列数。如果知道就很容易,否则您可能需要计算“|”的最大数量列中的字符。