2010-09-23 16 views
6

Chcę zaimplementować aplikację, która zapewnia obsługę zapytań MDX. W tym celu chciałbym użyć jednej z bibliotek od pentaho mondrian (serwer OLTP o otwartym źródle z interfejsem MDX), która przekształca zapytania MDX w SQL bazy danych podkreślającej (na podstawie opisu xml), niestety nie mogę znaleźć żadnej informacji, które biblioteki Muszę uwzględnić - i jak z nich korzystać - w moim projekcie, aby działało odwzorowanie MDX na SQL.Która biblioteka mondrian pentaho zawiera w aplikacji Java mapowanie MDX do SQL

Czy ktoś ma pewne doświadczenie w powtórnym wykorzystywaniu składników mondrian w swojej aplikacji?

+0

Witam, Czy byłeś w stanie to zrobić? Utknąłem z tym samym problemem. – amrk7

Odpowiedz

1

Zalecam pobranie najnowszej wersji Mondriana 3.2.0, która jest dystrybuowana wraz ze wszystkimi zależnościami. Również w dystrybucji znajduje się plik bluszcza, który opisuje jego zależności.

Najnowsze wydania: http://forums.pentaho.com/showthread.php?77035-Mondrian-3.2-GA-Schema-Workbench-and-Agg-Designer-stable-available-on-SourceForge&p=239443#poststop

dokumentację można znaleźć na Pentaho strony internetowej, jak również. Powodzenia!

+0

Czy możesz napisać mi, które biblioteki powinny być włączone do mojego projektu, aby użyć mechanizmu transformacji? – Skarab

1

Olap4j jest obecnie częścią pentaho mondrian. Być może możesz znaleźć informacje w API olap4j? http://www.olap4j.org/

Na tej stronie widzę:

org.olap4j.mdx.parser: parser dla języka zapytań MDX.

olap4j to otwarty interfejs API języka Java dla OLAP.

Pomyśl o tym jak JDBC, ale dla dostęp do wielowymiarowych danych.

olap4j ma być wspólna API dla dowolnego serwera OLAP, więc można napisać aplikacji na jednym serwerze OLAP i łatwo przełączyć go na inny. I zbudowany na tym API , będzie rosnąca kolekcja narzędzi i komponentów .

+0

-1, Chciałbym włączyć funkcjonalność "mapowania" w mojej aplikacji. Jest wyraźnie zaznaczone w moim pytaniu. – Skarab

0

Wygląda na to, że mondrian.rolap.agg.AggregationManager ma jakiś kod związany z tym, ale nie jest prosty.

parseTree = this.olap4jConnection.getMondrianConnection().parseStatement(mdx); 
DrillThrough plan1 = (DrillThrough)parseTree; 
Query query = plan1.getQuery(); 
query.setResultStyle(ResultStyle.LIST); 
this.setQuery(query); 
CellSet cellSet = this.executeOlapQueryInternal(
    query, 
    (MondrianOlap4jCellSetMetaData) null 
); 
List coords = Collections.nCopies(cellSet.getAxes().size(), Integer.valueOf(0)); 
MondrianOlap4jCell cell = (MondrianOlap4jCell) cellSet.getCell(coords); 
ResultSet resultSet = cell.drillThroughInternal(
    plan1.getMaxRowCount(), 
    plan1.getFirstRowOrdinal(), 
    plan1.getReturnList(), 
    true, 
    (Logger)null, 
    rowCountSlot 
); 

Jeśli zastosujemy się do ostatniego wiersza,

cell.drillThroughInternal (...)

skończy się tutaj

String sql = to. getDrillThroughSQL (fields, extendedContext);

Ale nie jestem pewien, czy mondrian generuje tylko jeden SQL dla mdx. Myślę, że poprzez XMLA (którego większość narzędzi używa jako interfejsu), możesz poprosić o przewiercenie na jednej osi, w której kompletne zapytanie nie zostanie przepisane.

Mam nadzieję, że te odpowiedzi.

0

Używam Mondrian wspieranego przez hsqldb, aby programiści pracowali przeciwko dbs w pamięci, a następnie przełączali się na nie-Mondrianową implementację OLAP po wdrożeniu w rzeczywistym środowisku. Oznacza to, że możemy zrobić bardziej zwinny rozwój, w zasadzie za pomocą Mondrian do konwersji MDX do sql.

Utworzono walizkę testową SpringBoot/mvn i na początek strona this - kopiowanie schematu mapowania ROLAP ddl i Mondrian. Użyłem szablonu MondrianDaoSupport z jednego z komentarzy here. Ta sama strona ma również pewną pomoc w zależnościach mvn (nb: musiałem użyć jflex 1.4.1 z mondrian 3.2.0, aby ominąć problem NPE). Używając SpringBoot z hsqldb, tworzę schemat ROLAP z danymi o uruchomieniu testu. Następnie wstrzyknę plik schematu jako źródło klasy classpath, a Datasource to automatycznie datowane źródło danych hsqldb. Jak na razie działa dobrze - wykonanie testu Junit zajmuje tylko sekundę, a następnie ładuje nowy db z danymi i wykonuje zapytanie MDX. Spodziewam się problemów przy próbie użycia bardziej złożonych zapytań MDX - ale zobaczmy.