Hola a todos,
Estoy tratando de transponer mis datos sin procesar y obtenerlos en un formato específico. Necesito transponer los datos sin procesar para que el SKU del sitio web esté al principio de la fila, seguido de la suma de la cantidad del componente. Luego, cualquiera que sea el número en el campo Cantidad de componentes, enumere el UPC y las dimensiones muchas veces hasta que se contabilicen todas.
¡Gracias de antemano!
DATOS BRUTOS | ||||||||||||||||||||||||||
SKU del sitio web | Cantidad de componentes | Peso del componente (lbs) | Altura del componente (in) | Longitud del componente (in) | Ancho del componente (entrada) | UPC | Recuento de cajas | |||||||||||||||||||
AB-CD-DD-1234 | 2 | 4 | 4 | 8 | 9 | 00810099382297 | 4 | |||||||||||||||||||
AB-CD-DD-1234 | 1 | 36 | 13 | 32 | 22 | 00810099382181 | 4 | |||||||||||||||||||
AB-CD-DD-1234 | 1 | 1 | 0 | 9 | 6 | 00810099382600 | 4 | |||||||||||||||||||
ZXY-FHR-6424 | 2 | 1 | 3 | 10 | 3 | 00810099381108 | 5 | |||||||||||||||||||
ZXY-FHR-6424 | 1 | 1 | 0 | 9 | 6 | 00810099380026 | 5 | |||||||||||||||||||
ZXY-FHR-6424 | 1 | 19 | 9 | 30 | 23 | 00810047869283 | 5 | |||||||||||||||||||
ZXY-FHR-6424 | 1 | 61 | 18 | 31 | 31 | 00810047869320 | 5 | |||||||||||||||||||
FORMATO NECESARIO | ||||||||||||||||||||||||||
vendor_sku | number_of_boxes | box_1_upc | shipping_weight1 | package_height1 | package_length1 | package_width1 | box_2_upc | shipping_weight1 | package_height1 | package_length1 | package_width1 | box_3_upc | shipping_weight1 | package_height1 | package_length1 | package_width1 | box_4_upc | shipping_weight1 | package_height1 | package_length1 | package_width1 | box_5_upc | shipping_weight1 | package_height1 | package_length1 | package_width1 |
AB-CD-DD-1234 | 4 | 00810099382297 | 4 | 4 | 8 | 9 | 00810099382297 | 4 | 4 | 8 | 9 | 00810099382181 | 36 | 13 | 32 | 22 | 00810099382600 | 1 | 0 | 9 | 6 | |||||
ZXY-FHR-6424 | 5 | 00810099381108 | 1 | 3 | 10 | 3 | 00810099381108 | 1 | 3 | 10 | 3 | 00810099380026 | 1 | 0 | 9 | 6 | 00810047869283 | 19 | 9 | 30 | 23 | 00810047869320 | 61 | 18 | 31 | 31 |
Puede abrir el 'Editor avanzado' para acceder al código.
El código que proporcioné contiene el origen de datos que introduje manualmente. Tendrás que poner tu fuente en lugar de eso. Siempre que su fuente tenga los mismos nombres de columna que el ejemplo que proporcionó, puede cambiar la línea de origen. Si su tabla real tiene nombres de columna diferentes, deberá cambiar el código para reflejar los nombres reales.
@jgeddes ¡Gracias! Pregunta tonta. ¿Dónde puedo introducir este código cuando estoy en la consulta de energía?
Esto se puede hacer en Power Query con el siguiente código.
Aquí tienes...
let
Source =
Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("fY9BDsIwDAT/0nMjre3gOkcgQpw5AVX//w3ikFIqUA6TrBSN15nn4XgK5xxyDsQSh3HgQmxYIRUAIyAlMeY01cdl/FWpIOpBPPkk5r1ORl3dQWvVvarAR33eH+FyvQWNvO5cy/1GC5tKBP/J4Z/aLwVYu2ZqmrjPW22cTBOb9GStE3wzofX4soXxtpcX", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Website Sku" = _t, #"Component Qty" = _t, #"Component Weight (Lbs)" = _t, #"Component Height (in)" = _t, #"Component Length (in)" = _t, #"Component Width (in)" = _t, UPC = _t, #"Box Count " = _t]),
#"Changed Type" =
Table.TransformColumnTypes(
Source,
{{"Website Sku", type text}, {"Component Qty", Int64.Type}, {"Component Weight (Lbs)", Int64.Type}, {"Component Height (in)", Int64.Type}, {"Component Length (in)", Int64.Type}, {"Component Width (in)", Int64.Type}, {"UPC", type text}, {"Box Count ", Int64.Type}}),
addAdditionalRowColumn =
Table.AddColumn(
#"Changed Type",
"addRowColumn",
each if [Component Qty] > 1
then "1" & Text.Repeat("-1", [Component Qty] - 1)
else [Component Qty]
),
addRows =
Table.ExpandListColumn(
Table.TransformColumns(
Table.TransformColumnTypes(
addAdditionalRowColumn,
{{"addRowColumn", type text}}, "en-US"
),
{{"addRowColumn", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}
),
"addRowColumn"
),
#"Changed Type1" =
Table.TransformColumnTypes(
addRows,
{{"addRowColumn", Int64.Type}}
),
#"Removed Columns" =
Table.RemoveColumns(
#"Changed Type1",
{"Component Qty"}
),
#"Reordered Columns" =
Table.ReorderColumns(
#"Removed Columns",
{"Website Sku", "Box Count ", "UPC", "Component Weight (Lbs)", "Component Height (in)", "Component Length (in)", "Component Width (in)", "addRowColumn"}
),
#"Unpivoted Other Columns" =
Table.UnpivotOtherColumns(
#"Reordered Columns",
{"Website Sku", "Box Count "},
"Attribute",
"Value"
),
#"Grouped Rows" =
Table.Group(
#"Unpivoted Other Columns",
{"Website Sku", "Box Count "},
{{"groupedSKUs", each _, type table [Website Sku=nullable text, #"Box Count "=nullable number, Attribute=text, Value=number]}}
),
transformTable =
Table.AddColumn(
#"Grouped Rows",
"selectedColumns",
each Table.PromoteHeaders(
Table.Transpose(
Table.SelectRows(
Table.SelectColumns(
[groupedSKUs],
{"Attribute", "Value"}
),
each [Attribute] <> "addRowColumn"
)
)
)
),
#"Removed Columns1" =
Table.RemoveColumns(
transformTable,
{"groupedSKUs"}
),
getListOfColumnNames =
Table.ColumnNames(
Table.Combine(
#"Removed Columns1"[selectedColumns]
)
),
#"Converted to Table" =
Table.FromList(
getListOfColumnNames,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
extractTextAfterDelimiter =
Table.AddColumn(
#"Converted to Table",
"Text After Delimiter",
each Text.AfterDelimiter([Column1], "_"),
type text
),
determineUPCNumber =
Table.AddColumn(
extractTextAfterDelimiter,
"Custom",
each if Number.Mod(Number.From([Text After Delimiter]),5) = 0
then Number.IntegerDivide(Number.From([Text After Delimiter]),5) - 1
else Number.IntegerDivide(Number.From([Text After Delimiter]),5)
),
constructNewName =
Table.AddColumn(
determineUPCNumber,
"newName",
each if [Custom] = null
then Text.BeforeDelimiter([Column1], "_") & "_1"
else Text.BeforeDelimiter([Column1], "_") & "_" & Number.ToText([Custom] + 2)
),
#"Removed Columns2" =
Table.RemoveColumns(
constructNewName,
{"Text After Delimiter", "Custom"}
),
createRenamingList =
List.Zip(
{#"Removed Columns2"[Column1], #"Removed Columns2"[newName]}
),
expandTransformedTable =
Table.ExpandTableColumn(
#"Removed Columns1",
"selectedColumns",
getListOfColumnNames
),
#"Renamed Columns" =
Table.RenameColumns(expandTransformedTable, createRenamingList)
in
#"Renamed Columns"