No podemos aplicar el acceso de campo al tipo Lista.

Un usuario Pregunto ✅

[****]
[****]

Shamatix

Hola, compañeros usuarios de Power Bi:

Ahora hemos avanzado un poco más y ahora nos encontramos con un nuevo error:
«No podemos aplicar acceso de campo al tipo Lista».

A continuación se muestra nuestro código M

let
    // Få authorization token
    Kilde = Web.Contents("https://api.bilagscan.dk/oauth2/token",
[Headers=[#"Content-Type"="application/x-www-form-urlencoded"],
Content=Text.ToBinary(Uri.BuildQueryString([grant_type="password", client_id="XXXXXXXXXXXXXXXXXXXXXXXXXX", client_secret="XXXXXXXXXXXXXXXXXXXXXXXXXX", email="XXXXX@YYYYYYYYYY.com", password="XXXXXXXXXXXXX"]))]),
    KildeTekst = Text.FromBinary(Kilde),
    KildeSegmenter = Splitter.SplitTextByDelimiter("&")(KildeTekst),
    KildeKvps = List.Transform(    KildeSegmenter, 
                                       (value) => { 
                                          List.First((Splitter.SplitTextByDelimiter("=")(value))),
                                          List.Last((Splitter.SplitTextByDelimiter("=")(value)))
                                        }
                                  ),
    KildeKvpTabel = Table.FromList(KildeSegmenter, Splitter.SplitTextByDelimiter("=")),
    #"Filtrerede rækker" = Table.SelectColumns(Table.SelectRows(KildeKvpTabel, each [Column1] = "access_token"), {"Column2"}),
    Token = Text.From(List.First(Table.SelectColumns(Table.SelectRows(KildeKvpTabel, each [Column1] = "access_token"), {"Column2"})[Column2])),

    EntitiesPerPage = 100,
    BaseUrl = "https://api.XXXXXXXXXXX.dk/v1/organizations/XXXX/vouchers",
    Options = [Headers=[ #"Authorization" = "Bearer " & Token ]],


        GetJsonCount = (Url) =>
        let 
            result = Web.Contents(Url, Options),
            #"Temp" = Json.Document(result,1252),
            JsonCount = Record.Field(#"Temp"[meta],"count")
        in  JsonCount,

 

        
        GetJsonList = (Url) =>
        let 
            resultList = Web.Contents(Url, Options),
            #"TempList" = Json.Document(resultList,1252),
            JsonList = #"TempList"[data]
        in  JsonList,
        
        GetEntityCount = () =>
        let
            Url   = BaseUrl & "?count=11",
            Json = GetJsonCount(Url),
            Count = Json
        in  Count,

 

        
        GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url),
            Value = Json[#"value"]
        in  Value,

 

    EntityCount = List.Max({ EntitiesPerPage, GetEntityCount() }),
    PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),

 

    PageIndices = { 0 .. PageCount - 1 },
    
   Pages       = List.Transform(PageIndices, each GetPage(_)),
    Entities    = List.Union(Pages),
    Table    = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
    Table

Realmente espero que alguien pueda ayudarnos 🙂

Atentamente

[****]

En respuesta a Shamatix

En este caso, parece que está intentando extraer una lista cuando ya tiene una. En ese caso, intente eliminar el paso final en esa función:

 GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url)
        in  Json,

si eso no funciona debido a que el archivo tiene ambos formularios, intente:

 GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url),
            Value = if Json is record then Json[#"value"] else else Json
        in  Value,

[****]

No sé cómo es su conjunto de datos, por lo que el error se encuentra en muchos lugares.

En el mensaje de error debería ver:

Valor =[List]

Clave = ****

el **** es un indicador de dónde está el error. En algún lugar de tu fuente debería estar [****], si no está allí y la clave es «contar», entonces está en la línea con

Record.Field(#"Temp"[meta],"count")

El mensaje de error básicamente significa:

Intentó obtener la columna de una tabla / fila, pero en su lugar nos dio una columna / colección.

[****]

Shamatix

En respuesta a artemus

Hola Artemus,

El error es:

No podemos aplicar el acceso de campo al tipo Lista.
Detalles:
Valor =[List]

Clave = valor
PBIDesktop_Z8xyKR6nF5.png

Entonces supongo que está en esta parte:

 GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url),
            Value = Json[#"value"]
        in  Value,

¿El error debe mentir?

¿Cómo puedo solucionarlo: S?

[****]

En respuesta a Shamatix

En este caso, parece que está intentando extraer una lista cuando ya tiene una. En ese caso, intente eliminar el paso final en esa función:

 GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url)
        in  Json,

si eso no funciona debido a que el archivo tiene ambos formularios, intente:

 GetPage = (Index) =>
        let     
            Skip  = "offset=" & Text.From(Index * EntitiesPerPage),
            Top   = "?count=" & Text.From(EntitiesPerPage),
            Url   = BaseUrl & Top & "&" & Skip,
            Json  = GetJsonList(Url),
            Value = if Json is record then Json[#"value"] else else Json
        in  Value,

[****]

Shamatix

En respuesta a artemus

Hola Artemus,

¡Muchas gracias por la solución!

Sin embargo, ahora tengo otro problema importante: S

¿Por casualidad tienes skype y puedo intentar descibe mi problema allí?

Estoy recibiendo esto:

There were too many elements in the enumeration to complete the operation.

Atentamente

Deja un comentario

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