{"library":"mdxpy","title":"mdxpy","description":"mdxpy is a Python library designed to simplify the programmatic creation of MDX (Multidimensional Expressions) queries for IBM Planning Analytics (TM1). It eliminates the need for manual string concatenation, reduces syntax errors, and makes MDX generation more robust and easier to refactor. The library is currently at version 1.3.2 and maintains an active release cadence with regular updates.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install mdxpy"],"cli":null},"imports":["from mdxpy import MdxBuilder","from mdxpy import MdxHierarchySet","from mdxpy import Member","from mdxpy import DimensionProperty","from mdxpy import MdxTuple"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom TM1py import TM1Service\nfrom mdxpy import MdxBuilder, MdxHierarchySet, DimensionProperty\n\n# TM1 connection details from environment variables for security\nTM1_ADDRESS = os.environ.get('TM1_ADDRESS', 'localhost')\nTM1_PORT = int(os.environ.get('TM1_PORT', 12354))\nTM1_SSL = os.environ.get('TM1_SSL', 'True').lower() == 'true'\nTM1_USER = os.environ.get('TM1_USER', 'admin')\nTM1_PASSWORD = os.environ.get('TM1_PASSWORD', 'apple')\n\n# This example assumes TM1py is installed and TM1 server is accessible\ntry:\n    with TM1Service(\n        address=TM1_ADDRESS,\n        port=TM1_PORT,\n        ssl=TM1_SSL,\n        user=TM1_USER,\n        password=TM1_PASSWORD\n    ) as tm1:\n        query = MdxBuilder.from_cube(\"SalesCube\")\n        query.add_hierarchy_set_to_row_axis(\n            MdxHierarchySet.all_leaves(\"Account\", \"Account\")\n        )\n        query.add_properties_to_row_axis(\n            DimensionProperty.of(\"Account\", \"Description\"),\n            DimensionProperty.of(\"Account\", \"Type\")\n        )\n        query.add_hierarchy_set_to_column_axis(\n            MdxHierarchySet.all_leaves(\"Time\", \"Time\")\n        )\n\n        mdx_query = query.to_mdx()\n        print(\"Generated MDX Query:\")\n        print(mdx_query)\n\n        # Execute the MDX query using TM1py (optional, for full example)\n        # df = tm1.execute_mdx_dataframe(mdx_query)\n        # print(\"\\nQuery Results (first 5 rows if TM1py executed):\")\n        # print(df.head())\n\nexcept ImportError:\n    print(\"TM1py not installed. Install with 'pip install TM1py' to run full example.\")\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")","lang":"python","description":"This quickstart demonstrates building a basic MDX query for a 'SalesCube' cube, retrieving all leaf members from 'Account' and 'Time' dimensions, including properties for 'Account'. It uses `TM1Service` from `TM1py` to illustrate a common integration pattern.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.3.2","pypi_latest":"1.3.2","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.3,"avg_import_s":0.02,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"17.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.03,"mem_mb":1.2,"disk_size":"19.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.02,"mem_mb":1.2,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"11.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.2,"import_time_s":0.02,"mem_mb":1,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.02,"mem_mb":1,"disk_size":"11.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"17.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mdxpy","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.01,"mem_mb":0.8,"disk_size":"18M"}]}}