Exemplo n.º 1
0
 /**
  * Returns a datatable of Items SKU/name or categories and their metrics
  * If $abandonedCarts set to 1, will return items abandoned in carts. If set to 0, will return items ordered
  */
 protected function getItems($recordName, $idSite, $period, $date, $abandonedCarts)
 {
     Piwik::checkUserHasViewAccess($idSite);
     $recordNameFinal = $recordName;
     if ($abandonedCarts) {
         $recordNameFinal = Piwik_Goals::getItemRecordNameAbandonedCart($recordName);
     }
     $archive = Piwik_Archive::build($idSite, $period, $date);
     $dataTable = $archive->getDataTable($recordNameFinal);
     $dataTable->filter('Sort', array(Piwik_Archive::INDEX_ECOMMERCE_ITEM_REVENUE));
     $dataTable->queueFilter('ReplaceColumnNames');
     $ordersColumn = 'orders';
     if ($abandonedCarts) {
         $ordersColumn = 'abandoned_carts';
         $dataTable->renameColumn(Piwik_Archive::INDEX_ECOMMERCE_ORDERS, $ordersColumn);
     }
     // Average price = sum product revenue / quantity
     $dataTable->queueFilter('ColumnCallbackAddColumnQuotient', array('avg_price', 'price', $ordersColumn, Piwik_Tracker_GoalManager::REVENUE_PRECISION));
     // Average quantity = sum product quantity / abandoned carts
     $dataTable->queueFilter('ColumnCallbackAddColumnQuotient', array('avg_quantity', 'quantity', $ordersColumn, $precision = 1));
     $dataTable->queueFilter('ColumnDelete', array('price'));
     // Enrich the datatable with Product/Categories views, and conversion rates
     $customVariables = Piwik_CustomVariables_API::getInstance()->getCustomVariables($idSite, $period, $date, $segment = false, $expanded = false, $_leavePiwikCoreVariables = true);
     $mapping = array('Goals_ItemsSku' => '_pks', 'Goals_ItemsName' => '_pkn', 'Goals_ItemsCategory' => '_pkc');
     $reportToNotDefinedString = array('Goals_ItemsSku' => Piwik_Translate('General_NotDefined', Piwik_Translate('Goals_ProductSKU')), 'Goals_ItemsName' => Piwik_Translate('General_NotDefined', Piwik_Translate('Goals_ProductName')), 'Goals_ItemsCategory' => Piwik_Translate('General_NotDefined', Piwik_Translate('Goals_ProductCategory')));
     $notDefinedStringPretty = $reportToNotDefinedString[$recordName];
     // Handle case where date=last30&period=day
     if ($customVariables instanceof Piwik_DataTable_Array) {
         $customVariableDatatables = $customVariables->getArray();
         $dataTables = $dataTable->getArray();
         foreach ($customVariableDatatables as $key => $customVariableTableForDate) {
             $dataTableForDate = isset($dataTables[$key]) ? $dataTables[$key] : new Piwik_DataTable();
             // we do not enter the IF
             // if case idSite=1,3 AND period=day&date=datefrom,dateto,
             if (isset($dataTable->metadata[$key]['period'])) {
                 $dateRewrite = $dataTable->metadata[$key]['period']->getDateStart()->toString();
                 $row = $customVariableTableForDate->getRowFromLabel($mapping[$recordName]);
                 if ($row) {
                     $idSubtable = $row->getIdSubDataTable();
                     $this->enrichItemsDataTableWithItemsViewMetrics($dataTableForDate, $idSite, $period, $dateRewrite, $idSubtable);
                 }
                 $dataTable->addTable($dataTableForDate, $key);
             }
             $this->renameNotDefinedRow($dataTableForDate, $notDefinedStringPretty);
         }
     } elseif ($customVariables instanceof Piwik_DataTable) {
         $row = $customVariables->getRowFromLabel($mapping[$recordName]);
         if ($row) {
             $idSubtable = $row->getIdSubDataTable();
             $this->enrichItemsDataTableWithItemsViewMetrics($dataTable, $idSite, $period, $date, $idSubtable);
         }
         $this->renameNotDefinedRow($dataTable, $notDefinedStringPretty);
     }
     // Product conversion rate = orders / visits
     $dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array('conversion_rate', $ordersColumn, 'nb_visits', Piwik_Tracker_GoalManager::REVENUE_PRECISION));
     return $dataTable;
 }
Exemplo n.º 2
0
	/**
	 * Returns a datatable of Items SKU/name or categories and their metrics
	 * If $abandonedCarts set to 1, will return items abandoned in carts. If set to 0, will return items ordered
	 */
	protected function getItems($recordName, $idSite, $period, $date, $abandonedCarts )
	{
		Piwik::checkUserHasViewAccess( $idSite );
		$recordNameFinal = $recordName;
		if($abandonedCarts)
		{
			$recordNameFinal = Piwik_Goals::getItemRecordNameAbandonedCart($recordName);
		}
		$archive = Piwik_Archive::build($idSite, $period, $date );
		$dataTable = $archive->getDataTable($recordNameFinal);
		$dataTable->filter('Sort', array(Piwik_Archive::INDEX_ECOMMERCE_ITEM_REVENUE));
		$dataTable->queueFilter('ReplaceColumnNames');
		
		$ordersColumn = 'orders';
		if($abandonedCarts)
		{
			$ordersColumn = 'abandoned_carts';
			$dataTable->renameColumn(Piwik_Archive::INDEX_ECOMMERCE_ORDERS, $ordersColumn);
		}
		// Average price = sum product revenue / quantity
		$dataTable->queueFilter('ColumnCallbackAddColumnQuotient', array('avg_price', 'price', $ordersColumn, Piwik_Tracker_GoalManager::REVENUE_PRECISION));

		// Average quantity = sum product quantity / abandoned carts 
		$dataTable->queueFilter('ColumnCallbackAddColumnQuotient', array('avg_quantity', 'quantity', $ordersColumn, $precision = 1));
		$dataTable->queueFilter('ColumnDelete', array('price'));
		
		// Enrich the datatable with Product/Categories views, and conversion rates
		$mapping = array(
			'Goals_ItemsSku' => '_pks',
			'Goals_ItemsName' => '_pkn',
			'Goals_ItemsCategory' => '_pkc',
		);
		$customVariables = Piwik_CustomVariables_API::getInstance()->getCustomVariables($idSite, $period, $date, $segment = false, $expanded = false, $_leavePiwikCoreVariables = true);
		if($customVariables instanceof Piwik_DataTable
			&& $row = $customVariables->getRowFromLabel($mapping[$recordName]))
		{
			// Request views for all products/categories
			$idSubtable = $row->getIdSubDataTable();
			$ecommerceViews = Piwik_CustomVariables_API::getInstance()->getCustomVariablesValuesFromNameId($idSite, $period, $date, $idSubtable);
			
			$dataTable->addDataTable($ecommerceViews);
			// Product conversion rate = orders / visits 
			$dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array('conversion_rate', $ordersColumn, 'nb_visits', Piwik_Tracker_GoalManager::REVENUE_PRECISION));
		}
		
		return $dataTable;
	}