2010-09-23 11 views
6

Ich möchte eine Anwendung implementieren, die Unterstützung für MDX-Abfragen bietet. Zu diesem Zweck möchte ich eine der Bibliotheken von pentaho mondrian (ein Open-Source-OLTP-Server mit der MDX-Schnittstelle) verwenden, die MDX-Abfragen in SQL der Unterstreichungsdatenbank (basierend auf einer XML-Beschreibung) transformiert, leider kann ich keine Informationen welche Bibliotheken finden Ich muss - und wie man sie benutzt - in mein Projekt aufnehmen, damit MDX zu SQL Mapping funktioniert.Welche pentaho mondrian-Bibliothek in eine Java-Anwendung aufzunehmen, um MDX zu SQL zu haben

Hat jemand Erfahrung in der Wiederverwendung von mondrian Komponenten in seiner Anwendung?

+0

Hallo, konnten Sie das tun? Ich stehe auch mit dem gleichen Problem fest. – amrk7

Antwort

1

Ich empfehle das Herunterladen der neuesten 3.2.0 Build von Mondrian, es ist mit all seinen Abhängigkeiten verteilt. In der Distribution ist auch eine Efeu-Datei enthalten, die ihre Abhängigkeiten beschreibt.

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

Dokumentation kann auch auf Pentaho-Website zu finden. Viel Glück!

+0

Könnten Sie mir schreiben, welche Bibliotheken ich in meinem Projekt verwenden soll, um den Transformationsmechanismus zu verwenden? – Skarab

1

Olap4j ist jetzt Teil von Pentaho Mondrian. Vielleicht finden Sie Informationen in olap4j API? http://www.olap4j.org/

Auf dieser Seite sehe ich:

org.olap4j.mdx.parser: Parser für die MDX-Abfrage-Sprache.

olap4j ist eine offene Java-API für OLAP.

Denken Sie daran wie JDBC, aber für Zugriff auf mehrdimensionale Daten.

olap4j ist so konzipiert, ein gemeinsame API für jeden OLAP-Server sein, so können Sie es auf einer OLAP-Server und leicht zu einem anderen wechseln eine Anwendung schreiben. Und gebaut auf dieser API wird es eine wachsende Sammlung von Werkzeugen und Komponenten.

+0

-1, möchte ich "Mapping" -Funktionalität in meine Anwendung aufnehmen. Es ist deutlich in meiner Frage angegeben. – Skarab

0

Es sieht aus wie mondrian.rolap.agg.AggregationManager hat einen Code im Zusammenhang, aber es ist nicht direkt.

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 
); 

Wenn Sie die letzte Zeile folgen,

cell.drillThroughInternal (...)

Sie hier

String sql am Ende = this. getDrillThroughSQL (fields, extendedContext);

Aber ich bin nicht so sicher, wenn mondrian nur eine SQL für eine mdx erzeugt. Ich denke durch XMLA (die meisten Werkzeuge verwenden als Schnittstelle), können Sie eine Drillthrough auf einer einzelnen Achse anfordern, in der die vollständige Abfrage nicht umgeschrieben wird.

Hoffe, dass dies beantwortet.

0

Ich benutze Mondrian von hsqldb unterstützt, so dass Entwickler arbeiten gegen In-Memory-dbs, aber dann wechseln zu nicht-Mondrian OLAP-Implementierung, wenn wir in der realen Umgebung bereitstellen. Das bedeutet, dass wir etwas flinkere Entwicklung machen können, indem wir Mondrian verwenden, um MDX in sql zu konvertieren.

Ich habe einen SpringBoot/mvn-Testfall erstellt und die Seite this verwendet, um loszulegen - Kopieren des ROLAP-ddl- und Mondrian-Zuordnungsschemas. Ich habe das MondrianDaoSupport-Template aus einem der Kommentare here verwendet. Die selbe Seite hat auch Hilfe bezüglich der benötigten mvn-Abhängigkeiten (NB: Ich musste jflex 1.4.1 mit mondrian 3.2.0 verwenden, um ein NPE-Problem zu umgehen). Mit SpringBoot mit hsqldb erstelle ich das ROLAP Schema mit Daten beim Teststart. Dann injiziere ich die Schemadatei als eine Klassenpfadressource, und Datasource ist dann die authired hsqldb-Datenquelle. Es funktioniert bisher gut - es dauert nur eine Sekunde, um den Junit-Test auszuführen, der eine neue Datenbank mit Datensträngen bootet und eine MDX-Abfrage ausführt. Ich erwarte einige Probleme beim Versuch, komplexere MDX-Abfragen zu verwenden - aber mal sehen.