Skip to main content

Run DAX queries against Analysis Services and get Pandas Dataframes

Project description

About

I wanted to consume some info from Azure Analysis Services from python and didn't see a convenient way to to do, so I wrote this. It should also work just fine with XMLA endpoints on Power BI Premium.

pymsasdax is a small Python Module for running DAX queries against Microsoft Analysis Services, using COM Interop. It does some basic typesniffing and returns a best guess Pandas Dataframe.

This does assume that the MSOLAP client is installed - you can get it from here

I've done very little testing, so consider this alpha code. If you run into timeouts, make sure you're setting the timeout to an appropriate duration when creating the Connection.

tidy_column_names will remove brackets and replace spaces with underscores in the returned dataframe's columns. Set it to False in the Connection init if you don't want this behavior.

Also, this is my first module up on pypi and I'm not exactly an expert on python, so feel free to submit an issue or a pull request. If I ended up reinventing the wheel here (ha!) and there was an easier way to do this, also please let me know.

I hope you find this useful!

Python before 3.9

This should actually work fine with for python 3 under 3.9. I've used this code for a couple of years now without incident -- I was just lazy when building this package. I think you'd need backports to support dateparser. Feel free to path and submit a PR if you like.

Usage examples

Have an interactive prompt for Login to the resource

from pymsasdax import dax

with dax.Connection(
        data_source='asazure://<region name>.asazure.windows.net/<instance here>,
        initial_catalog='<my tabular database>'
    ) as conn:
    df = conn.query('EVALUATE ROW("a", 1)')
    print(df)

Use an app id

from pymsasdax import dax

with dax.Connection(
        data_source='asazure://<region name>.asazure.windows.net/<instance here>,
        initial_catalog='<my tabular database>'
        uid='app:<client id>@<tenant id>',
        password='<client secret>
    ) as conn:
    df = conn.query('EVALUATE ROW("a", 1)')
    df.to_csv("raw_data.csv", index=False)        

Rename columns your way

from pymsasdax import dax

def my_column_renamer(colname):
    return colname.lower()

with dax.Connection(
        data_source='asazure://<region name>.asazure.windows.net/<instance here>,
        initial_catalog='<my tabular database>',
        tidy_map_function = my_column_renamer
    ) as conn:
    df = conn.query('EVALUATE SUMMARIZECOLUMNS (etc....etc...etc...)')
    print(df)

Dev Notes

Version History

  • 2023.1013
    • Fix issue with column names populating from when i made initial package version
    • Allow specificiation of column name cleanup function
  • 2023.1001 - Initial

Tests

Yes. There aren't any. Feel free to submit a PR.

Building

This might not be right but if you ever go to update pypi -

bumpver update --minor --tag beta
pip-compile pyproject.toml
python -m pip install -e . 
#test
python -m build
twine check dist/*
twine upload dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymsasdax-2023.1013.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

pymsasdax-2023.1013-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file pymsasdax-2023.1013.tar.gz.

File metadata

  • Download URL: pymsasdax-2023.1013.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for pymsasdax-2023.1013.tar.gz
Algorithm Hash digest
SHA256 7a6597f07a54046c16f00c130370b28afafbd653996c2201de742971da541702
MD5 a0355ee86a5aa9f9cd23500ef79fdfaa
BLAKE2b-256 6e1ba27cec045b725fae84d394c579f7531c666fccdb56f5e19b5e348d76d867

See more details on using hashes here.

File details

Details for the file pymsasdax-2023.1013-py3-none-any.whl.

File metadata

File hashes

Hashes for pymsasdax-2023.1013-py3-none-any.whl
Algorithm Hash digest
SHA256 796feadb160a46cee4d658768d249f0f1ae188b4bd0a3b2a5d57fa5381cbc776
MD5 ff28f221a745b0adf8b971c337dfa722
BLAKE2b-256 09432ece273be8a1c084167bfa4b1cfac55cfb331cafbd167e1ea4cedd2381c1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page