Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
emerson89
Helper I
Helper I

Error AccessForbinddenException para actualizar datos

Hola

Uso una consulta llamando a otra consulta, a través de la API y no puedo actualizar los datos en Power BI.

En Power Query funciona normalmente, pero para ello, para que en Power Query pudiera ejecutar la "consulta desde la consulta" tenía que realizar los siguientes cambios en mi proyecto:

1 - Borre los permisos globales y los permisos locales en la configuración del origen de datos.

2 - Configuración del origen de datos >> Editar permisos: Cambié al nivel de privacidad: ninguno y Credenciales: ninguno

3 - En el menú Opciones >> Privacidad, revisé el elemento: "ignorar siempre la configuración del nivel de privacidad"

Al cambiar los elementos anteriores, en Power Query, mi consulta funciona correctamente. Sin embargo, al intentar aplicar estos cambios al Panel, aparece el siguiente mensaje de error:

erro.png

- Mi consulta enumera alrededor de 30 mil filas, y noté que si limito mi consulta a la mitad de los datos, funciona normalmente sin el error anterior, en el panel del panel, actualizando los datos correctamente.
Mi pregunta es si hay alguna limitación de límite de datos para cargar en el panel? Y si es así, ¿cómo puedo resolver este problema?
Si no es una limitación de las líneas en la carga, ¿qué podría estar sucediendo para que mi panel no se actualice?

Mi consulta:

let
    ufnCallAPI = (numPedido) =>

        let
            result = Json.Document(Web.Contents("https://api.vhsys.com/", [RelativePath="v2/pedidos/" & Number.ToText(numPedido)  & "/produtos", 
             Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="xxxxxxxx"]]))  
        in
            result,

        pageRange = listaPedidos_Aquiles2, /* MY OTHER QUERY */
        pages = List.Transform(pageRange, each ufnCallAPI(_)),
    pages2 = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    pages3 = Table.ExpandRecordColumn(pages2, "Column1", {"code", "status", "data"}, {"code", "status", "data"}),
    pages4 = Table.ExpandListColumn(pages3, "data"),
    pages5 = Table.RemoveColumns(pages4,{"code", "status"}),
    #"data Expandido" = Table.ExpandRecordColumn(pages5, "data", {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}, {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}),
    #"Personalização Adicionada" = Table.AddColumn(#"data Expandido", "Empresa", each "Aquiles")
in
    #"Personalização Adicionada"

¡Muchas gracias!

4 REPLIES 4
camargos88
Community Champion
Community Champion

Hola @emerson89 ,

¿Lo estás paginando? Intente ejecutarlo con 1 o 2 páginas, sólo para comprobar si recibe este error.



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Hola @camargos88 ,


Sí, Mi consulta listaPedidosAquiles es paginate, pero, solo, este trabajo está bien. Lo probé dividiendo la cantidad de página por la mitad, y funcionó bien. Lo probé en 4 páginas también, por ejemplo, y todo funciona normalmente. El problema se produce cuando intento enumerar todos los datos. ¿Alguna idea?

Gracias

@emerson89 ,

Sospecho que el código intenta obtener más páginas que la cantidad disponible.

¿Cómo se define la cantidad de páginas?



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Hola @camargos88 ,

Realmente, su observación tiene sentido, sin embargo, cuando ejecuto la consulta que utilizo para separar los números (solicitudes) que se utilizarán como parámetro para la segunda consulta, funciona perfectamente.

Aquí está mi primera consulta:

let
    ufnCallAPI = (nPage) =>
        let
            result = Json.Document(Web.Contents("https://api.vhsys.com/", [RelativePath="v2/pedidos?offset=" & Number.ToText(nPage) & "&limit=250&status=Atendido", 
            Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="xxxxxxxxx"]]))  
        in
            result,

        tmpResult = ufnCallAPI(1),

        auxTotal1 = Record.ToTable(tmpResult),
        Value = auxTotal1{2}[Value],
        auxTotal2 = Value[total],

        totalItems = auxTotal2,
        pageRange = {0..Number.RoundUp(totalItems / 250)-1},
        aux = List.Transform(pageRange, each ufnCallAPI(_*250)),
        aux2 = Table.FromList(aux, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        aux3 = Table.ExpandRecordColumn(aux2, "Column1", {"code", "status", "paging", "data"}, {"Column1.code", "Column1.status", "Column1.paging", "Column1.data"}),
        aux4 = Table.ExpandListColumn(aux3, "Column1.data"),
        aux5 = Table.RemoveColumns(aux4,{"Column1.code", "Column1.status", "Column1.paging"}),
        aux6 = Table.ExpandRecordColumn(aux5, "Column1.data", {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}, {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}),
        listPedidos = aux6[id_ped]
in
    listPedidos

Este código devuelve una lista para mí, por ejemplo:

Lista

1

2

3

48

56

88

89

100

Los números anteriores son números que paso como parámetro en la consulta siguiente llamando a la consulta 1 (listaPedidos_Aquiles):

let
    ufnCallAPI = (numPedido) =>

        let
            result = Json.Document(Web.Contents("https://api.vhsys.com/", [RelativePath="v2/pedidos/" & Number.ToText(numPedido)  & "/produtos", 
             Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="xxxxxxxx"]]))  
        in
            result,

        pageRange = listaPedidos_Aquiles,
        pages = List.Transform(pageRange, each ufnCallAPI(_)),
    pages2 = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    pages3 = Table.ExpandRecordColumn(pages2, "Column1", {"code", "status", "data"}, {"code", "status", "data"}),
    pages4 = Table.ExpandListColumn(pages3, "data"),
    pages5 = Table.RemoveColumns(pages4,{"code", "status"}),
    #"data Expandido" = Table.ExpandRecordColumn(pages5, "data", {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}, {"id_ped_produto", "id_pedido", "id_produto", "desc_produto", "qtde_produto", "desconto_produto", "ipi_produto", "icms_produto", "valor_unit_produto", "valor_custo_produto", "valor_total_produto", "valor_desconto", "peso_produto", "peso_liq_produto", "info_adicional", "xPed_produto", "nItem_produto"}),
    #"Personalização Adicionada" = Table.AddColumn(#"data Expandido", "Empresa", each "Aquiles")
in
    #"Personalização Adicionada"

Con los códigos de pedido enviados por parámetros, la API me devuelve la lista de productos para esos pedidos.

Cuando pongo a prueba con pocos datos, todo funciona. Si pruefio con todo el contenido (alrededor de 30 mil líneas), el sistema aparentemente comienza a hacer la operación, veo en el mensaje que todo se está generando correctamente, pero al final, obtengo el mensaje de error.

En realidad puede haber más elementos que devolver, que páginas, pero en este caso, no puedo encontrar el error, porque en esta consulta2, no paso el parámetro de paginación como envío solicitud por solicitud (número), diferente de la consulta 1, que devuelvo una cantidad de elementos por página.


Muchas gracias.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.