If you have PGO files that become corrupt, or you upgrade and are not able to use your old PGOs, you can re-create the CAL assignments from within those PGOs with an XML. Generally, the steps are as follows:
Backup your original PGO files
Generate the PGO files as XML files
Backup/Save the XML files someplace safe, and read them into Qlikview.
Delete the CalData.pgo and all other PGO files (this allows you to re-assign CALs, but you lose the original assignment information; make sure you've taken a backup of your PGO files!)
Manually recreate all the CAL assignments in the QMC (using Qlikview to read the XML file, as described below in this article)
If this is a problem you’re facing after upgrade, you may need to accomplish this in a test system on an older version of QV (whatever version you upgraded from originally). PGO files can be moved from system to system without issues if the license applied on the local system has >= the number of CALs assigned in the PGO.
Once you have the PGO in XML format, save it somewhere safe and read into Qlikview.
Read that Caldata.pgo information into Qlikview and pull the CalData/NamedCalsAllocated/CalAllocEntry table.
Reload and create a list box with the “name” field, then export to .txt or .csv.
Open this in NP++ and run the following find/replace to get everything on the same line.
Find: [\r\n]+
Replace: ;
(note the space character after the ‘;’)
Remove the old PGO files from your Qlikview installation. Be sure to do these steps for all nodes in the QVS cluster, if your installation is clustered.
Stop QVS and QMS (all nodes) as when you remove files it might still remain in the memory
Delete the caldata.pgo and all other PGO files under the path configured for "user documents" in the QMC and also "ProgramData\QlikTech\QlikViewServer" locally on all nodes
Restart the services
Manually input the CAL assignment information into the QMC, using the information in the Qlikview document.
For User CALs, manually add the names into Assigned CALs
For Document CALs, use the same procedure after adding the “DocumentName” field and filtering based on the document.