{"id":40171549,"url":"https://github.com/cubewise-code/optimus-py","last_synced_at":"2026-02-18T14:10:12.921Z","repository":{"id":41388595,"uuid":"228483285","full_name":"cubewise-code/optimus-py","owner":"cubewise-code","description":"Find the best cube dimension order with TM1py","archived":false,"fork":false,"pushed_at":"2025-12-15T09:29:09.000Z","size":1056,"stargazers_count":19,"open_issues_count":6,"forks_count":18,"subscribers_count":9,"default_branch":"master","last_synced_at":"2026-02-02T03:33:20.000Z","etag":null,"topics":["planning-analytics","tm1","tm1-rest-api","tm1py"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cubewise-code.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-12-16T21:58:41.000Z","updated_at":"2025-08-05T17:51:19.000Z","dependencies_parsed_at":"2024-11-27T21:23:59.630Z","dependency_job_id":"2c14bddb-0c59-4f6a-9b19-73da868fda9f","html_url":"https://github.com/cubewise-code/optimus-py","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/cubewise-code/optimus-py","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cubewise-code%2Foptimus-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cubewise-code%2Foptimus-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cubewise-code%2Foptimus-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cubewise-code%2Foptimus-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cubewise-code","download_url":"https://codeload.github.com/cubewise-code/optimus-py/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cubewise-code%2Foptimus-py/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29581637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T13:56:48.962Z","status":"ssl_error","status_checked_at":"2026-02-18T13:54:34.145Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["planning-analytics","tm1","tm1-rest-api","tm1py"],"created_at":"2026-01-19T17:06:45.186Z","updated_at":"2026-02-18T14:10:12.904Z","avatar_url":"https://github.com/cubewise-code.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n![](https://github.com/cubewise-code/optimus-py/blob/master/images/logo.png)\n\n# OptimusPy for TM1\n\nFind the ideal dimension order for your TM1 cubes\n\n## Installing\n\nInstall required python packages:\n```\npip install TM1py\npip install seaborn\n```\n\nClone or download the `optimus-py` Repository from GitHub\n\n\n## Usage\n\n* Adjust config.ini to match your TM1 environment\n* Create uniquely named views in the relevant cubes\n* Execute the `optimuspy.py` \n* provide 8 arguments: \n    -i _(name of the instance)_ \n    -c _(name of the cube)_ \n    -v _(name of the cube view)_ \n    -e _(number of execution)_ \n    -f _(fast mode: True or False)_\n    -o _(output: csv or xlsx)_ \n    -u _(update original order: True or False)_\n    -t _(name of a ti process to measure runtime)_\n    -d _(optional: comma split list of dimensions to keep positions as per the storage order)_\n\n```\nC:\\Projects\\optimus-py\\optimuspy.py -i=\"tm1srv01\" -c=\"Cube Name\" -v=\"Optimus\" -e=\"10\" -f=\"True\" -o=\"csv\" -u=True -t=\"load.csv.file\"\n```\n\n```\nC:\\Projects\\optimus-py\\optimuspy.py --instance=\"tm1srv01\" --cube=\"Cube Name\" --view=\"Optimus\" --executions=\"15\" --fast=\"True\" --output=\"csv\" --update=True --process=\"load.csv.file\"\n```\n\nYou can use this public Google Sheet to construct the command prompt for the execution\n\nhttps://docs.google.com/spreadsheets/d/1dtgl9WkYcsyokWNdX29m4K_5oNm3MI3iTOH2f_g6Kd4/edit?usp=sharing\n\n## Output\n\nOptimusPy determines the ideal dimension order for every cube, based on RAM and query speed.\nFor traceability and custom analysis, Optimus visualizes the results in a csv report and a scatter plot per cube.\n\n\n|ID |Mode          |Mean Query Time|RAM   |Dimension1   |Dimension2  |Dimension3  |Dimension4  |Dimension5   |Dimension6  |Dimension7|Dimension8|Dimension9   |\n|---|--------------|---------------|------|-------------|------------|------------|------------|-------------|------------|----------|----------|-------------|\n|1  |Original Order|0.00445528     |259072|Industry     |SalesMeasure|Product     |Executive   |Business Unit|Customer    |Version   |State     |Time         |\n|2  |Iterations    |0.00379407     |520184|SalesMeasure |Customer    |Executive   |Industry    |Product      |State       |Time      |Version   |Business Unit|\n|3  |Iterations    |0.00378995     |520184|Business Unit|SalesMeasure|Executive   |Industry    |Product      |State       |Time      |Version   |Customer     |\n|4  |Iterations    |0.00422788     |520184|Business Unit|Customer    |SalesMeasure|Industry    |Product      |State       |Time      |Version   |Executive    |\n|5  |Iterations    |0.00458372     |520184|Business Unit|Customer    |Executive   |SalesMeasure|Product      |State       |Time      |Version   |Industry     |\n|6  |Iterations    |0.00479290     |259072|Business Unit|Customer    |Executive   |Industry    |SalesMeasure |State       |Time      |Version   |Product      |\n|7  |Iterations    |0.00548539     |259072|Business Unit|Customer    |Executive   |Industry    |Product      |SalesMeasure|Time      |Version   |State        |\n\n![](https://github.com/cubewise-code/optimus-py/blob/master/images/scatter_plot.png)\n\n## Considerations\n- Ideally run on the same machine as TM1\n- Use big and representative views _(e.g. typical slices that end users consume)_\n- Choose a sensible number of `executions` between 5 and 10\n- Provide enough spare memory on TM1 server\n- Fast mode determines first and last position only _(Should get you 80% of possible improvement potential)_\n- XLSX output is preferable over CSV output but requires optional `xlsxwrite` dependency\n- Choose a TI that loads data to the cube and runs for at least a few seconds\n\n## Need a .exe version of OptimusPy?\n\nThe latest executable build is available as an artifact in the GitHub Actions workflow runs. To download it:\n\n1. Go to the [Actions tab](https://github.com/cubewise-code/optimus-py/actions) of the repository.\n2. Click on the most recent workflow run titled **Build Executable**.\n3. In the workflow summary, look for the **Artifacts** section.\n4. Download the **optimuspy-winOS** artifact.\n\n## Built With\n\n* [TM1py](https://github.com/cubewise-code/TM1py) - A python wrapper for the TM1 REST API\n* [matplotlib](https://github.com/matplotlib/matplotlib) - A comprehensive library for crating visualizations in Python.\n\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcubewise-code%2Foptimus-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcubewise-code%2Foptimus-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcubewise-code%2Foptimus-py/lists"}