Eliminar caracteres convertir texto en números

Un usuario Pregunto ✅

abujouz86

Tengo una columna de datos que incluye, por ejemplo, «1 persona» o «10/1». Quiero eliminar los caracteres dejando sólo el número y si hay un / quiero añadir el número a la izquierda al número a la derecha (por ejemplo, 10/1 a 11).

En Excel escribiría la fórmula de esta manera:

• IF (ProdRouteTrans[CATEGORYID]»», «»,
VALUE (TRIM (IF (ISERROR (FIND («https://community.powerbi.com/», ProdRouteTrans[CATEGORYID])),
IZQUIERDA (ProdRouteTrans[CATEGORYID], 2),
IZQUIERDA (ProdRouteTrans[CATEGORYID],
BUSCAR («https://community.powerbi.com/», ProdRouteTrans[CATEGORYID]) -1))))
+ SI (ProdRouteTrans[CATEGORYID]- «,» «,
VALUE (TRIM (IF (ISERROR (FIND («https://community.powerbi.com/», ProdRouteTrans[CATEGORYID])), 0, MID (ProdRouteTrans[CATEGORYID],
BUSCAR («https://community.powerbi.com/», ProdRouteTrans[CATEGORYID]) +1,2)))))))
Pero cuando escribo el dax en pbi recibo un mensaje de error «Expresiones que producen tipo de datos de variante no se puede utilizar para definir columnas calculadas.» ¿Puede alguien ayudarme a arreglar esta fórmula? ¡Gracias!

AntrikshSharma

En respuesta a abujouz86

@ abujouz86 En ese caso puedes probar esto:

Column =
VAR CurrentCategory = Abu[Category]
VAR AllAlphabets =
    SELECTCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 65, 90, 1 ),
            "Alphabets", LOWER ( UNICHAR ( [Value] ) )
        ),
        "Alphabets", [Alphabets]
    )
VAR RemovePeople =
    IF (
        CONTAINSSTRING ( CurrentCategory, "people" ),
        SUBSTITUTE ( CurrentCategory, " people", "" ),
        IF (
            CONTAINSSTRING ( CurrentCategory, "person" ),
            SUBSTITUTE ( CurrentCategory, " person", "" )
        )
    )
VAR SlashPostion =
    SEARCH ( "https://community.powerbi.com/", RemovePeople, 1, 0 )
VAR Result =
    IF (
        SlashPostion > 0,
        VAR LeftValue =
            MID ( RemovePeople, 1, SlashPostion - 1 )
        VAR RightValue =
            MID ( RemovePeople, SlashPostion + 1, LEN ( RemovePeople ) - SlashPostion )
        VAR Result =
            INT ( LeftValue ) + INT ( RightValue )
        RETURN
            Result,
        INT ( RemovePeople )
    )
RETURN
    Result

AntrikshSharma

@ abujouz86 Prueba esto:

1.PNG

Column =
VAR CurrentCategory = Abu[Category]
VAR AllAlphabets =
    SELECTCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 65, 90, 1 ),
            "Alphabets", LOWER ( UNICHAR ( [Value] ) )
        ),
        "Alphabets", [Alphabets]
    )
VAR RemovePeople =
    SUBSTITUTE ( CurrentCategory, " people", "" )
VAR FilterValues =
    FILTER (
        ADDCOLUMNS (
            GENERATESERIES ( 1, LEN ( RemovePeople ), 1 ),
            "v", MID ( RemovePeople, [Value], 1 )
        ),
        [v] <> "https://community.powerbi.com/"
            && NOT [v] IN AllAlphabets
    )
VAR Result =
    SUMX ( FilterValues, INT ( [v] ) )
RETURN
    Result

abujouz86

En respuesta a AntrikshSharma

Gracias – He reemplazado «Abu[categoría]». Sin embargo, recibo el mensaje de error» No se puede convertir el valor » de tipo Texto al tipo Número. «

AntrikshSharma

En respuesta a abujouz86

@ abujouz86 Por favor, ignora la publicación anterior, no tenía cuentas 15/1 correctamente. Estoy adjuntando el archivo debajo de mi firma, probando que:

Column =
VAR CurrentCategory = Abu[Category]
VAR AllAlphabets =
    SELECTCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 65, 90, 1 ),
            "Alphabets", LOWER ( UNICHAR ( [Value] ) )
        ),
        "Alphabets", [Alphabets]
    )
VAR RemovePeople =
    SUBSTITUTE ( CurrentCategory, " people", "" )
VAR SlashPostion =
    SEARCH ( "https://community.powerbi.com/", RemovePeople, 1, 0 )
VAR Result =
    IF (
        SlashPostion > 0,
        VAR LeftValue =
            MID ( RemovePeople, 1, SlashPostion - 1 )
        VAR RightValue =
            MID ( RemovePeople, SlashPostion + 1, LEN ( RemovePeople ) - SlashPostion )
        VAR Result =
            INT ( LeftValue ) + INT ( RightValue )
        RETURN
            Result,
        INT ( RemovePeople )
    )
RETURN
    Result

1.PNG

abujouz86

En respuesta a AntrikshSharma

Esto es excelente, gracias! No se está ejecutando en mi tabla porque hay un término adicional «persona» que no estaba en los datos de ejemplo anteriores, lo he puesto a continuación y estas son todas las combinaciones posibles en la columna. Siento no haberlo incluí antes – Agradezco su ayuda en esto, gracias.

Idcategoría
2 personas
8/1 personas
5/1 personas
4/1 personas
3 personas
4 personas
9/1 personas
6/1 personas
7/1 personas
15/1 personas
1 persona
11/1 personas
13/1 personas
3/1 personas
10/1 personas

AntrikshSharma

En respuesta a abujouz86

@ abujouz86 En ese caso puedes probar esto:

Column =
VAR CurrentCategory = Abu[Category]
VAR AllAlphabets =
    SELECTCOLUMNS (
        ADDCOLUMNS (
            GENERATESERIES ( 65, 90, 1 ),
            "Alphabets", LOWER ( UNICHAR ( [Value] ) )
        ),
        "Alphabets", [Alphabets]
    )
VAR RemovePeople =
    IF (
        CONTAINSSTRING ( CurrentCategory, "people" ),
        SUBSTITUTE ( CurrentCategory, " people", "" ),
        IF (
            CONTAINSSTRING ( CurrentCategory, "person" ),
            SUBSTITUTE ( CurrentCategory, " person", "" )
        )
    )
VAR SlashPostion =
    SEARCH ( "https://community.powerbi.com/", RemovePeople, 1, 0 )
VAR Result =
    IF (
        SlashPostion > 0,
        VAR LeftValue =
            MID ( RemovePeople, 1, SlashPostion - 1 )
        VAR RightValue =
            MID ( RemovePeople, SlashPostion + 1, LEN ( RemovePeople ) - SlashPostion )
        VAR Result =
            INT ( LeftValue ) + INT ( RightValue )
        RETURN
            Result,
        INT ( RemovePeople )
    )
RETURN
    Result

abujouz86

En respuesta a AntrikshSharma

Increíble, gracias gracias gracias !!!

AntrikshSharma

@ abujouz86 Prueba esto:

1.PNG

Column =
VAR CurrentCategory = Abu[Category]
VAR AllNumbers =
    GENERATESERIES ( 0, 9, 1 )
VAR RemovePeople =
    SUBSTITUTE ( CurrentCategory, " people", "" )
VAR CheckForSlash =
    SEARCH ( "https://community.powerbi.com/", RemovePeople, 1, 0 )
VAR FilterValues =
    FILTER (
        ADDCOLUMNS (
            GENERATESERIES ( 1, LEN ( RemovePeople ), 1 ),
            "v", MID ( RemovePeople, [Value], 1 )
        ),
        [v] <> "https://community.powerbi.com/"
            && INT ( [v] ) IN AllNumbers
    )
VAR Result =
    SUMX ( FilterValues, INT ( [v] ) )
RETURN
    Result

AntrikshSharma

@ abujouz86 ¿Puede proporcionar algunos datos de ejemplo?

abujouz86

En respuesta a AntrikshSharma

Idcategoría
2 personas
2 personas
8/1 personas
8/1 personas
8/1 personas
8/1 personas
2 personas
5/1 personas
5/1 personas
4/1 personas
3 personas
4 personas
4 personas
4 personas
9/1 personas
5/1 personas
8/1 personas
6/1 personas
8/1 personas
8/1 personas
5/1 personas
7/1 personas
8/1 personas
8/1 personas
15/1 personas

@ abujouz86

Le sugiero que realice este tipo de transformaciones en Power Query, si es posible.

abujouz86

En respuesta a Syndicate_Admin

¿Cómo hacerlo en la consulta de energía?

PaulDBrown

En respuesta a abujouz86

@ abujouz86

@AntrikshSharma ha privado una opción mediante DAX. Si quieres hacerlo en Power Query …

Resultado final.JPG

El código de este ejemplo es:

let
    Source = Excel.Workbook(File.Contents("C:UsersPaulOneDriveShared webComm PBIsTransform Category ID PQCategory ID.xlsx"), null, true),
    CATEGORYID_Table = Source{[Item="CATEGORYID",Kind="Table"]}[Data],
    #"Duplicated Column1" = Table.DuplicateColumn(CATEGORYID_Table, "CATEGROYID", "CATEGROYID - Copy"),
    #"Renamed Columns2" = Table.RenameColumns(#"Duplicated Column1",{{"CATEGROYID", "Original"}}),
    #"Replaced Value" = Table.ReplaceValue(#"Renamed Columns2","people","",Replacer.ReplaceText,{"CATEGROYID - Copy"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value", "CATEGROYID - Copy", Splitter.SplitTextByDelimiter("https://community.powerbi.com/", QuoteStyle.Csv), {"CATEGROYID - Copy.1", "CATEGROYID - Copy.2"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"CATEGROYID - Copy.1", Int64.Type}, {"CATEGROYID - Copy.2", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Sum", each [#"CATEGROYID - Copy.1"] + [#"CATEGROYID - Copy.2"]),
    #"Added Conditional Column" = Table.AddColumn(#"Added Custom", "Final result", each if [#"CATEGROYID - Copy.2"] = null then [#"CATEGROYID - Copy.1"] else [Sum]),
    #"Removed Columns" = Table.RemoveColumns(#"Added Conditional Column",{"CATEGROYID - Copy.1", "CATEGROYID - Copy.2", "Sum"})
in
    #"Removed Columns"

Y he incluido el archivo de muestra

PaulDBrown

En respuesta a abujouz86

@ abujouz86

¿Puede proporcionar un conjunto de datos de ejemplo?

Deja un comentario

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