New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
run advanced scripting against .pbix #530
Comments
.pbit yes, .pbix no. The latter does not hold the model metadata in the .bim file format, so it can’t be loaded in Tabular Editor. |
ah, that's right - .pbit has the bim file. what is the cmd line code format for this? |
Ah - I just realised there is currently no option to save a .pbit back as a .pbit from the CLI. The Could you elaborate on the scenario you had in mind, where this would be useful? |
An example would be to run a master model script against the .pbit file. However, this may be tricky at the moment as external tools such as tabular editor only have functionality for modifying measures, perspectives, and translations with regard to .pbix/pbit files. Just want to give an option for folks who do development in pbi desktop to implement master model or such automation tasks. thanks! |
For me, a usecase would be to add measures dynamically and automatically to a PBIXfile. Currently, we can download and upload the PBIX file, but adding measures with a CLI would be beneficial to add. But currently, the above issue prevents that. The PBIT workaround might work for us, but do you have any information on how to make this work? Thanks in advance! |
Hi @Mimiix and @m-kovalsky There are no documented ways to do this today, but there is an undocumented workaround. Since we can execute scripts using the CLI (which I assume you wanted to use anyway, in order to add the measures in the first place), we can add a few additional lines of code to our script, in order to cause the script to save the model metadata back to the source. There are two ways this can work: 1) Save back to a .pbix file loaded in Power BI DesktopIf Tabular Editor loads the model metadata directly from the AS instance running inside Power BI Desktop, then we have to save the metadata back to that instance. There is no way to save a .pbix directly from Tabular Editor, but Power BI Desktop will detect that changes have been made, and prompt the user to save the file accordingly. This could be useful for example when creating your own "External Tools" for Power BI Desktop, as you could have a button that would launch Tabular Editor using the CLI and then run the script below. Once you click the button inside Desktop, a command prompt would appear for a couple of seconds, while Tabular Editor does its thing. Then, the prompt closes and Power BI Desktop should show the new measures that were added through the script. In your External Tools .pbitool.json file, you would have something like the following: {
"name": "Add measures with TE",
"path": "c:\\Program Files (x86)\\Tabular Editor\\TabularEditor.exe",
"arguments": "\"%server%\" \"%database%\" -S \"c:\\path_to_my\\script.cs\""
} Replace c:\path_to_my\script.cs with the actual location of the script below. Note the extra backslashes () used to escape the JSON. 2) Open and save from a .pbit fileIf you want to integrate this in some kind of CI/CD pipeline, then you can use the CLI to open a .pbit file and make modifications to it with the script. Although the CLI cannot save the model back as a .pbit file today, you can again use a similar hack, so that the script itself saves the model back as a .pbit file. ScriptIn both cases, use the script below. Add your own code to add/remove/edit measures at the top of the file. Uncomment the // Make a change to the current model:
Model.Tables["Internet Sales"].AddMeasure("Hello");
// Below is a hack to access the internal "Handler" field, which points to the TabularModelHandler
// object, which contains methods for saving the model metadata back to the source.
var handler = typeof(TabularObject).GetField("Handler",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance).GetValue(Model) as TabularModelHandler;
//// (1) Use this method when the model was loaded from an instance of AS, and we want to save the
//// updated metadata back to that same instance:
//handler.SaveDB();
//// (2) Use this method when the model was loaded from a .pbit file, and we want to save the updated
//// metadata back to a .pbit file (possibly overwriting the source file):
//handler.Save("c:\\Test\\MyNewFile.pbit",
// SaveFormat.PowerBiTemplate,
// TabularEditor.TOMWrapper.Serialization.SerializeOptions.Default); Let me know if this technique is useful. In that case, I will consider providing a more script-friendly way of saving the model metadata back to the source from within the script itself. |
Hi @otykier, Thanks for your explanation. I think i have to elaborate a bit on this. The plans for us are to download a PBIX file from powerbi.com, modify that with the new measures and re-upload it. The measures are read from a CSV file that is downloaded by a powershell script. This enables to update the PBIX files from CLI solely without any user interaction. For now, we might be able to download the PBIX, unzip it, use TabularEditor to edit the model.bim and then repack and upload to Powerbi.com. This would work, but requires 2 tools in which the first is experimental. Ideally, TabularEditor would run on it's own. My current workflow is not preffered but it does enable us to do this headless and provide users with the latest versions and measures. Thank you, |
I see - thanks for clarifying. Again, there is no way that it will ever be possible for a tool like Tabular Editor to make direct modifications to a .pbix file, because the format is proprietary and the file contains data alongside metadata. Also, the .pbix file does not contain a model.bim, so you can't simply unzip it like you describe. Even if you manage to locate something within the file and apply the changes you need, there are checksums and a lot of other stuff in the format, so it's never guaranteed to work once you pack it again. The few times I've tried, I always ended up with a corrupt .pbix file. With a .pbit file, it's possible and you can use script option #2 I provided above, but I don't think there's any way to download a .pbit file from the service or publish a .pbit file to the service. Maybe -- maybe -- you can use some kind of automation tool to open a .pbix file in Desktop, then export that file as a .pbit, but at that point, you may be hitting some issues with the PBI Desktop EULA... Are you on Power BI Premium capacity? In that case, you should have better luck connecting Tabular Editor directly to the XMLA endpoint in order to make your modifications. On Power BI shared capacity, this is unfortunately not possible. |
I think i might be confused with the pbit in this case. Sorry about that. However, that wouldn't matter in our usecase. We are able to read out the model.bim (in the pbit called DataModelSchema, unzipped). It is possible to get a report and reupload those. In our case, we decided we are going to make a internal tool on powerbi, because having to work with 2 tools is complicated. Thanks for clarifying 👍 !! Maar, moet nog wat info bij. |
I'm confused - the link you provided explicitly says that the API is used to download a .pbix file. Are you able to somehow convert that to a .pbit? But as long as you found a solution that works for you, that's good :-) |
We have some internal tooling for that, but i am unfamiliar on how that works. Thanks for your colaboration in this matter! |
Tabular Editor 2.12.0 is out now. With this release, the command-line This allows you to run a script against a .pbit, such as: start /wait TabularEditor.exe "path-to-my.pbit" -S "path-to-my-script.cs" -D Or, you could take this one step further, and create a new external tool for Power BI Desktop, that executes a script against the currently loaded .pbix in Desktop. To do this, create a new .pbitool.json file and put it in your {
"version": "1.0",
"name": "Custom Script",
"description": "Uses Tabular Editor to run a custom script against your model",
"path": "C:\\Program Files (x86)\\Tabular Editor\\TabularEditor.exe",
"arguments": "\"%server%\" \"%database%\" -S \"c:\\Test\\MyCustomScript.cs\" -D",
"iconData": "image/png;base64,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"
} |
Is it possible to run a c# (advanced script) against a .pbix file via the command line? Instead of using a .bim file or a server/database, one would enter in the location of the .pbix file. Thanks!
The text was updated successfully, but these errors were encountered: