Hongjyan
Hola tios
Básicamente, el problema que encontré es el mismo que https://community.powerbi.com/t5/Desktop/Get-data-from-Jira-Rest-API/td-p/516130, pero no se puede resolver con su solución O tal vez No entiendo completamente?
Mi código:
let
Source = Json.Document(Web.Contents( #"my company JIRA",
[
RelativePath="/rest/api/2/search",
Query=[
maxResults="1000",
jql=#"JQL EPICS",
fields="key",
startAt="0"
]
])),
total1 = Number.Round(Source[total]/1000 + 0.5-1, 0, RoundingMode.Up),
List = List.Transform({0..total1}, each _ * 1000),
#"Converted to Table" = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type text}}),
#"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "Data", each GetJIRADCPage(#"JQL EPICS", "key", [Column1])),
#"Expanded Data" = Table.ExpandTableColumn(#"Invoked Custom Function", "Data", {"Column1.key"}, {"Column1.key"}),
#"Removed Duplicates" = Table.Distinct(#"Expanded Data", {"Column1.key"}),
parent = Table.RenameColumns(#"Removed Duplicates",{{"Column1.key", "ParentKey"}}),
nbr = List.Count(parent[ParentKey])-1,
total = Number.Round(nbr/#"EPICS COUNT PER PAGE" + 0.5 - 1, 0, RoundingMode.Up), //Using #"EPICS COUNT PER PAGE"(currently 30) in case url too long
List99 = List.Transform({0..total}, each _ * #"EPICS COUNT PER PAGE"),
#"Converted to Table99" = Table.FromList(List99, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Changed Type99" = Table.TransformColumnTypes(#"Converted to Table99",{{"Column1", type number}}),
#"Invoked Custom Function2" = Table.AddColumn(#"Changed Type99", "Data", each GetJIRADCChildren(Text.Combine(List.Range(parent[ParentKey], [Column1], #"EPICS COUNT PER PAGE"), ","), #"FIELDS TASK")),
#"Removed Columns2" = Table.RemoveColumns(#"Invoked Custom Function2",{"Column1"}),
#"Expanded Data99" = Table.ExpandTableColumn(#"Removed Columns2", "Data", {"Column1"}, {"Column1"}),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Expanded Data99", "Column1", {"key", "fields"}, {"key", "fields"}),
#"Renamed Columns2" = Table.RenameColumns(#"Expanded Column1",{{"key", "Issue key"}}),
#"Removed Duplicates99" = Table.Distinct(#"Renamed Columns2", {"Issue key"}),
#"Expanded fields" = Table.ExpandRecordColumn(#"Removed Duplicates99", "fields", {"summary", "customfield_12790", "status"}, {"summary", "customfield_12790", "status"}),
#"Expanded status" = Table.ExpandRecordColumn(#"Expanded fields", "status", {"name"}, {"status"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded status",{{"customfield_12790", "ParentKey"}}),
#"Added Index" = Table.AddIndexColumn(#"Renamed Columns", "Index", 0, 1),
//#"Invoked Custom Function1" = Table.AddColumn(#"Added Index", "worklog", each GetWorklog([Issue key]))
#"Add worklog url" = Table.AddColumn(#"Added Index", "worklog url", each #"my company JIRA"&"/rest/api/latest/issue/"&[Issue key]&"/worklog"),
#"Invoked Custom Function1" = Table.AddColumn(#"Add worklog url", "worklog", each Json.Document(Web.Contents([worklog url])))
in
#"Invoked Custom Function1"
El cuello de botella es # «Función personalizada 1 invocada».
La vista previa de la consulta de energía (máximo 1000 filas) es rápida (alrededor de 3-5 segundos), pero la carga después de hacer clic en Aplicar cambio es muy lenta, casi (1-10) por (1-10) filas por segundo.
¡Ayuda adecuada!
v-kelly-msft
Hola @hongjyan,
En su consulta, esta
#"Add worklog url" = Table.AddColumn(#"Added Index", "worklog url", each #"my company JIRA"&"/rest/api/latest/issue/"&[Issue key]&"/worklog"),
#"Invoked Custom Function1" = Table.AddColumn(#"Add worklog url", "worklog", each Json.Document(Web.Contents([worklog url])))
ha consultado nuevamente por la API en cada fila, lo que significa que si tiene 1000 filas en una página, las 1000 filas se volverán a consultar después de ejecutar todas las consultas anteriores, lo que aumentará los números de llamada de API, por lo que primero puede eliminar la última consulta para verificar si la carga se ha acelerado. Si es el problema, ¿eliminar la consulta será la mejor solución para usted?
Kelly
Hongjyan
En respuesta a v-kelly-msft
hola @ v-kelly-msft
Tuve la misma sensación sobre el cuello de botella en el rendimiento que mencionaste anteriormente, que es la llamada a la API por fila, y el hecho de que los datos se cargarán rápidamente si se elimina la línea # «Invocada función personalizada1» es la misma.
Lo que tengo curiosidad es que hay la misma llamada a la API por fila en https://community.powerbi.com/t5/Desktop/Get-data-from-Jira-Rest-API/td-p/516130, pero parece fijo cambiando de «cada Json.Document (Web.Contents (#» AddIndex «{[Index]}[Custom])) «a» cada Json.Document (Web.Contents ([Custom])) «. Eso me da la esperanza de que tal vez el bajo rendimiento sea causado por alguna regla mencionada en este enlace, que es» evitar cargar la tabla en Power query «?
Si el bajo rendimiento es causado por una llamada a la API por un porcentaje de fila del 100, entonces no sé cómo obtener el registro de trabajo de JIRA rápidamente. hay 3 enfoques potenciales para obtener datos de registro de trabajo que puedo encontrar ahora:
- obtenga el registro de trabajo completo desde la fecha a través de https://jiradc.int.net.mycompany.com/rest/api/latest/worklog/updated?since=sometimestamp
- obtenga el registro de trabajo uno por uno a través de «GET / rest / api / 2 / issue / {issueIdOrKey} / worklog / {id}»
- obtener el registro de trabajo para varios problemas a través de, por ejemplo. https://jiradc.int.net.mycompany.com/rest/api/latest/search?jql=issue%20in%20(ISSUE1, ISSUE2) & campos …
PERO todo lo anterior no me satisface ya que
para 1: no quiero buscar mis datos interesados entre toda la empresa, es demasiado grande.
para 2: hay 4000 problemas en este momento, un problema, una api cal lleva demasiado tiempo.(el problema actual que mencionamos aquí)
para 3: se consideró excelente, pero lamentablemente, el recuento máximo de devolución de registros de trabajo por número es 20, pero, por supuesto, hay muchos problemas cuyo recuento de registros de trabajo se superó.
¡Estoy torturado por esto durante 3 días!
v-kelly-msft
En respuesta a Hongjyan
Hola @hongjyan,
Vaya al editor de consultas, en la parte inferior del perfil de la columna, elija «conjunto de datos completo», como se muestra a continuación:
Luego elimine « # «Función personalizada invocada1» = Table.AddColumn (# «Agregar URL del registro de trabajo», «registro de trabajo», cada Json.Document (Web.Contents ([worklog url])))«y vaya a la columna» https://community.powerbi.com/t5/Desktop/powerbi-load-JIRA-worklog-via-RESTAPI-so-slow/td-p/#»Add worklog url «, verifique la número de filas y filas distintas para ver si están cerca de: (usando la funcionalidad groupby)
Atentamente,
Kelly
Hongjyan
En respuesta a v-kelly-msft
@ v-kelly-msft,
# «Función personalizada invocada1» y «https://community.powerbi.com/t5/Desktop/powerbi-load-JIRA-worklog-via-RESTAPI-so-slow/td-p/#»Add worklog url» tienen la mismo número de filas
(fila distinta), alrededor de 4000 filas. Pero para ser honesto, no sé el punto de verificar el recuento de filas después de que ambos nos damos cuenta de que 4000 filas conducen a 4000 llamadas API que tal vez causen un costo de tiempo. lo que tengo curiosidad es qué tan pobre fue el rendimiento en https://community.powerbi.com/t5/Desktop/Get-data-from-Jira-Rest-API/td-p/516130, ¿me estoy perdiendo algo?
v-kelly-msft
En respuesta a Hongjyan
Hola @hongjyan,
Entonces será mejor que use otro tipo de API que pueda procesar múltiples consultas …
Kelly