Connect to SSAS OLAP Cube Using Python
Looking for resources to learn how to connect and fetch data from SSAS OLAP Cube.
Found I can do it with XMLA lib, but found no resources to explore and learn.
1 Answer 1
If you want to use python to connect SSAS cube, you could refer to SSAS via Python and olap.xmla for more details.
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.11.43304
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Подключение к кубу анализа SQL Server с помощью Python (Anaconda)
Я использую Python для автоматизации некоторых отчетов, но не могу подключиться к кубу SSAS. У меня Windows 7 с Anaconda 4.4, и я не могу установить какие-либо библиотеки, кроме тех, которые включены в Anaconda.
Я использовал pyodbc+pandas для подключения к базам данных SQL Server и извлечения данных с помощью SQL-запросов, и теперь цель состоит в том, чтобы сделать что-то подобное в кубе SSAS, используя запрос MDX для извлечения данных, но я не могу получить успешное соединение .
Эта первая строка подключения очень похожа на строки, которые я использовал для подключения к базам данных SQL Server, но она дает мне ошибку аутентификации. Я без проблем могу получить доступ к кубу с помощью SQL Server Management Studio, поэтому я знаю, что у моих учетных данных Windows есть доступ.
Когда я попытался воспроизвести попытки Question1 и Question2 Я получил другую ошибку:
Любая помощь/руководство будет принята с благодарностью. Мой опыт работы с кубами SSAS минимален, поэтому возможно, что я нахожусь на совершенно неправильном пути для этой задачи, и даже если проблема с подключением будет решена, будет другая проблема с загрузкой данных в pandas и т. д.
Python как подключиться к кубами
Конечно, лучшим языком для анализа данных является Python, хотя Hadoop написан на JAVA, Python также может хорошо его контролировать. Новая книга О’Рейли "Hadoop с Python" объясняет, как использовать Python Hadoop. В книге также кратко представлены некоторые базовые концепции Hadoop, поэтому в примечаниях содержатся некоторые ключевые моменты знаний и базовый метод Python для работы с Hadoop.Ссылка на книгуВы можете скачать его бесплатно, заполнив свою личную информацию справа.
Глава 1 HDFS
1.1 Введение
HDFS состоит из двух основных процессов: NameNode и DataNode. Часто кластер HDFS состоит из выделенного сервера, на котором выполняется NameNode, и тысяч машин, на которых выполняется DataNode.
NameNode
В основном хранит имена файлов, права доступа к файлам, расположение каждого блока каждого файла.
Вторичный NameNode хранит резервную копию для предотвращения зависания NameNode.
DataNode
Храните блоки, и NameNode скопирует информацию сразу после зависания.

1.2 Командная строка HDFS взаимодействия
1.3 Snakebite реализует взаимодействие между Python и HDFS.
Snakebite — это библиотека Python, которая может работать с HDFS двумя способами. Первый — через командную строку, а второй — через скрипт Python. Официальная документация находится наВот。
Сначала установите Snakebite, в настоящее время поддерживает только python2
Первое. CLI взаимодействие
Первый шаг — настроить его. Простой способ — создать
/.snakebiterc И напишите следующую информацию.
Обратите внимание, что количество хостов, портов и наменодов должно быть изменено в соответствии с реальной ситуацией.
Тогда вы можете пройти snakebite option Пришло время для операции.
по сравнению с hdfs bfs -option Опущено — красивее и удобнее.
Второе. Программное взаимодействие
Взаимодействие с программой определенно более практично. После того, как скрипт на python завершает настройку и работу, это больше не мечта. Давайте попробуем несколько основных функций одновременно.
Сначала посмотрите на команду ls
Первый проход Client(‘localhost’, 9000) Установите соединение. Тогда каждая операция является методом класса Client. Обратите внимание, что для эффективности каждый метод возвращает Iterator. Таким образом, чтобы завершить все операции, вы должны записать в цикл for и записать возвращаемую информацию одновременно.
Некоторые другие общие операции перечислены ниже. Обратите внимание, что каждый метод возвращает Python Iterator:
Глава 2 MapReduce
2.1 Поток данных
Этап 1 Карта
Функция картографированияПринять ввод пары ключ-значение и вывести пару ключ-значение.
Второй этап Shuffle and Sort
Процесс переноса промежуточного результата Mapper в Reducer называется Shuffling.
Перемешивание состоит изФункция секционированияПосле завершения функция Partitioner получает вывод ключа от Mapper и количество редукторов и выводит соответствующий номер редуктора.
Перемешивание гарантирует, что данные одного и того же ключа поступают в один и тот же редуктор, а разделитель по умолчанию отображается с помощью метода хэширования.
Сортировка будет выполнена до того, как редуктор получит данные.
Третий этап Уменьшить
Функция редуктораПолучите поток данных в форме Iterator и оперируйте данными с тем же ключом, чтобы получить выходные данные.

2.2 Hadoop Streaming
Hadoop Streaming предоставляет набор инструментов, который удобен для программирования MapReduce и может быть использован для реализации Mapper и Reducer на основе некоторых исполняемых команд, языков сценариев или других языков программирования, чтобы в полной мере воспользоваться преимуществами и возможностями платформы параллельных вычислений Hadoop для обработки больших данных. ,
Принцип работы
Для Hadoop и Mapper, и Reducer считывают со стандартного ввода и выводят на стандартный вывод
Итак, Hadoop Streaming должен сделать:
- Читайте каждую строку файла по очереди из стандартного ввода
- Исполнительная функция
- Преобразовать стандартный вывод в пары ключ-значение или пары ключ-ноль
Пример Python
Этот пример представляет собой версию WordCount на Python, в которой реализованы соответственно маппер и редуктор, которые оба читают строку из stdin, обрабатывают ее и выводят результат в stdout.
Во-первых, первая строка программы указывает путь к Python, используйте #!/usr/bin/env python Может удовлетворить большинство потребностей, поэтому вы можете работать напрямую с ./mapper.py
Функция mapper читает каждую строку stdin по очереди и выводит каждую пару вхождений слово и ключ-значение, где Value всегда равно 1.
Функция Reducer также читает каждую строку из стандартного ввода, а затем подсчитывает количество вхождений каждого слова. Обратите внимание, что вход, полученный редуктором, отсортирован!
Чтобы сделать файл исполняемым напрямую, т.е. исполняемым, запустите эту строку
Для того, чтобы проверить удобство использования карт и редуктора, вы можете использовать эту строку команды linux, не так много объяснений.
Следующее, что нужно сделать, это сделать, чтобы hadoop завершил статистику по частоте слов. В моей системе такая команда, конкретная реализация варьируется от человека к человеку.
Фактически, мы используем пакет jar, такой как потоковая передача hadoop, чтобы указать функции преобразователя и преобразователя как сценарий, при условии, что преобразователь и преобразователь могут получать стандартный ввод и выводить результаты в стандартном сценарии вывода python, Неважно, что такое оболочка, R и т. Д. Обратите внимание, что пути к входному и выходному файлам относятся к пути HDFS, и входной файл должен быть помещен заранее.
Наш входной файл input.txt такой
Следующий вывод получен в / user / hduser / output / part-00000 HDFS. Как вы видите, мы добились успеха.
2.3 mrjob реализует Python для управления потоковой передачей Hadoop
mrjob — это библиотека Python, которая реализует операции MapReduce для Hadoop. Он инкапсулирует потоковую передачу Hadoop, что позволяет людям реализовывать вычисления Hadoop с использованием полных скриптов Python. Он даже позволяет людям выполнять тесты без Hadoop и позволяет пользователям создавать картографы и редукторы в классе. Это артефакт!
монтаж
Одним словом, пипс все еще так от руки dyis
Код Python
Это нормально? Нужно ли всем нам настраивать среду Hadoop? Ответ — нет. Это сила mrjob, которая помогает вам моделировать метод расчета MR в Hadoop.
Детальнее
Картограф легко понять, не так много, чтобы сказать. Кортежи, которые получают ключ и значение и выводят ключ и значение, часто по умолчанию являются ключом.
Объединитель здесь не определен, фактически, combiner () — это процесс, выполняющийся между преобразователем и преобразователем.
Определение в книге выглядит следующим образом: входные данные комбинатора — это ключ, который был получен преобразователем, и значение, которое является генератором, который возвращает все значения, полученные одним преобразователем, который соответствует ключ: объединитель выдает кортежи (output_key, output_value) в качестве выходных данных.
Проще говоря, объединитель объединяет одно и то же значение ключа в результате отображения, генерирует генератор, чтобы использовать его в качестве нового значения ключа, и передает его редуктору.
Редуктор также получает (ключ, значение). Обратите внимание, что значение здесь уже является генератором. Вывод (ключ, значение).
больше вариантов
-r inline : Опция по умолчанию, однопоточный Python запускается
-r local : мульти-прогресс
-r hadoop : Запустить на Hadoop
Пробовал это -r hadoop Я обнаружил, что произошла ошибка. На данный момент меня это не волнует. По крайней мере, это дало нам метод для тестирования без среды Hadoop.
Организация OLAP куба средствами Python
Добрый день, уважаемые читатели.
Сегодня я расскажу вам о том, как можно построить простенькую систему анализа данных на Python. В этом мне помогут framework cubes и пакет cubesviewer.
Сubes представляет собой framework’ом для работы с многомерными данными с помощью Python. Кроме того он включает в себя OLAP HTTP-сервер для упрощенной разработки приложений отчетности и общего просмотра данных.
Сubesviewer представляет собой web-интерфейс для работы с вышеуказанным сервером.
Установка и настройка cubes
Для начала надо установить библиотеки, необходимые для работы пакета:
Далее устанавливаем сам пакет cubes:
Как показала практика, лучше использовать версию (1.0alpha2) из текущего репозитория.
Доп настройки под windows
Если вы планируете работать под Windows необходимо в файле
\Lib\site-packages\dateutil\tz.py заменить 40 строку:
Затем, вне зависимости от платформы на которой вы работаете, нужно добавить следующий fix для корректной работы json-парсера. Вносить его надо в
\Lib\site-packages\cubes-1.0alpha-py2.7.egg\cubes\metadata.py начиная с 90 строки:
Описание настройки куба и процесс его разворачивания
- slicer.ini — файл настроек http сервера нашего куба
- model.json — файл с описание модели куба
- [workspace] – конфигурация рабочего места
- [server] — параметры сервера (адрес, порт и тд.)
- [models] — список моделей для загрузки
- [datastore] или [store] – параметры хранилища данных
- [translations] — настройки локализации для модели.
- name – имя модели
- label – метка
- description – описание модели
- locale – локаль для модели (если задана локализация)
- cubes – список метаданных кубов
- dimensions – список метаданных измерений
- public_dimensions – список доступных измерений. По умолчанию все измерения доступны.
- category. Отображаемое имя «Category», поля «category», «category_label»
- subcategory. Отображаемое имя «Sub-category», поля «subcategory», «subcategory_label»
- line_item. Отображаемое имя «Line Item», поле «line_item»
Теперь осталось только запустить наш тестовый сервер с кубом, который называется slicer:
После этого можно проверить работоспособность нашего куба. Для этого в строке браузера можно ввести:
localhost:5000/cube/irbd_balance/aggregate?drilldown=year
В ответ мы получим json-объект с результатом агрегации наших данных. Подробнее о формате ответа сервера можно почитать тут.
Установка cubesviewer
Когда мы настроили наш куб, можно приступить к установке сubesviewer. Для этого надо скопировать репозиторий себе на диск:
А потом просто переместить содержимое папки /src в нужный место.
Надо отметить, что сubesviewer является Django-приложением, поэтому для его работы необходим Django (не выше версии 1.4), а также пакеты requests и django-piston. Т.к. данная версия Django уже устарела, то выше я привел ссылку откуда можно взять сubesviewer для версии Django 1.6.
Установка ее немного отличается от оригинала тем, что в файл конфигурации сервера slicer.ini в раздел [server] нужно добавить строку allow_cors_origin: localhost:8000
После этого надо настроить приложение в файле /web/cvapp/settings.py. Указав ему настройки БД, адрес OLAP сервера (переменная CUBESVIEWER_CUBES_URL ) и адрес просмоторщика ( CUBESVIEWER_BACKEND_URL )
Осталось внести небольшой fix в dajno-piston
Теперь можно синхронизировать наше приложение с БД. Для этого из /web/cvapp нужно выполнить:
Осталось запустить локальный сервер Django
Теперь осталось зайти на указанный в CUBESVIEWER_BACKEND_URL адрес через браузер. И наслаждаться готовым результатом. 
API OLAP служб MS Analysis Services для Python [закрыто]
Я ищу способ подключиться к кубу OLAP MS Analysis Services, выполнить запросы многомерных выражений и передать результаты в Python. Другими словами, именно то, что делает Excel. Есть ли в Python решение, которое позволило бы мне это сделать?
Кто-то с подобным вопросом указал на ORM Django. Как бы мне ни нравился фреймворк, это не то, что я ищу. Я также не ищу способ извлекать строки и агрегировать их — в первую очередь для этого предназначены службы Analysis Services.
Вы пробовали обернуть adomd.dll? Я как раз собирался попробовать. — user376636
3 ответы
Я совершенно не разбираюсь в Python, но если он может вызывать библиотеки DLL, он должен иметь возможность использовать объект ADOMD от Microsoft. Это лучший вариант, который я могу придумать.
Вы можете посмотреть на веб-компоненты Office (OWC), поскольку в них есть элемент управления OLAP, который можно встроить в веб-страницу. Я думаю, вы можете передать ему MDX, но, возможно, вы хотите, чтобы Python тоже видел результаты, а я не думаю, что это позволяет.
В противном случае, возможно, вы сможете создать свой собственный «прокси» на другом языке. Эта программа / веб-страница может принимать многомерные выражения и возвращать вам XML с отображением результатов. Тогда Python мог бы использовать этот XML.
ответ дан 30 апр.

Насколько я знаю, он может вызывать библиотеки DLL. Проблема в том, что они так плохо документированы. Собственно то же самое относится и к протоколу связи клиент-сервер OLAP. Я бы сам реализовал клиента на Python (или попробовал), но нигде не могу найти. Есть указатели? — ктдрв
Найдите пример Python, показывающий, как вызвать DLL. Затем установите «Клиентские компоненты» MS SQL Server на свою машину разработчика и попробуйте изменить пример Python для вызова adomd.dll и использовать документацию Microsoft, чтобы сообщить вам, какие классы / объекты / свойства использовать. В VBScript мы бы сделали Server.CreateObject («ADOMD.Cellset») — Магнус Смит
Это легко сделать с помощью pythonnet:
Вы загружаете Microsoft.AnalysisServices.dll, поставляемый с SQL Server 2005 и 2008, или получаете распространяемый пакет здесь:
Затем вы можете загрузить его и использовать. Вот пример, который просто обрабатывает кубики:
atoti: interactive visualization in Python notebooks
Python notebooks are the best tool for data scientists, until they’re not. Streamlined, simple to use and fairly powerful when it comes to organizing and analyzing data, they nevertheless have several limitations:
- Visualization libraries don’t really let you explore the data interactively
- Pandas is great for data wrangling, but when data volumes get too big you have to start over in Spark
- It doesn’t natively support multi-dimensional analysis (pivot tables, multi-level hierarchies, comparing scenarios…)
My team and I are part of a Datalab at our company and those limitations get in our way all the time. We use other solutions that support those features (BI applications, Databricks, OLAP cubes…), but they don’t integrate well with each other and they don’t have the flexibility and ease-of-use of Python. So we circled back to the notebooks and looked for ways to improve them.
Integrating an OLAP Cube into Python Notebooks
Drawing from our experience building analytics applications, we decided against building specific widgets just for visualization or to work around data volume limitations. Instead we took a step back and tried to figure out what was missing from Python notebooks to make analysis at the same time easier, more powerful and more collaborative, starting with our own use in the Datalab.
Ultimately we decided that the best way forward was to try to integrate a full OLAP cube into Python notebooks. The benefits of this approach as we saw it were as follows:
- It enables multi-dimensional analysis and visualizing multiple scenarios side-by-side
- Connected to a dashboarding suite, it allows users to have fully dynamic visualizations
- The resulting dashboards can be shared easily with other users for collaboration and prototyping
In addition, using the right OLAP technology would also let us overcome the limitations of data volumes.
Bridging Python and Java
We decided to go ahead and start with the OLAP technology we knew best, that we were confident could fulfill all those goals : our company ActiveViam’s aggregation engine, which combines transactional and analytical processing to handle ever-changing data in-memory, and our visualization interface. The aggregation engine is written in Java, a language that allows it to leverage hardware capabilities to their fullest but it requires some advanced training to use it properly. The goal was to integrate these technologies into a Python notebook as seamlessly as possible, without sacrificing any of its capabilities nor any of the notebook’s ease-of-use.
From this base, we built a new product called atoti that takes the form of a Python library that users download and install like any other, coupled with a JupyterLab extension written in TypeScript. here’s how it works in four steps:
- Get some data from a file, a database or any Pandas dataframe

- Create a cube
- Start exploring interactively
- Create and share a full dashboard
The changes to the notebook are immediate:
- Simple data-viz widgets such as pivot tables, tabular views, charts, etc. are displayed right there in the notebook (available in JupyterLab only)
- A full dashboarding suite opens alongside the notebook and responds dynamically to your Python code. It gives you dynamic visualizations and it’s very easy to share with other people even if they don’t use notebooks themselves
- Multi-dimensional analysis and ‘What-If’ scenarios are fully enabled
- Data volume limitations depend only on the hardware used and how much memory and CPU cores it has. With cloud-based services, users can load up to Terabytes of data.
You can also do much more such as joining multiple data sets together or defining complex aggregations using the Python API that will then become available from the visual environment.
We’ve written a documentation (link above) outlying all those options as well as the handful of Python commands specific to the library. The library was really designed to be accessible to all Python notebook users, from amateurs to experts.