Cargue correctamente un archivo JSON desde una carpeta como fuente

Un usuario Pregunto ✅

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?

binary.png

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

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?

lll2.PNG

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?

binary.png

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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *