Leoaq
Hola, tengo el siguiente problema, necesito determinar si 2 filas tienen las letras A aquí están mis datos de muestra
Clave de Plaza | ACT / INAC |
88609181 | A |
88609421 | I |
88609311 | I |
88609171 | A |
88609411 | A |
88609391 | I |
88609371 | A |
88609161 | A |
88609321 | A |
83466821 | A |
MP86749201 | A |
MP86749221 | I |
86452321 | A |
MP86452321 | A |
5313330036 | I |
MP86416591 | A |
86749201 | A |
86749221 | A |
5313330033 | I |
86416591 | A |
86412601 | A |
MP86412601 | A |
86404211 | A |
MP86404211 | A |
Necesito hacer esto en Power query, el problema es que la columna [Clave de Plaza] es una identificación para un lugar de trabajo, pero cada lugar de trabajo tiene un espejo que comienza con las letras «MP», por lo que necesito analizar si las filas ID y «MP» + ID tienen ambas A y luego devuélveme un error porque las combinaciones correctas pueden ser I / Yo o a / yo o yo / a
jborro
En respuesta a Leoaq
¿Te refieres a algo como esto?
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZdA7DsNACATQu2ztAhgWs2XKFJHcW77/NfyRZaNJ+8QMiHVtmSFDU9vUPm2bbnA74fsClEBnjigBBndwRIMjVgAekQV+S8bsw+Sf6rXh3UAxog4FIIJ4YteURh/lAN5WdlEP6npucbWgm4kOkOPjNFNo2wE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Clave de Plaza" = _t, #"ACT / INAC" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Clave de Plaza", type text}, {"ACT / INAC", type text}}),
#"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "Clave de Plaza", "Temp"),
#"Replaced Value" = Table.ReplaceValue(#"Duplicated Column","MP","",Replacer.ReplaceText,{"Temp"}),
#"Grouped Rows" = Table.Group(#"Replaced Value", {"Temp"}, {{"Count", each Table.RowCount(_), type number}, {"Pass", each List.ContainsAll(_[#"ACT / INAC"], {"I"}), type logical}}),
#"Filtered Rows1" = Table.SelectRows(#"Grouped Rows", each ([Count] = 2)),
#"Merged Queries" = Table.NestedJoin(#"Replaced Value", {"Temp"}, #"Filtered Rows1", {"Temp"}, "Filtered Rows1", JoinKind.LeftOuter),
#"Expanded Filtered Rows1" = Table.ExpandTableColumn(#"Merged Queries", "Filtered Rows1", {"Pass"}, {"Pass"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Filtered Rows1",{"Temp"})
in
#"Removed Columns"
Atentamente,
JB
mcybulski
La consulta adjunta es otra solución.
let
Source = Table,
AddMP = Table.AddColumn(Source, "MP", each if Text.Start([Clave de Plaza],2) = "MP" then "MP" else ""),
#"Replaced Value" = Table.ReplaceValue(AddMP,"MP","",Replacer.ReplaceText,{"Clave de Plaza"}),
#"Pivoted Column" = Table.Pivot(#"Replaced Value", List.Distinct(#"Replaced Value"[MP]), "MP", "ACT / INAC", List.Min),
#"Added Custom" = Table.AddColumn(#"Pivoted Column", "Error", each if [#""] = "A" and [MP] = "A" then "AA Error" else null)
in
#"Added Custom"
Leoaq
En respuesta a mcybulski
Casi funcionó, el problema es que este código estaba sacando los «MP» de mi columna original [Clave de Plaza] y no puedo hacer eso
jborro
Hola @Leoaq
hay algunas consideraciones que pueden afectar la solución:
1. ¿Se garantiza que hay un par ID y MP + ID? ¿O ID puede ser sin MP + ID y viceversa?
2. ¿Se garantiza que solo hay una identificación única y una identificación MP + única en toda la tabla?
3. Si no se garantiza el n. ° 1, ¿cómo desea tratar el error de ID único o MP + ID? o ignorar
4. Si hay más de un ID único o MP + ID, ¿cómo se trata? ¿Todos deben ser de tipo opuesto? P.ej. tres ID (A / A / A) y MP + ID (I / I / I)? o si al menos un par opuesto estamos bien (por ejemplo, ID (A / A / A) y MP + ID (A / I / A)?
Gracias,
JB
Leoaq
En respuesta a jborro
puede haber ID sin MP + ID, pero esos ID se ignoran, lo que solo necesito analizar son los pares ID y MP + ID, gracias
jborro
En respuesta a jborro
@Leoaq
este código cubre el escenario más simplista:
1. Solo hay un ID único o MP + ID en la tabla.
2. Se ignoran ID y MP + ID sin un par correspondiente.
Pass = TRUE significa que tenemos un par de tipo A / I o I / A o I / I. FALSO significa que este es un par tipo A / A.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZdA7DsNACATQu2ztAhgWs2XKFJHcW77/NfyRZaNJ+8QMiHVtmSFDU9vUPm2bbnA74fsClEBnjigBBndwRIMjVgAekQV+S8bsw+Sf6rXh3UAxog4FIIJ4YteURh/lAN5WdlEP6npucbWgm4kOkOPjNFNo2wE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Clave de Plaza" = _t, #"ACT / INAC" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Clave de Plaza", type text}, {"ACT / INAC", type text}}),
#"Replaced Value" = Table.ReplaceValue(#"Changed Type","MP","",Replacer.ReplaceText,{"Clave de Plaza"}),
#"Grouped Rows" = Table.Group(#"Replaced Value", {"Clave de Plaza"}, {{"Count", each Table.RowCount(_), type number}, {"Pass", each List.ContainsAll(_[#"ACT / INAC"], {"I"}), type logical}}),
#"Filtered Rows1" = Table.SelectRows(#"Grouped Rows", each ([Count] = 2))
in
#"Filtered Rows1"
Atentamente,
JB
Leoaq
En respuesta a jborro
¿Se puede insertar esto en una columna personalizada?
jborro
En respuesta a Leoaq
¿Te refieres a algo como esto?
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZdA7DsNACATQu2ztAhgWs2XKFJHcW77/NfyRZaNJ+8QMiHVtmSFDU9vUPm2bbnA74fsClEBnjigBBndwRIMjVgAekQV+S8bsw+Sf6rXh3UAxog4FIIJ4YteURh/lAN5WdlEP6npucbWgm4kOkOPjNFNo2wE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [#"Clave de Plaza" = _t, #"ACT / INAC" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Clave de Plaza", type text}, {"ACT / INAC", type text}}),
#"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "Clave de Plaza", "Temp"),
#"Replaced Value" = Table.ReplaceValue(#"Duplicated Column","MP","",Replacer.ReplaceText,{"Temp"}),
#"Grouped Rows" = Table.Group(#"Replaced Value", {"Temp"}, {{"Count", each Table.RowCount(_), type number}, {"Pass", each List.ContainsAll(_[#"ACT / INAC"], {"I"}), type logical}}),
#"Filtered Rows1" = Table.SelectRows(#"Grouped Rows", each ([Count] = 2)),
#"Merged Queries" = Table.NestedJoin(#"Replaced Value", {"Temp"}, #"Filtered Rows1", {"Temp"}, "Filtered Rows1", JoinKind.LeftOuter),
#"Expanded Filtered Rows1" = Table.ExpandTableColumn(#"Merged Queries", "Filtered Rows1", {"Pass"}, {"Pass"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Filtered Rows1",{"Temp"})
in
#"Removed Columns"
Atentamente,
JB
Leoaq
En respuesta a jborro
¡Gracias! esto hace el trabajo