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

Compete to become Power BI Data Viz World Champion! First round ends August 18th. Get started.

Reply
Syndicate_Admin
Administrator
Administrator

API de Power Query y columnas personalizadas

Hola a todos

Soy algo nuevo en la codificación de Power Query, y me he topado con una pared de ladrillos que no sé cómo (o si) puedo hacer lo que quiero que haga Power Query. Tengo una consulta de Power que obtiene una lista de proyectos de Kaseya BMS usando su API, que funciona exactamente como quiero. Esta API devuelve el resumen del proyecto para todos los proyectos no archivados. Puse esto en una tabla llamada "ProjectSummary" Parte de los datos devueltos también devuelve el ID de proyecto único, que luego se puede usar en otras llamadas a la API para obtener algunos detalles de nivel inferior del estado de un proyecto (por ejemplo, puede devolver el Administrador de proyecto asignado a un proyecto).

Para asegurarme de que la API funciona para el detalle del proyecto de nivel inferior, creé otra consulta para obtener un estado de proyecto individual pasando manualmente el ID de proyecto en la llamada a la API. Una vez más, esto funciona exactamente como esperaba y devuelve los detalles correctos para ese proyecto en particular (esta tabla se llama "ProjectDetail"). No puedo encontrar cómo hacer esto, así que no estoy seguro de cómo puedo pasar el ID de proyecto de la tabla ProjectSummary a una columna personalizada o algo similar, donde luego ejecutará una llamada a la API para buscar el proyecto solicitado y sus valores para que los datos se encuentren uno al lado del otro. Por ejemplo, si quisiera el Project Manager para todos los proyectos, pasaría el ID de proyecto a la API de Kaseya, obtendría los datos y luego los insertaría en la fila correcta dentro de la columna (¡no estoy seguro de si se requiere un bucle foreach o algo similar para insertar los datos en cada fila!).

¡Cualquier ayuda u orientación sería muy apreciada!

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

Aquí hay un poco más de información que puede ayudar. Así que este es el código que obtiene el resumen del proyecto y almacena los detalles en la tabla ProjectSummary (el nombre de usuario y la contraseña han sido ofuscados 😉)

let
    url = "https://api.bmsemea.kaseya.com/v2/security/authenticate",
    body = "{ ""GrantType"": ""password"", ""username"": ""usernameGoesHere"", ""password"": ""passwordGoesHere"", ""tenant"": ""tenantNameGoesHere""}",
    Parsed_JSON = Json.Document(body),
    BuildQueryString = Uri.BuildQueryString(Parsed_JSON),
    POST = Json.Document(Web.Contents(url,[Headers = [#"Content-Type"="application/x-www-form-urlencoded"], Content = Text.ToBinary(BuildQueryString) ] )),
    result = POST[result],
    accessToken = result[accessToken],


    Source = Json.Document(Web.Contents("https://api.bmsemea.kaseya.com/v2/project/projects/summary", [Headers=[Accept="application/json", Authorization="Bearer "&accessToken ]])),
    #"Converted to Table" = Record.ToTable(Source),
    Value = #"Converted to Table"{2}[Value],
    #"Converted to Table1" = Table.FromList(Value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table1", "Column1", {"id", "name", "projectNumber", "statusId", "statusName", "priorityId", "priorityName", "startDate", "dueDate", "createdOn"}, {"Column1.id", "Column1.name", "Column1.projectNumber", "Column1.statusId", "Column1.statusName", "Column1.priorityId", "Column1.priorityName", "Column1.startDate", "Column1.dueDate", "Column1.createdOn"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Column1", "PM", each ProjectDetail[managerName]{0})
in
    #"Added Custom"

Luego tengo una tabla separada llamada ProjectDetail, donde paso el ProjectID manualmente:

let
    url = "https://api.bmsemea.kaseya.com/v2/security/authenticate",
    body = "{ ""GrantType"": ""password"", ""username"": ""usernameGoesHere"", ""password"": ""passwordGoesHere"", ""tenant"": ""tenantGoesHere""}",
    Parsed_JSON = Json.Document(body),
    BuildQueryString = Uri.BuildQueryString(Parsed_JSON),
    POST = Json.Document(Web.Contents(url,[Headers = [#"Content-Type"="application/x-www-form-urlencoded"], Content = Text.ToBinary(BuildQueryString) ] )),
    result = POST[result],
    accessToken = result[accessToken],


    Source = Json.Document(Web.Contents("https://api.bmsemea.kaseya.com/v2/project/projects/36033", [Headers=[Accept="application/json", Authorization="Bearer "&accessToken ]])),
    result1 = Source[result],
    #"Converted to Table" = Record.ToTable(result1),
    #"Transposed Table" = Table.Transpose(#"Converted to Table"),
    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"id", Int64.Type}, {"projectNumber", type text}, {"name", type text}, {"description", type text}, {"contractId", type any}, {"contractName", type any}, {"managerId", Int64.Type}, {"managerName", type text}, {"statusId", Int64.Type}, {"statusName", type text}, {"priorityId", Int64.Type}, {"priorityName", type text}, {"startDate", type datetime}, {"dueDate", type datetime}, {"completionDate", type any}, {"plannedHours", Int64.Type}, {"usedHours", Int64.Type}, {"plannedBudget", Int64.Type}, {"actualBudget", Int64.Type}})
in
    #"Changed Type"

Lo que me encantaría saber es si puedo pasar column1.ID de la tabla ProjectSummary a una columna personalizada dentro de esa tabla, donde luego busca los detalles de ese proyecto y devuelve el Administrador de proyectos para cada proyecto. Debido a que ProjectDetail solo puede buscar un solo proyecto a la vez, supongo que necesito ejecutar una consulta de API cada vez, pero no estoy seguro de cómo pasar column1.ID a la API y luego insertar los datos específicos del proyecto en la fila de la tabla.

Espero que esto dé un poco más de información sobre lo que estoy tratando de hacer.

Helpful resources

Announcements
August Power BI Update Carousel

Power BI Monthly Update - August 2025

Check out the August 2025 Power BI update to learn about new features.

August 2025 community update carousel

Fabric Community Update - August 2025

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

Top Kudoed Authors