Check your eligibility for this 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700.
Get StartedDon't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.
tl,dr: Debería poder cambiar la extensión de archivo de un archivo .pbix a .zip y, a continuación, descomprimir la carpeta para acceder a los archivos xml y json subyacentes. Windows se queja de que la carpeta zip está vacía cuando hago esto, pero esto se menciona como posible en varios otros lugares de Internet.
Tengo un informe .pbix con muchos datos e imágenes, y el conjunto de datos ha crecido lo suficiente como para que sea más grande que el límite de 1 GB para conjuntos de datos no premium y, por lo tanto, no se puede actualizar. Para resolver esto me gustaría normalizar los datos y convertirlos a un esquema en estrella. Actualmente hay muchos campos de texto que se pueden convertir en ID numéricos y luego unirse a una tabla de dimensiones.
Después de hacer esto, hasta donde yo sé, tendré que revisar todas mis columnas y medidas personalizadas y reemplazar los nombres de campo para apuntar a las tablas de dimensiones en lugar de la tabla de hechos original, que ahora solo contendrá ID. Creo que la forma más fácil y rápida de hacer esto sería descomprimir el archivo .pbix, abrir la carpeta en algo como VS Code y buscar y reemplazar estos nombres de columna.
El problema es que cuando cambio la extensión de archivo de .pbix a .zip y luego intento descomprimirla, Windows se queja de que la carpeta zip está vacía y no se puede descomprimir. También he intentado usar extensiones .gzip, pero eso tampoco funciona. Me pregunto si el formato de archivo ha cambiado más recientemente, porque la mayoría de las publicaciones sobre descomprimir archivos pbix parecen ser antiguas. ¿Alguien tiene alguna idea sobre cómo descomprimir esto? o alguna otra idea sobre cómo reducir el tamaño de mis datos o cambiar rápidamente las referencias de las columnas? ¡Gracias!
Muchas gracias por su respuesta. Ni siquiera estaba al tanto de ALM Toolkit. Se ve bastante bien.
El uso de 7zip para descomprimir directamente el archivo .pbix falla con el mismo error, por lo que supongo que se ha cambiado la estructura del archivo pbix, sin embargo, ALM Toolkit aún puede abrir archivos de Power BI y extraer el json. No estoy seguro de cómo usar REALMENTE ALM Toolkit para esta tarea, porque parece estar hecho para comparar y fusionar diferencias entre dos archivos. Quiero reemplazar todas las referencias de columna por una nueva, lo que creo que podría hacerse fácilmente con la búsqueda y el reemplazo. Estoy echando un vistazo al código fuente de ALM Toolkit para ver si puedo averiguar cómo se extrae el json.
Ah, si quieres jugar con los metadatos, entonces Tabular Editor es probablemente una mejor herramienta que ALM Toolkit.
Así que he probado Tabular Editor y también DAX Studio. Tabular Editor me permite buscar y reemplazar una métrica individual, pero no todas a la vez. Cuando intento guardar los cambios en la base de datos, se produce un error.
DAX Studio me permite exportar todas las métricas a un script, luego hacer una búsqueda y reemplazar, pero luego recibe un error cuando intento ejecutar el script para crear las métricas. No sé cómo puedo leer cuál es el error real ...
Parece que todas estas herramientas acceden a la base de datos mirando el servidor SSAS en ejecución mientras el archivo de Power BI está abierto, en lugar de desempaquetar el archivo .pbix y leer los datos subyacentes. Creo que esta es también la razón por la que ambas herramientas no realizan cambios en los datos, porque tal vez las métricas ya no se pueden actualizar mientras el archivo está abierto / el servidor SSAS se está ejecutando.
Si pudiera acceder a los archivos de datos subyacentes, debería ser muy sencillo simplemente buscar y reemplazar en todo el DAX. No parece que Power BI o cualquiera de las herramientas externas lo permitan. Esta característica realmente debería integrarse directamente en Power BI. Tableau ha tenido una función de "reemplazar todas las referencias" durante varios años que me permitiría hacer lo mismo.
De todos modos, parece que la estructura de archivos .pbix y .pbit ha cambiado y ya no es un archivo zip.
No es necesario cambiar el nombre del archivo pbix. Puede usar las herramientas de línea de comandos 7Zip y Powershell para hacer todo eso.
# Alias for 7-zip
if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"}
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
# set location
Set-Location -Path C:\Users\xxx\Documents\yyy
# get .pbit files
$files = Get-ChildItem -Recurse -Include *.pbit | Select Name,FullName,LastWriteTime
for ($i = 0; $i -lt $files.Count; $i++) {
if($files[$i].LastWriteTime -gt (Get-Date).AddDays(-2)) {
Write-Host $files[$i].Name
$p = $files[$i].FullName
$e = $p.LastIndexOf(".")
#target folder
$d = $p.Substring(0,$e)
#Write-Host $d
# remove entire folder, so we don't have to care about removing individual items
Remove-Item -LiteralPath $d -Recurse -Force
# 7Zip doesn't need the renaming
sz x "$p" -o"$d" -aoa | Out-Null
Rename-Item -LiteralPath ($d + "\Report\Layout") -NewName "Layout.json" -Force -ErrorAction Ignore
Rename-Item -LiteralPath ($d + "\Connections") -NewName "Connections.json" -Force -ErrorAction Ignore
Rename-Item -LiteralPath ($d + "\DiagramLayout") -NewName "DiagramLayout.json" -Force -ErrorAction Ignore
Rename-Item -LiteralPath ($d + "\DiagramState") -NewName "DiagramState.json" -Force -ErrorAction Ignore
#extract DataMashup
#sz x "$d\DataMashup" -o"$d\Mashup" -aoa | Out-Null
#clean up DataModelSchema
$DMS = Get-Content -Raw -Path ($d + "\DataModelSchema") -Encoding Unicode | ConvertFrom-Json
#new meta format doesn't have datasources. Now $DMS.model.tables
if($DMS.compatibilityLevel -lt 1520) {
$DMS.model.dataSources | ForEach-Object -Process {
#find mashup part of connectionString
$c1 = $_.connectionString.IndexOf("Mashup=", [StringComparison]"CurrentCultureIgnoreCase")
#no mashup for direct query
if( $c1 -gt 1 ) {
$c2 = $_.connectionString.LastIndexOf("Location=", [StringComparison]"CurrentCultureIgnoreCase")
$m = $_.connectionString.Substring($c1 + 7,$c2-$c1-8)
#remove quotes if needed
$m = $m -replace '"',""
#$m.Length
$_.connectionString = $_.connectionString.Substring(0,$c1 + 7) + "..." + $_.connectionString.Substring($c2-1,$_.connectionString.Length - $c2 +1)
#$_.name
# write connection zip file - Base64 encoded mashup string
#$bytes = [Convert]::FromBase64String($m)
#[IO.File]::WriteAllBytes($d + "\" + $_.name + ".zip", $bytes)
}
}
}
# write corrected Json
$DMS | ConvertTo-Json -Depth 3 | Add-Content -LiteralPath ($d + "\DataModelSchema.json")
}
}
Nota: este código funciona con archivos .pbit, pero puede modificarlo para que funcione con pbix
Nota: el formato interno de los archivos .pbix sigue evolucionando, por lo que es posible que algunos de los pasos ya no sean aplicables. Dependiendo de lo que desee lograr, una consulta del DMV podría ser más apropiada.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Prices go up Feb. 11th.
Check out the January 2025 Power BI update to learn about new features in Reporting, Modeling, and Data Connectivity.