CR
Hola tios,
Sé cómo cargar un archivo JSON si
let
Source = Json.Document(File.Contents("\...refreshables.json")),
#"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", "kind", "lastRefresh", "refreshSchedule", "configuredBy", "capacity", "group", "startTime", "endTime", "refreshCount", "refreshFailures", "averageDuration", "medianDuration", "refreshesPerDay"}, {"id", "name", "kind", "lastRefresh", "refreshSchedule", "configuredBy", "capacity", "group", "startTime", "endTime", "refreshCount", "refreshFailures", "averageDuration", "medianDuration", "refreshesPerDay"}),
#"Expanded lastRefresh" = Table.ExpandRecordColumn(#"Expanded Column1", "lastRefresh", {"id", "refreshType", "startTime", "endTime", "serviceExceptionJson", "status", "requestId"}, {"lastRefresh.id", "lastRefresh.refreshType", "lastRefresh.startTime", "lastRefresh.endTime", "lastRefresh.serviceExceptionJson", "lastRefresh.status", "lastRefresh.requestId"}),
#"Expanded refreshSchedule" = Table.ExpandRecordColumn(#"Expanded lastRefresh", "refreshSchedule", {"days", "times", "enabled", "localTimeZoneId", "notifyOption"}, {"refreshSchedule.days", "refreshSchedule.times", "refreshSchedule.enabled", "refreshSchedule.localTimeZoneId", "refreshSchedule.notifyOption"}),
#"Expanded refreshSchedule.days" = Table.ExpandListColumn(#"Expanded refreshSchedule", "refreshSchedule.days"),
#"Expanded refreshSchedule.times" = Table.ExpandListColumn(#"Expanded refreshSchedule.days", "refreshSchedule.times"),
#"Expanded configuredBy" = Table.ExpandListColumn(#"Expanded refreshSchedule.times", "configuredBy"),
#"Expanded capacity" = Table.ExpandRecordColumn(#"Expanded configuredBy", "capacity", {"id", "displayName", "sku"}, {"capacity.id", "capacity.displayName", "capacity.sku"}),
#"Expanded group" = Table.ExpandRecordColumn(#"Expanded capacity", "group", {"id", "name"}, {"group.id", "group.name"}),
...
Pero no sé cómo hacerlo cuando el archivo JSON es uno de los archivos de una carpeta que obtengo como fuente.
let
Source = PBIAuditLogRaw,
#"Filtered Rows" = Table.SelectRows(Source, each ([Source.Name] = "refreshables.json"))
???
in
Alguna idea de lo que tengo que poner en lugar del ??? ?
Saludos,
CR
mahoneypat
En respuesta a CR
Sus dos primeros pasos parecen correctos, pero el siguiente debería ser un paso de navegación. ¿Ves algo como esto en ese paso?
Si es así, haga clic en la palabra «Binario» que debería abrir su archivo como un tipo JSON, y luego puede usar pasos similares a los de su primera consulta desde allí.
Si esto le funciona, márquelo como la solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.
Saludos,
Palmadita
v-lionel-msft
Hola @CR,
¿Está su archivo JSON ubicado en una carpeta determinada?
¿Desea utilizar el conector ‘Carpeta’ para importar y fusionar los archivos de toda la carpeta?
Atentamente,
Lionel Chen
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.
CR
En respuesta a v-lionel-msft
Hola @ v-lionel-msft:
De hecho, esta es una carpeta y contiene aproximadamente 20 archivos csv (no hay problema con ellos) y un archivo json (del que estoy hablando).
La carga está bien ahora, es solo que no sé cómo convertir el contenido a una tabla limpia (como se explicó, espero, en mi última publicación).
Saludos,
Camille
lbendlin
En respuesta a CR
Te estás perdiendo el paso en el que analizas el JSON. (Lo acaba de importar como CSV).
«No sé cómo convertir el contenido en una tabla limpia «
No es así como funciona JSON. Representa una jerarquía. Una tabla no tiene jerarquía.
Puede aplanar el JSON en algunos casos para que parezca una tabla (muy ineficaz), pero en la mayoría de los casos solo puede tomar ciertos atributos de su JSON para su posterior procesamiento.
mahoneypat
Desde ese paso, simplemente haga clic en el hipervínculo «Binario» (o cualquier hipervínculo que se encuentre en el [Content] columna (o algo así). Eso creará un paso de Navegación y debería parecer familiar después de eso.
Si esto le funciona, márquelo como la solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.
Saludos,
Palmadita
CR
En respuesta a mahoneypat
@mahoneypat, @lbendlin,
Gracias. Amplío todas las columnas y obtuve 48 columnas.
let
Source = PBIAuditLogRaw,
#"Filtered Rows" = Table.SelectRows(Source, each ([Source.Name] = "refreshables.json")),
#"Expanded Transform File from PBIAuditLog" = Table.ExpandTableColumn(#"Filtered Rows", "Transform File from PBIAuditLog", {"{", "", "_1", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "_10", "_11", "_12", "_13", "_14", "_15", "_16", "_17", "_18", "_19", "_20", "_21", "_22", "_23", "_24", "_25", "_26", "_27", "_28", "_29", "_30", "_31", "_32", "_33", "_34", "_35", "_36", "_37", "_38", "_39", "_40", "_41", "_42", "_43", "_44", "_45", "_46", "_47", "_48"}, {"{", "Column1", "_1", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "_10", "_11", "_12", "_13", "_14", "_15", "_16", "_17", "_18", "_19", "_20", "_21", "_22", "_23", "_24", "_25", "_26", "_27", "_28", "_29", "_30", "_31", "_32", "_33", "_34", "_35", "_36", "_37", "_38", "_39", "_40", "_41", "_42", "_43", "_44", "_45", "_46", "_47", "_48"})
in
#"Transform File from PBIAuditLog"
También obtengo la siguiente tabla para miles de identificaciones. Aquí hay una muestra del primer ID (limitado a 13 columnas en lugar de 48).
Nombre de la fuente | { | Columna1 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _10 | _11 |
refreshables.json | «@ odata.context»: «http: //…/$metadata#refreshables» | @ odata.count: 332 | valor:[ | ||||||||||
refreshables.json | { | ||||||||||||
refreshables.json | «id»:»XXXX1″ | name:»Name1″ | kind:»Dataset» | startTime:»2020-06-13T23:01:18.85Z» | endTime:»2020-06-17T01:38:02.4Z» | refreshCount:20 | refreshFailures:4 | averageDuration:3989.5736666666667 | medianDuration:3111.936 | refreshesPerDay:6 | lastRefresh:{ | ||
refreshables.json | «id»:33283100 | refreshType:»Scheduled» | startTime:»2020-06-17T03:30:08.257Z» | endTime:null | serviceExceptionJson:null | status:»Unknown» | requestId:»…» | ||||||
refreshables.json | } | refreshSchedule:{ | |||||||||||
refreshables.json | «days»:[ | ||||||||||||
refreshables.json | «Sunday» | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | ||||||
refreshables.json | ] | veces:[ | |||||||||||
refreshables.json | «01:00» | 05:30 | 09:00 | 13:00 | 17:00 | 22:00 | |||||||
refreshables.json | ] | habilitado: verdadero | localTimeZoneId: «Hora estándar de romance» | Notificar Opción: «MailOnFailure» | |||||||||
refreshables.json | } | configureBy:[ | |||||||||||
refreshables.json | «email» | ||||||||||||
refreshables.json | ] | capacidad:{ | |||||||||||
refreshables.json | «id»: «capa1» | displayName: «capa-name» | sku: «P1» | ||||||||||
refreshables.json | } | grupo:{ | |||||||||||
refreshables.json | «id»: «grupo1» | nombre: «grupo1» | |||||||||||
refreshables.json | } | ||||||||||||
refreshables.json | } | { |
El problema es que no veo cómo obtener una tabla limpia obteniendo toda la información para un ID en una línea.
Intenté convertirlo en una lista, pero parece que es más complejo.
Saludos,
CR
mahoneypat
En respuesta a CR
Sus dos primeros pasos parecen correctos, pero el siguiente debería ser un paso de navegación. ¿Ves algo como esto en ese paso?
Si es así, haga clic en la palabra «Binario» que debería abrir su archivo como un tipo JSON, y luego puede usar pasos similares a los de su primera consulta desde allí.
Si esto le funciona, márquelo como la solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.
Saludos,
Palmadita
CR
En respuesta a mahoneypat
@mahoneypat
El contenido no era binario sino de tabla. También comienzo de nuevo la carga y, ahora, funciona perfectamente bien. Entonces, el problema está resuelto, pero no sé por qué, porque no puedo volver a producir el problema.
Adiós,
CR
lbendlin
¿Qué carpeta, carpeta de archivos o carpeta de Sharepoitn?
En cualquier caso, simplemente abra una conexión a la fuente de su carpeta, luego configure un filtro para la ruta de destino, la extensión del archivo y el nombre del archivo según sea necesario, y luego continúe con su código de análisis JSON desde allí. Verifique el código generado de Power Query, es bastante sencillo.