Connect to your tabular model and perform operations programmatically
Project description
PyTabular
What is it?
PyTabular is a python package that allows for programmatic execution on your tabular models! This is possible thanks to Pythonnet and Microsoft's .Net APIs on Azure Analysis Services. The package should have the dll files included when you import it. See Documentation Here. PyTabular is still considered alpha while I'm working on building out the proper tests and testing environments, so I can ensure some kind of stability in features.
Getting Started
python3 -m pip install python_tabular
In your python environment, import pytabular and call the main Tabular Class. Only parameter needed is a solid connection string.
import pytabular
model = pytabular.Tabular(CONNECTION_STR)
Query Model
#Run basic queries
DAX_QUERY = "EVALUATE TOPN(100, 'Table1')"
model.Query(DAX_QUERY) #returns pd.DataFrame()
#or...
DMV_QUERY = "select * from $SYSTEM.DISCOVER_TRACE_EVENT_CATEGORIES"
model.Query(DMV_QUERY) #returns pd.DataFrame()
#or...
SINGLE_VALUE_QUERY_EX = "EVALUATE {1}"
model.Query(SINGLE_VALUE_QUERY_EX) #returns 1
See Refresh Tables and Partitions.
#You have a few options when refreshing.
model.Refresh('Table Name')
#or...
model.Refresh(['Table1','Table2','Table3'])
#or...
model.Refresh(<Table Class>)
#or...
model.Refresh(<Partition Class>)
#or...
model.Refresh({'Table Name':'Partition Name'})
#or any kind of weird combination like
model.Refresh([{<Table Class>:<Partition Class>,'Table Name':['Partition1','Partition2']},'Table Name','Table Name2'])
#Add Tracing=True for simple Traces tracking the refresh.
model.Refresh(['Table1','Table2'], Tracing=True)
Built In Dax Query Helpers. In-case you want to run some quick queries similar to what vertipaq analyzer will do when getting row counts.
#Query Every Column
model.Query_Every_Column() #Will return pd.DataFrame()
#Query Every Table
model.Query_Every_Table() #Will return pd.DataFrame()
'''
NOTE, notice the default values for the query_function argument.
Query_Every_Column will get COUNTROWS(VALUES(_))
and Query_Every_Table() will get COUNTROWS(_)
with '_' being replaced with the dax identifier to the table or column in question.
You can replace this str with anything you want. For example output the MIN(_) or MAX(_) of each column rather than the default queries.
'''
Backup & Revert a Table in Memory. USE WITH CAUTION, obviously not in PROD. I have been experimenting with this concept.
model.Backup_Table('TableName') #This will backup the table with surround items (columns,measures,relationships,roles,hierarchies,etc.) and will add a suffix of '_backup'
#Make any changes to your original table and then revert or delete backup as necessary
model.Revert_Table('TableName') #This will essentially replace your original with _backup
Run BPA from TE2. Roadmap to make this more robust, and allow you to run all the command line interfaces that TE2 has to offer.
TE2 = pytabular.TE2() #Feel free to input your TE2 File path or this will download for you.
BPA = pytabular.BPA() #Fee free to input your own BPA file or this will download for you from: https://raw.githubusercontent.com/microsoft/Analysis-Services/master/BestPracticeRules/BPARules.json
model.Analyze_BPA(TE2.EXE_Path,BPA.Location) #This will output a list of BPA violations...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for python_tabular-0.0.90-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 994c156e50fea82726226c0dcb2c1a68c6cccf2995c630a8c87c380819297cac |
|
MD5 | 52968fb828d985ff303ff86129d9801c |
|
BLAKE2b-256 | 4f603d7d70ab820b06ad2c5eb366e6f9b91eeeefe1175b201b7c361b3d9368b8 |