Python connect to olap cube

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Python package to access OLAP data sources.

may-day/olap

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This package is meant for accessing xmla datasources — see http://en.wikipedia.org/wiki/XML_for_Analysis

Example to set up a develop environment

# create virtualenv python3 -m venv xyz cd xyz source bin/activate git clone https://github.com/may-day/olap cd olap/xmla # optional if you have it already pip install pipenv pipenv install -dev python setup.py develop # now you should be good to go 

Here is an example how to use it:

import olap.xmla.xmla as xmla p = xmla.XMLAProvider() # mondrian c = p.connect(location="http://localhost:8080/mondrian/xmla") # or ssas - note that thhis needs setup on an iis # also you'll probably need to authenticate using kerberos # from requests_kerberos import HTTPKerberosAuth # c = p.connect(location="https://my-as-server/olap/msmdpump.dll", # sslverify="/path/to/my/as-servers-ca-cert.pem", auth=HTTPKerberosAuth()) # getting info about provided data print(c.getDatasources()) print(c.getMDSchemaCubes()) # for ssas a catalog is needed, so the call would be like # get a catalogname from a call to c.getDBSchemaCatalogs() # c.getMDSchemaCubes(properties=) # execute a MDX (working against the foodmart sample catalog of mondrian) cmd= """ select * on columns, [Gender].[Gender].ALLMEMBERS on rows from [Sales] """ res = c.Execute(cmd, Catalog="FoodMart") #return only the Value property from the cells res.getSlice(properties="Value") # or two props res.getSlice(properties=["Value", "FmtValue"]) # to return some subcube from the result you can # return all res.getSlice() # just the 4th column res.getSlice(Axis0=3) # same as above, SlicerAxis is ignored res.getSlice(Axis0=3, SlicerAxis=0) # return the data sliced at the 2nd and 3rd row res.getSlice(Axis1=[1,2]) # return the data sliced at the 2nd and 3rd row and at the 4th column res.getSlice(Axis0=3, Axis1=[1,2])

Using the procedural interface:

import olap.xmla.xmla as xmla p = xmla.XMLAProvider() c = p.connect(location="http://localhost:8080/mondrian/xmla") s = c.getOLAPSource() # import olap.interfaces as oi # oi.IOLAPSource.providedBy(s) == True s.getCatalogs() s.getCatalog("FoodMart").getCubes() s.getCatalog("FoodMart").getCube("HR").getDimensions() s.getCatalog("FoodMart").getCube("HR").getDimension("[Department]").\ getMembers() s.getCatalog("FoodMart").getCube("HR").getDimension("[Department]").\ getMember("[Department].[14]") cmd= """ select * on columns, [Gender].[Gender].ALLMEMBERS on rows from [Sales] """ res=s.getCatalog("FoodMart").query(cmd) res.getSlice()

Источник

Читайте также:  Java what does it down

Организация OLAP куба средствами Python

Добрый день, уважаемые читатели. Сегодня я расскажу вам о том, как можно построить простенькую систему анализа данных на Python. В этом мне помогут framework cubes и пакет cubesviewer .

Сubes представляет собой framework’ом для работы с многомерными данными с помощью Python. Кроме того он включает в себя OLAP HTTP-сервер для упрощенной разработки приложений отчетности и общего просмотра данных.

Сubesviewer представляет собой web-интерфейс для работы с вышеуказанным сервером.

Установка и настройка cubes

Для начала надо установить библиотеки, необходимые для работы пакета:

pip install pytz python-dateutil jsonschema pip install sqlalchemy flask 

Далее устанавливаем сам пакет cubes :

Как показала практика, лучше использовать версию (1.0alpha2) из текущего репозитория .

Доп настройки под windows

Если вы планируете работать под Windows необходимо в файле PYTHON_DIR\Lib\site-packages\dateutil\tz.py заменить 40 строку:

return myfunc(*args, **kwargs).encode() 

Затем, вне зависимости от платформы на которой вы работаете, нужно добавить следующий fix для корректной работы json-парсера. Вносить его надо в PYTHON_DIR\Lib\site-packages\cubes-1.0alpha-py2.7.egg\cubes\metadata.py начиная с 90 строки:

 # TODO: same hack as in _json_from_url return read_model_metadata_bundle(source) 

Описание настройки куба и процесс его разворачивания

Для примера возьмем OLAP-куб, который идет в поставке с cubes . Он находится в папке examples/hello_world (ее можно взять с репозитория). Наибольший интерес для нас представляют 2 файла:

  • slicer.ini — файл настроек http сервера нашего куба
  • model.json — файл с описание модели куба

Остановимся на них поподробнее. Начнем с файла slicer.ini , который может включать следующие разделы:

  • [workspace] – конфигурация рабочего места
  • [server] — параметры сервера (адрес, порт и тд.)
  • [models] — список моделей для загрузки
  • [datastore] или [store] – параметры хранилища данных
  • [translations] — настройки локализации для модели.

Итак разберем из нашего тестового файла видно, что сервер будет располагаться на локальной машине и будет работать по 5000 порту. В качестве хранилища будет использоваться локальная база SQLite под названием data.sqlite.

Подробнее о конфигурировании сервера можно прочитать в документации. Также из файла видно, что описание модели нашего куба находиться в файле model.json , описание структуры которого мы сейчас и займемся. Файл описания модели, это json -файл, который включает следующие логические разделы:

  • name – имя модели
  • label – метка
  • description – описание модели
  • locale – локаль для модели (если задана локализация)
  • cubes – список метаданных кубов
  • dimensions – список метаданных измерений
  • public_dimensions – список доступных измерений. По умолчанию все измерения доступны.
Читайте также:  Read from file typescript

Для нас представляют интерес разделы cubes и dimensions , т.к. все остальные опциональны. Элемент списка dimensions , содержит следующие метаданные:

Элемент списка cubes , содержит следующие метаданные:

Исходя из выше описанного, можно понять, что у нас в модели в будет 2 измерения ( item, year ). У измерения “ item ” 3 уровня измерений:

  • category . Отображаемое имя “Category”, поля “category”, “category_label”
  • subcategory . Отображаемое имя “Sub-category”, поля “subcategory”, “subcategory_label”
  • line_item . Отображаемое имя “Line Item”, поле “line_item”

В качестве меры в нашем кубе будет выступать поле “amount” , для которой выполняются функции суммы и подсчета кол-ва строк. Подробнее о разметке модели куба можно почитать в документации После того, как мы разобрались с настройками, надо создать нашу тестовую базу. Для того, чтобы это сделать, необходимо запустить скрипт prepare_data.py :

Теперь осталось только запустить наш тестовый сервер с кубом, который называется slicer :

После этого можно проверить работоспособность нашего куба. Для этого в строке браузера можно ввести: http://localhost:5000/cube/irbd_balance/aggregate?drilldown=year В ответ мы получим json-объект с результатом агрегации наших данных. Подробнее о формате ответа сервера можно почитать тут .

Установка cubesviewer

Когда мы настроили наш куб, можно приступить к установке сubesviewer . Для этого надо скопировать репозиторий себе на диск:

git clone https://github.com/nonsleepr/cubesviewer.git 

А потом просто переместить содержимое папки /src в нужный место.

Надо отметить, что сubesviewer является Django-приложением, поэтому для его работы необходим Django (не выше версии 1.4) , а также пакеты requests и django-piston . Т.к. данная версия Django уже устарела, то выше я привел ссылку откуда можно взять сubesviewer для версии Django 1.6.

Установка ее немного отличается от оригинала тем, что в файл конфигурации сервера slicer.ini в раздел [server] нужно добавить строку allow_cors_origin: http://localhost:8000

После этого надо настроить приложение в файле CUBESVIEWER_DIR/web/cvapp/settings.py . Указав ему настройки БД, адрес OLAP сервера (переменная CUBESVIEWER_CUBES_URL ) и адрес просмоторщика ( CUBESVIEWER_BACKEND_URL )

Осталось внести небольшой fix в dajno-piston

Теперь можно синхронизировать наше приложение с БД. Для этого из CUBESVIEWER_DIR/web/cvapp нужно выполнить:

Осталось запустить локальный сервер Django

python manage.py runserver 

Теперь осталось зайти на указанный в CUBESVIEWER_BACKEND_URL адрес через браузер. И наслаждаться готовым результатом.

Заключение

Для иллюстрации работы я взял самый простой пример. Надо отметить что для производственных проектов cubes можно развернуть например на apache или uswgi . Ну а подключить к нему сubesviewer с помощью этой статьи не составит труда.

Если тема будет интересна сообществу, то я раскрою ее в одной из будущих статей.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Читайте также:  Java what is thread local variable

Python package to access OLAP CUBE data using MDX queries

License

fb1502/cube_retriever

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This project provides an easy API for connecting to a MS Analysis Services OLAP cube / SSAS cube and executing MDX queries.

If you are using Microsoft SQL Server Management Studio to run MDX queries and want to further manipulate the data returned with Pandas or Matplotlib. Or if you wish to store the data directly into an Excel file. This package can help you.

1. Install Microsoft R Client

Microsoft R Client ships with olapR package that is required for connecting to cube.

https://docs.microsoft.com/en-us/machine-learning-server/r-client/install-on-windows 

2. Install packages required

If conda is used as envirement management tool, make sure to disable the installation of dependencies($ conda install xxx —no-deps). Otherwise, conda would install its own version of R runtime.

$ pip install -r requirements.txt 

3. Install openxlsx Package in R

Optional. Only if you want to directly store the data returned from cube to excel files.

>>> import rpy2.robjects.packages as r >>> utils = r.importr("utils") >>> package_name = "openxlsx" >>> utils.install_packages(package_name) 

4. Change the cube connection configuration in config.ini file

Change the default data_source and initial_catalog according to your own cube setup.

data_source=cubes.abc.com provider=MSOLAP initial_catalog=ABC Group 

Execute MDX queries and get the return data in the format of Pandas Dataframe.

>>> import cube_retriever as cube >>> retriever = cube.CubeRetriever() >>> retriever.conn() # Establish connection to cube >>> mdx_qry_1 = """ SELECT < [Measures].[Sales Amount], [Measures].[Tax Amount] >ON COLUMNS, < [Date].[Fiscal].[Fiscal Year].&[2002], [Date].[Fiscal].[Fiscal Year].&[2003] >ON ROWS FROM [Adventure Works] WHERE ( [Sales Territory].[Southwest] ) """ >>> mdx_qry_2 = """ SELECT < [Measures].[Unit Sales], [Measures].[Store Sales] >ON COLUMNS, < [Time].[1997], [Time].[1998] >ON ROWS FROM Sales WHERE ( [Store].[USA].[CA] ) """ >>> df_1 = retriever.mdx_query(mdx_qry_1) >>> df_2 = retriever.mdx_query(mdx_qry_2) 

Execute one line of MDX query and store the data into an excel file.

>>> import cube_retriever as cube >>> mdx_qry = """ SELECT < [Measures].[Sales Amount], [Measures].[Tax Amount] >ON COLUMNS, < [Date].[Fiscal].[Fiscal Year].&[2002], [Date].[Fiscal].[Fiscal Year].&[2003] >ON ROWS FROM [Adventure Works] WHERE ( [Sales Territory].[Southwest] ) """ >>> output_file = "abc.xlsx" >>> retriever = cube.CubeRetriever() >>> retriever.mdx_query_to_excel(mdx_qry, output_file) 

About

Python package to access OLAP CUBE data using MDX queries

Источник

Оцените статью