vitalidad
¡Hola a todos y perdón por mi inglés!
Tengo una pregunta que ha estado torturando durante 2 días ya. Tengo una tabla MYTABLE con 2 columnas (URL e Índice) de la forma:
URL | Índice |
jira.test.com/rest/api/2/issue/MYPROJECTKEYNAME-10/worklog | 0 |
jira.test.com/rest/api/2/issue/MYPROJECTKEYNAME-11/worklog | 1 |
etc. | 1999 |
En esta tabla tengo 2000 registros. Mi objetivo es obtener los datos almacenados en estas URL.
Para esto utilizo el siguiente comando:
#"MyNewTable"= Table.AddColumn(#"MYTABLE", "DataFromURLsColumn", each Json.Document(Web.Contents(#"MYTABLE"{[Index]}[URL])))
, pero esta solicitud es muy difícil y lleva mucho tiempo. Entonces debo esperar aproximadamente 20-30 minutos o más.
Mi pregunta es la siguiente:
1. ¿Existe una forma más rápida de almacenar estos datos en la URL?
2. Tal vez haya algunas configuraciones globales o de otro tipo en el ¿Poder BI?
3. ¿Este comando funciona tan lentamente? por la cantidad de consultas a jira rest api, o tal vez porque estoy agregando una nueva columna calculada a la tabla?
Estaré muy agradecido por cualquier ayuda, ¡gracias de antemano!
v-jiascu-msft
En respuesta a vitalidad
Hola @Vitaliy,
He encontrado un problema de rendimiento en su código. Aunque no sé si otras partes como la API de Jira podrían influir en el rendimiento. Podría correr más rápido. Probé con 100 mil filas esta vez. Incluso terminó en segundos. Por favor inténtalo.
let
//other parts are good without cahnges.
... ... #"Source"= Table.AddColumn(#"AddIndex", "Custom1", each Json.Document(Web.Contents([Custom]))), ... ... in #"Filtered Rows1"
¿Por qué? El código antiguo invocaba una tabla que debería evitarse en Power Query.
Atentamente,
Valle
v-jiascu-msft
Hola @Vitaliy,
Probé como tu escenario. Solo tomó varios minutos para 10 mil filas. Puedes consultarlo en el archivo adjunto. Tal vez puedas probar los scripts de Python o R. Si necesita más ayuda, proporcione el código completo de Power Query.
Atentamente,
Valle
vitalidad
En respuesta a v-jiascu-msft
¡Hola!
gracias por el tiempo dedicado y tu respuesta.
hmm… debido a este hecho, no entiendo cuál es el problema ((
quizás, parte de mi código ayudará a aclarar la situación:
tengo consulta:
let S1 = P1_epics_only, #"Added Custom" = Table.AddColumn(#"S1", "first_part_of_url", each "https://jira.mycompany.com/rest/api/2/issue/"), #"Added Custom1" = Table.AddColumn(#"Added Custom", "third_part_of_url", each "/worklog"), #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Custom", each [first_part_of_url]&[key_main]&[third_part_of_url]), #"Filtered Rows" = Table.SelectRows(#"Added Custom2", each true), #"AddIndex" = Table.AddIndexColumn(#"Filtered Rows", "Index", 0, 1), #"Source"= Table.AddColumn(#"AddIndex", "Custom1", each Json.Document(Web.Contents(#"AddIndex"{[Index]}[Custom]))), #"ExpandWorklogs"= Table.ExpandRecordColumn(#"Source", "Custom1", {"worklogs"}), #"ExpandWorklogs1"= Table.ExpandListColumn(#"ExpandWorklogs", "worklogs"), #"Expand" = Table.ExpandRecordColumn(#"ExpandWorklogs1", "worklogs", {"self", "author", "updateAuthor", "comment", "created","updated","started","timeSpent","timeSpentSeconds","id"}, {"self", "author", "updateAuthor", "comment", "created","updated","started","timeSpent","timeSpentSeconds","id"}), #"ExpandWorklogsAuthor"= Table.ExpandRecordColumn(#"Expand", "author", {"name"}), #"Renamed Columns1" = Table.RenameColumns(ExpandWorklogsAuthor,{{"name", "name_author"}}), #"ExpandWorklogsUpdateAuthor"= Table.ExpandRecordColumn(#"Renamed Columns1", "updateAuthor", {"name"}), #"Filtered Rows1" = Table.SelectRows(ExpandWorklogsUpdateAuthor, each true) in #"Filtered Rows1"
P1_epics_only: esta es una tabla con una columna (con el nombre «key_name»), donde se almacena la lista de epic de jira (algo así como «variable»)
Entonces, en la octava línea del código comienza el mismo problema sobre el que escribí: las líneas se cargan a una velocidad de «una línea por segundo» ((
__________________
Conozco un poco Python, pero nunca lo usó para Power BI, que comencé a usar hace 2 semanas)
Tal vez recurra a esta solución si no resuelvo mi pregunta con una variante más comprensible en este momento.
v-jiascu-msft
En respuesta a vitalidad
Hola @Vitaliy,
He encontrado un problema de rendimiento en su código. Aunque no sé si otras partes como la API de Jira podrían influir en el rendimiento. Podría correr más rápido. Probé con 100 mil filas esta vez. Incluso terminó en segundos. Por favor inténtalo.
let
//other parts are good without cahnges.
... ... #"Source"= Table.AddColumn(#"AddIndex", "Custom1", each Json.Document(Web.Contents([Custom]))), ... ... in #"Filtered Rows1"
¿Por qué? El código antiguo invocaba una tabla que debería evitarse en Power Query.
Atentamente,
Valle
hongjyan
En respuesta a v-jiascu-msft
Encontré este mismo problema, pero no puedo resolverlo con esta solución.
@v-jiascu-msft, @Vitaliy, probaste con JIRA-RESET-API.
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"
vitalidad
En respuesta a v-jiascu-msft
Hola @v-jiascu-msft
Gracias por su ayuda, es una solución realmente genial (y simple).
¿Por qué no lo adiviné por mi cuenta? 🙂