Estoy intentando documentar los informes, imágenes y medidas utilizadas en un archivo PBIX. Tengo un archivo PBIX (que contiene algunos elementos visuales y apunta al modelo tabular en modo en vivo), luego lo exporté como PBIT y le cambié el nombre a zip. Ahora en este archivo zip tenemos una carpeta llamada Informe, dentro de ella tenemos un archivo llamado Diseño. El archivo de diseño parece un archivo JSON, pero cuando intento leerlo mediante Python,
import json
# Opening JSON file
f = open("C://Layout",)
# returns JSON object as
# a dictionary
#f1 = str.replace("\'", "\"")
data = json.load(f)
Me aparece el siguiente problema,
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Cambiarle el nombre a Layout.json tampoco ayuda y genera el mismo problema. ¿Existe una manera fácil o un analizador para analizar específicamente este archivo de diseño y obtener la siguiente información?
Report Name | Visual Name | Column or Measure Name
------------------------------
No estoy seguro de haber encontrado todavía una respuesta a su pregunta, pero he estado investigando algo similar.
Esto es lo que tuve que hacer para que el archivo se analizara correctamente.
Los elementos importantes aquí no son la codificación y todos los reemplazos de espacios en blanco.
los datos contendrán el objeto analizado.
with open('path/to/Layout', 'r', encoding="cp1252") as json_file:
data_str = json_file.read().replace(chr(0), "").replace(chr(28), "").replace(chr(29), "").replace(chr(25), "")
data = json.loads(data_str)
1
No sé por qué nadie más ha votado a favor de esta respuesta, ¡pero funcionó para mí! ¡Gracias!
Eliot
7 enero 2022 a las 20:32
------------------------------------
Este script puede ayudar: https://github.com/grenzi/powerbi-model-utilization
una parte del guión es:
def get_layout_from_pbix(pbixpath):
"""
get_layout_from_pbix loads a pbix file, grabs the layout from it, and returns json
:parameter pbixpath: file to read
:return: json goodness
"""
archive = zipfile.ZipFile(pbixpath, 'r')
bytes_read = archive.read('Report/Layout')
s = bytes_read.decode('utf-16-le')
json_obj = json.loads(s, object_hook=parse_pbix_embedded_json)
return json_obj
respondido el
10 de octubre de 2022 a las 6:27
Parín
Parín
1
1
1 insignia de bronce
------------------------------------
Tuve un problema similar.
mi trabajo en torno a wpara guardarlo como Layout.txt con codificación utf-8, luego continuar como lo has hecho