diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php
index 05d62e4cc8b9bbf11bf58f01799722a4938231df..b8a2d8616fb840761f4da6244227b424b78ff374 100644
--- a/core/ViewDataTable.php
+++ b/core/ViewDataTable.php
@@ -1110,9 +1110,15 @@ class ViewDataTable
         $this->overrideViewProperties();
 
         try {
+
+            $visualization->beforeLoadDataTable();
+
             $this->loadDataTableFromAPI();
             $this->postDataTableLoadedFromAPI();
             $this->executeAfterDataLoadedCallbacks();
+
+            $visualization->afterLoadDataTable();
+
         } catch (NoAccessException $e) {
             throw $e;
         } catch (\Exception $e) {
diff --git a/core/ViewDataTable/Visualization.php b/core/ViewDataTable/Visualization.php
index 0eb4543d22ac100ca393ee0ef126a5e7a84f2957..2920638979e7464b89e1b4ec93faf6e44f300621 100644
--- a/core/ViewDataTable/Visualization.php
+++ b/core/ViewDataTable/Visualization.php
@@ -14,6 +14,7 @@ namespace Piwik\ViewDataTable;
 use Piwik\DataTable;
 use Piwik\Piwik;
 use Piwik\View;
+use Piwik\ViewDataTable;
 
 /**
  * Base class for all DataTable visualizations. Different visualizations are used to
@@ -29,10 +30,16 @@ abstract class Visualization extends View
 
     protected $templateFile = '';
 
+    /**
+     * @var ViewDataTable
+     */
+    protected $viewDataTable;
+
     public function __construct($view)
     {
         parent::__construct($this->templateFile);
 
+        $this->viewDataTable = $view;
         $this->init($view);
     }
 
@@ -41,6 +48,16 @@ abstract class Visualization extends View
         // do your stuff here, do not overwrite constructor
     }
 
+    public function beforeLoadDataTable()
+    {
+
+    }
+
+    public function afterLoadDataTable()
+    {
+
+    }
+
     /**
      * Default implementation of getDefaultPropertyValues static function.
      *