Análisis de columna

Un usuario Pregunto ✅

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *