python - Power BI(PBIX) - Archivo de diseño de análisis

CorePress2024-01-24  11

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

randomThread
Python - TypeError: tipos de operandos no admitidos para +=:, int y, NoneTypec# - ¿Qué es una IndexOutOfRangeException/ArgumentOutOfRangeException y cómo lo soluciono?c# - El aislamiento de CSS de Blazor no anula los estilos de Bootstrapc# - ¿Cómo se actualizan varias tablas con 1 consulta?pandas: ¿Volver a muestrear datos de series temporales en función del valor máximo de una columna?javascript: reinicia con la API de PM2, reinicia también el script cuando se ejecuta en PM2html: uso de consulta de medios para ejecutar