You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by zh...@apache.org on 2016/10/24 06:55:20 UTC

[1/2] kylin git commit: KYLIN 1321 Add derived checkbox for lookup table columns on

Repository: kylin
Updated Branches:
  refs/heads/master 2651640b7 -> 2814f612a


KYLIN 1321 Add derived checkbox for lookup table columns on

Signed-off-by: Jason <ji...@163.com>


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/5a448685
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/5a448685
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/5a448685

Branch: refs/heads/master
Commit: 5a4486851523117e2944e57cd805d8c2d087078c
Parents: 2651640
Author: chenzhx <34...@qq.com>
Authored: Mon Oct 24 10:49:05 2016 +0800
Committer: Jason <ji...@163.com>
Committed: Mon Oct 24 14:46:24 2016 +0800

----------------------------------------------------------------------
 webapp/app/js/controllers/cubeDimensions.js     | 133 ++++++++------
 .../app/partials/cubeDesigner/dimensions.html   | 173 ++++++++-----------
 2 files changed, 158 insertions(+), 148 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/5a448685/webapp/app/js/controllers/cubeDimensions.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeDimensions.js b/webapp/app/js/controllers/cubeDimensions.js
index ab07451..5525fe4 100644
--- a/webapp/app/js/controllers/cubeDimensions.js
+++ b/webapp/app/js/controllers/cubeDimensions.js
@@ -18,7 +18,7 @@
 
 'use strict';
 
-KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cubesManager) {
+KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cubesManager,SweetAlert) {
 
     $scope.cubeManager = cubesManager;
     // Available columns list derived from cube data model.
@@ -74,7 +74,8 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
             cols[i].isLookup = false;
 
             // Default not selected and not disabled.
-            factSelectAvailable[cols[i].name] = {selected: false, disabled: false};
+            factSelectAvailable[cols[i].name] = {name:cols[i].name ,selected: false, disabled: false};
+
         }
 
         $scope.availableColumns[factTable] = cols;
@@ -95,7 +96,7 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
                 cols2[k].isLookup = true;
 
                 // Default not selected and not disabled.
-                lookupSelectAvailable[cols2[k].name] = {selected: false, disabled: false};
+                lookupSelectAvailable[cols2[k].name] = {name:cols2[k].table+"_derived",selected: false, disabled: false};
             }
 
             $scope.availableColumns[lookups[j].table] = cols2;
@@ -112,8 +113,12 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
             var cols = dimCols(dim);
 
             angular.forEach(cols, function (colName) {
-                $scope.selectedColumns[dim.table][colName] = {selected: true, disabled: true};
-            });
+              if(dim.derived){
+                 $scope.selectedColumns[dim.table][colName] = {name:dim.name, selected: true, disabled: true,normal:"false"};
+              }else{
+                 $scope.selectedColumns[dim.table][colName] = {name:dim.name, selected: true, disabled: true,normal:"true"};
+              }
+           });
         });
     };
 
@@ -130,14 +135,14 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
     };
 
     // Init the dimension, dimension name default as the column key. TODO new cube schema change.
-    var Dimension = function (table, selectedCols, dimType) {
+    var Dimension = function (name, table, selectedCols, dimType) {
         var origin = {name: '', table: table,derived:null,column:null};
 
         switch (dimType) {
             case 'normal':
                 // Default name as 1st column name.
                 if (table && selectedCols.length) {
-                    origin.name = table + '.' + selectedCols[0];
+                    origin.name = name;
                 }
 
                 origin.column = selectedCols[0];
@@ -145,20 +150,11 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
 
             case 'derived':
                 if (table && selectedCols.length) {
-                    origin.name = table + '_derived';
+                    origin.name = name;
                 }
 
                 origin.derived = selectedCols;
                 break;
-
-            //case 'hierarchy':
-            //    if (table && selectedCols.length) {
-            //        origin.name = table + '_hierarchy';
-            //    }
-            //
-            //    origin.hierarchy = true;
-            //    origin.column = selectedCols;
-            //    break;
         }
 
         return origin;
@@ -226,26 +222,6 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
 
         $scope.checkDimension = function(){
             var errors = [];
-            // null validate
-
-            //if($scope.dimType[0]=="hierarchy"){
-            //    if($scope.newDimension.column.length<2){
-            //        errors.push("Please define at least 2 hierarchy columns.");
-            //    }else{
-            //        for(var i = 0;i<$scope.newDimension.column.length;i++){
-            //            if($scope.newDimension.column[i]===""){
-            //                errors.push("Hierarchy value can't be null.");
-            //                break;
-            //            }
-            //        }
-            //        var _columns = angular.copy($scope.newDimension.column).sort();
-            //        for(var i = 0;i<_columns.length-1;i++){
-            //            if(_columns[i]==_columns[i+1]&&_columns[i]!==""){
-            //                errors.push("Duplicate column "+_columns[i]+".");
-            //            }
-            //        }
-            //    }
-            //}
 
             if($scope.dimType[0]=="derived"){
                 if(!$scope.newDimension.derived.length){
@@ -323,7 +299,11 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
 
         var cols = dimCols(dim);
         angular.forEach(cols, function (colName) {
-            $scope.selectedColumns[dim.table][colName] = {selected: false, disabled: false};
+            if(dim.table==$scope.metaModel.model.fact_table){
+               $scope.selectedColumns[dim.table][colName] = {name:colName,selected: false, disabled: false};
+            }else{
+               $scope.selectedColumns[dim.table][colName] = {name:dim.table+"_derived",selected: false, disabled: false};
+            }
         });
     };
 
@@ -370,12 +350,18 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
 
         angular.forEach($scope.selectedColumns, function (value, table) {
             angular.forEach(value, function (status, colName) {
-                if (status.selected && !status.disabled) {
+                if (status.selected) {
                     if (!selectedCols[table]) {
                         selectedCols[table] = [];
                     }
 
-                    selectedCols[table].push(colName);
+                    var cols={
+                         name:status.name,
+                         col:colName,
+                         normal:status.normal,
+                         selected:status.selected
+                    }
+                    selectedCols[table].push(cols);
                 }
             });
         });
@@ -386,30 +372,79 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
     // Auto generate dimensions.
     $scope.autoGenDims = function () {
         var selectedCols = $scope.getSelectedCols();
-
+        dimList=[];
         angular.forEach(selectedCols, function (cols, table) {
             if ($scope.metaModel.model.fact_table == table) {
                 // Fact table: for each selected column, create one normal dimension.
                 for (var i = 0; i < cols.length; i++) {
-                    dimList.push(Dimension(table, [cols[i]], 'normal'));
+                    dimList.push(Dimension(cols[i].name, table, [cols[i].col], 'normal'));
                 }
             } else {
                 // Per lookup table, create one derived dimension for all its selected columns;
-                if (cols.length) {
-                    dimList.push(Dimension(table, cols, 'derived'));
+                for (var i = 0; i < cols.length; i++) {
+                    if(cols[i].normal=="true"){
+                       dimList.push(Dimension(cols[i].name, table, [cols[i].col], 'normal'));
+                    }else{
+                        dimList.push(Dimension(cols[i].name, table, [cols[i].col], 'derived'));
+                    }
                 }
             }
         });
+        $scope.cubeMetaFrame.dimensions = dimList;
+
     };
 
+    $scope.autoChange= function(table,name){
+        if($scope.selectedColumns[table][name].selected==false){
+             $scope.selectedColumns[table][name].normal=null;
+             if(table==$scope.metaModel.model.fact_table){
+                 $scope.selectedColumns[table][name].name=name;
+             }else{
+                 $scope.selectedColumns[table][name].name=table+"_derived";
+             }
+        }else{
+             if($scope.metaModel.model.fact_table!=table){
+                 $scope.selectedColumns[table][name].normal="false";
+             }
+        }
+
+    }
+    $scope.checkAutoDimension=function(){
+        var nameNull=false;
+        angular.forEach($scope.selectedColumns, function (value, table) {
+             angular.forEach(value, function (status, colName) {
+                  if (status.selected) {
+                      if(status.name==""){
+                           SweetAlert.swal('', "The name is requested.", 'warning');
+                           nameNull=true;
+                       }
+
+                  }
+             });
+        });
+        if(nameNull==true){
+             return false;
+        }else{
+             return true;
+        }
+    }
+
+    $scope.addNewDimension = function(newDimension){
+           if(newDimension.derived==null){
+             newDimension.derived=[];
+           }
+           newDimension.derived.push('');
+    }
+
+
     // Just reset the selected status of columns.
     $scope.resetGenDims = function () {
         var selectedCols = $scope.getSelectedCols();
-
-        angular.forEach(selectedCols, function (cols, table) {
-            for (var i = 0; i < cols.length; i++) {
-                $scope.selectedColumns[table][cols[i]].selected = false;
-            }
+        angular.forEach($scope.selectedColumns, function (value, table) {
+            angular.forEach(value, function (status, colName) {
+                 status.selected=false;
+                 status.normal=null;
+            });
         });
     };
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/5a448685/webapp/app/partials/cubeDesigner/dimensions.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubeDesigner/dimensions.html b/webapp/app/partials/cubeDesigner/dimensions.html
index a0a1506..4d48167 100644
--- a/webapp/app/partials/cubeDesigner/dimensions.html
+++ b/webapp/app/partials/cubeDesigner/dimensions.html
@@ -186,52 +186,6 @@
                             </div>
                         </div>
                     </div>
-
-                    <!--Hierarchy Dimension-->
-                    <div class="form-group" ng-if="dimType.indexOf('hierarchy') >= 0">
-                        <div class="row">
-                            <div class="col-sm-6 col-sm-offset-3">
-                                <div ui-sortable="{containment: 'parent', placeholder: 'hierarchy-item-placeholder', forcePlaceholderSize: true, opacity: 0.8}"
-                                     ng-model="newDimension.column" class="hierarchy-container">
-                                    <div ng-repeat="hierarchyIndex in [] | range: newDimension.column.length" class="hierarchy-item">
-                                        <div class="row">
-                                            <div class="col-xs-2">
-                                                <span class="badge">{{$index + 1}}</span>
-                                            </div>
-                                            <div class="col-xs-8">
-                                                <select chosen style="width: 100%"
-                                                        data-placeholder="Dimension Hierarchy Column"
-                                                        ng-model="newDimension.column[$index]"
-                                                        ng-options="columns.name as columns.name for columns in getDimColumnsByTable(newDimension.table)" >
-                                                    <option value="">-- Select Column --</option>
-                                                </select>
-                                            </div>
-                                            <div class="col-xs-2">
-                                                <button type="button" class="pull-right btn btn-xs btn-danger" style="cursor: pointer " tooltip="Delete"
-                                                        ng-click="newDimension.column.splice($index, 1);">
-                                                    <i class="fa fa-trash-o"></i>
-                                                </button>
-                                            </div>
-                                        </div>
-                                    </div>
-                                </div>
-
-                                <div class="space-8"></div>
-
-                                <div class="row">
-                                    <div class="col-xs-4">
-                                        <button class="btn btn-xs btn-info"
-                                                ng-click="newDimension.column.push('');">
-                                            <i class="fa fa-plus"></i> New Hierarchy</button>
-                                    </div>
-                                    <div class="col-xs-8">
-                                        <p class="help-block">Drag level into the order you prefer.</p>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-
                     <!--Derived Dimension-->
                     <div ng-if="dimType.indexOf('derived') >= 0">
                         <div class="form-group">
@@ -251,35 +205,13 @@
                                             <div class="space-4"></div>
                                         </div>
                                     </div>
-                                    <button class="btn btn-xs btn-info" ng-click="newDimension.derived.push('');">
+                                    <button class="btn btn-xs btn-info" ng-click="addNewDimension(newDimension);">
                                         <i class="fa fa-plus"></i> New Derived</button>
                                 </div>
                             </div>
                         </div>
                     </div>
                 </div>
-
-                <!--Tips-->
-                <div class="col-xs-4">
-                    <div class="box box-solid">
-                        <div class="box-header">
-                            <h4 class="box-title">Tips</h4>
-                        </div>
-                        <div class="box-body">
-                            <div class="row">
-                                <div class="col-xs-12">
-                                    <ol class="text-info">
-                                        <li>Type in any input box for auto suggestion</li>
-                                        <li>Pick up Fact Table from Star Schema Tables first</li>
-                                        <li>Data Type should match with Hive Table's Data Type</li>
-                                        <li>Join Type have to be same as will be used in query</li>
-                                        <li>Using Derived for One-One relationship between columns, like ID and Name</li>
-                                    </ol>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
             </div>
             </ng-form>
         </div>
@@ -291,31 +223,71 @@
 
 
     <script type="text/ng-template" id="autoGenDimension.html">
-        <div class="modal-header">
-            <h4 class="box-title lighter">Auto Generate Dimensions <small>This is a helper for you to batch generate dimensions.</small></h4>
+        <div class="modal-header large-popover">
+            <h4 class="box-title lighter">Auto Generate Dimensions <small>This is a helper for you to batch generate dimensions.</small><i kylinpopover placement="right" title="Auto Generate Rules" template="AutoDimensionsTip.html" class="fa fa-info-circle"></i></h4>
         </div>
         <div class="modal-body">
             <div class="row">
-                <div class="col-xs-8">
+                <div class="col-xs-12">
                     <div class="box box-solid">
                         <div class="box-header"><h4>Columns</h4></div>
                         <div class="box-body">
-                            <ul class="list-unstyled columns-region">
-                                <li ng-repeat="table in availableTables track by $index">
-                                    <h5 class="table-name-underline">
-                                        <b>{{table}}</b>{{$index == 0 ? ' [Fact Table]' : ' [Lookup Table]'}}
-                                    </h5>
-                                    <ul class="list-unstyled">
-                                        <li ng-repeat="col in availableColumns[table] track by col.table + '.' + col.name">
-                                            <label>
-                                                <input type="checkbox" ng-model="selectedColumns[table][col.name].selected"
-                                                       ng-disabled="selectedColumns[table][col.name].disabled">
-                                                {{col.name}}
-                                            </label>
-                                        </li>
-                                    </ul>
-                                </li>
-                            </ul>
+                          <ul class="list-unstyled columns-region">
+                            <accordion close-others=false>
+                              <!--FactTable-->
+                              <div ng-repeat="table in availableTables track by $index" ng-if="$index == 0" accordion-group class="panel-default " heading="{{table}}{{dataKylin.cube.cubeDSFactTable}}" is-open=true>
+                                <table class="table table-striped table-hover ng-scope">
+                                  <tr >
+                                    <td class="col-xs-1"></td>
+                                    <td class="col-xs-4"><label>Name</label></td>
+                                    <td class="col-xs-3"><label>Columns</label></td>
+                                    <td colspan="2" class="col-xs-4"></td>
+                                  </tr>
+                                  <tr ng-repeat="col in availableColumns[table] track by col.table + '.' + col.name" >
+                                    <td >
+                                      <input type="checkbox" ng-model="selectedColumns[table][col.name].selected"
+                                             ng-disabled="selectedColumns[table][col.name].disabled"  >
+                                    </td>
+                                    <td >
+                                      <input type="text"  placeholder={{col.name}} ng-model="selectedColumns[table][col.name].name" ng-disabled="!selectedColumns[table][col.name].selected" style="width:90%;">
+                                    </td>
+                                    <td>
+                                      {{col.name}}
+                                    </td>
+                                  </tr>
+                                </table>
+                              </div>
+                              <!--LookUp Table-->
+                              <div ng-repeat="table in availableTables track by $index" ng-if="$index > 0" accordion-group class="panel-default" heading="{{table}}{{dataKylin.cube.cubeDSLookupTable}}">
+                                <table class="table table-striped table-hover ng-scope">
+                                  <tr class="row" >
+                                    <td class="col-xs-1"></td>
+                                    <td class="col-xs-4"><label>Name</label></td>
+                                    <td class="col-xs-3"><label>Columns</label></td>
+                                    <td colspan="2" class="col-xs-4"></td>
+                                  </tr>
+                                  <tr ng-repeat="col in availableColumns[table] track by col.table + '.' + col.name" class="row">
+                                    <td class=>
+                                      <input type="checkbox" ng-model="selectedColumns[table][col.name].selected"
+                                             ng-disabled="selectedColumns[table][col.name].disabled"  ng-change="autoChange(table,col.name)">
+                                    </td>
+                                    <td >
+                                      <input type="text" ng-model="selectedColumns[table][col.name].name" placeholder={{table}}_derived  ng-disabled="!selectedColumns[table][col.name].selected" style="width:90%;">
+                                    </td>
+                                    <td >
+                                      {{col.name}}
+                                    </td>
+                                    <td  >
+                                      <label> <input type="radio" ng-model="selectedColumns[table][col.name].normal" value="true" ng-disabled="!selectedColumns[table][col.name].selected"> Normal </label>
+                                    </td>
+                                    <td >
+                                      <label> <input type="radio" ng-model="selectedColumns[table][col.name].normal" value="false" ng-disabled="!selectedColumns[table][col.name].selected"> Derived </label>
+                                    </td>
+                                  </tr>
+                                </table>
+                              </div>
+                            </accordion>
+                          </ul>
                         </div>
                     </div>
                 </div>
@@ -324,27 +296,30 @@
                 <div class="col-xs-4">
                     <div class="box box-solid">
                         <div class="box-header">
-                            <h4 class="box-title">Auto Generate Rules</h4>
+                            <h4 class="box-title"></h4>
                         </div>
                         <div class="box-body">
-                            <div class="row">
-                                <div class="col-xs-12">
-                                    <ol class="text-info">
-                                        <li>Column is disabled once there is already a dimension referred this column.</li>
-                                        <li>In fact table: one normal dimension will be auto generated per column.</li>
-                                        <li>In lookup table: one derived dimension will be auto generated for all the selected columns.</li>
-                                    </ol>
-                                </div>
-                            </div>
+
                         </div>
                     </div>
                 </div>
             </div>
         </div>
         <div class="modal-footer">
-            <button class="btn btn-primary" ng-disabled="" ng-click="ok()">OK</button>
+            <button class="btn btn-primary" ng-disabled="" ng-click="checkAutoDimension()?ok():''">OK</button>
             <button class="btn btn-warning" ng-click="cancel()">Cancel</button>
         </div>
     </script>
     </ng-form>
 </div>
+<script type="text/ng-template" id="AutoDimensionsTip.html">
+  <div class="row">
+    <div class="col-xs-12">
+      <ol class="text-info">
+        <li>Column is disabled once there is already a dimension referred this column.</li>
+        <li>In fact table: one normal dimension will be auto generated per column.</li>
+        <li>In lookup table: one derived dimension will be auto generated for all the selected columns.</li>
+      </ol>
+    </div>
+  </div>
+</script>


[2/2] kylin git commit: KYLIN-1321 auto generate style update

Posted by zh...@apache.org.
KYLIN-1321 auto generate style update


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2814f612
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2814f612
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2814f612

Branch: refs/heads/master
Commit: 2814f612a4530434cca3f958878dfa761bb95aa5
Parents: 5a44868
Author: Jason <ji...@163.com>
Authored: Mon Oct 24 14:54:53 2016 +0800
Committer: Jason <ji...@163.com>
Committed: Mon Oct 24 14:54:53 2016 +0800

----------------------------------------------------------------------
 webapp/app/less/component.less                   | 4 ++++
 webapp/app/partials/cubeDesigner/dimensions.html | 4 ++++
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/2814f612/webapp/app/less/component.less
----------------------------------------------------------------------
diff --git a/webapp/app/less/component.less b/webapp/app/less/component.less
index 1102b49..d99ddbb 100644
--- a/webapp/app/less/component.less
+++ b/webapp/app/less/component.less
@@ -1192,3 +1192,7 @@ ul.abn-tree li.abn-tree-row a {
 .floatR{
   float: right;
 }
+
+.dim-checkbox-label{
+  width: 100%;
+}

http://git-wip-us.apache.org/repos/asf/kylin/blob/2814f612/webapp/app/partials/cubeDesigner/dimensions.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubeDesigner/dimensions.html b/webapp/app/partials/cubeDesigner/dimensions.html
index 4d48167..3a2efb6 100644
--- a/webapp/app/partials/cubeDesigner/dimensions.html
+++ b/webapp/app/partials/cubeDesigner/dimensions.html
@@ -245,8 +245,10 @@
                                   </tr>
                                   <tr ng-repeat="col in availableColumns[table] track by col.table + '.' + col.name" >
                                     <td >
+                                      <label class="dim-checkbox-label">
                                       <input type="checkbox" ng-model="selectedColumns[table][col.name].selected"
                                              ng-disabled="selectedColumns[table][col.name].disabled"  >
+                                      </label>
                                     </td>
                                     <td >
                                       <input type="text"  placeholder={{col.name}} ng-model="selectedColumns[table][col.name].name" ng-disabled="!selectedColumns[table][col.name].selected" style="width:90%;">
@@ -268,8 +270,10 @@
                                   </tr>
                                   <tr ng-repeat="col in availableColumns[table] track by col.table + '.' + col.name" class="row">
                                     <td class=>
+                                      <label class="dim-checkbox-label">
                                       <input type="checkbox" ng-model="selectedColumns[table][col.name].selected"
                                              ng-disabled="selectedColumns[table][col.name].disabled"  ng-change="autoChange(table,col.name)">
+                                      </label>
                                     </td>
                                     <td >
                                       <input type="text" ng-model="selectedColumns[table][col.name].name" placeholder={{table}}_derived  ng-disabled="!selectedColumns[table][col.name].selected" style="width:90%;">