Example #1
0
 /**
  * @brief Executes an MDX Query via SOAP XMLA
  *
  * @param string $mdx - The MDX Query String to execute
  *
  * @return XMLACellSet An XMLA Cell Set, which implements ICellSet
  */
 public function executeOlapQuery($mdx)
 {
     $logPerformance = $this->logPerformance;
     if ($this->logger) {
         if ($logPerformance) {
             $startTime = XMLAUtil::microtimeFloat();
         }
         $this->logger->debug(__CLASS__, '[MDX QUERY]' . PHP_EOL . $mdx);
     }
     $this->statement = $mdx;
     $catalog = $this->con->getCatalog();
     $dataSourceInfo = $this->con->getDataSourceInfo();
     $queryXML = "\n         <Execute xmlns=\"urn:schemas-microsoft-com:xml-analysis\">\n            <Command>\n               <Statement>\n                  <![CDATA[\n                     {$mdx}\n                  ]]>\n               </Statement>\n            </Command>\n            <Properties>\n               <PropertyList>\n                  <Catalog>{$catalog}</Catalog>\n                  <DataSourceInfo>{$dataSourceInfo}</DataSourceInfo>\n                  <Format>Multidimensional</Format>\n                  <AxisFormat>TupleFormat</AxisFormat>\n               </PropertyList>\n            </Properties>\n         </Execute>\n      ";
     // submit the MDX query
     if ($logPerformance) {
         $submitStartTime = XMLAUtil::microtimeFloat();
     }
     $dom = $this->con->submit($queryXML);
     if ($logPerformance) {
         $submitEndTime = XMLAUtil::microtimeFloat() - $submitStartTime;
     }
     // populate the MDX query results into a cellset
     if ($logPerformance) {
         $populateStartTime = XMLAUtil::microtimeFloat();
     }
     if (empty($this->cellSet)) {
         $this->cellSet = new XMLACellSet($this);
     }
     $this->cellSet->populate($dom);
     if ($logPerformance) {
         $populateEndTime = XMLAUtil::microtimeFloat() - $populateStartTime;
     }
     // log timing of method calls for performance tuning
     if ($logPerformance && $this->logger) {
         $this->logger->debug(__CLASS__, "[MDX SUBMIT TIME] " . $submitEndTime);
         $this->logger->debug(__CLASS__, "[MDX POPULATE TIME] " . $populateEndTime);
         $this->logger->debug(__CLASS__, "[MDX TOTAL TIME] " . (DateTime::microtimeFloat() - $startTime));
     }
     return $this->cellSet;
 }