You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/12/20 11:26:41 UTC

[45/50] [abbrv] kylin git commit: KYLIN 1875 minor, update model ang cube designer

KYLIN 1875 minor,update model ang cube designer

Signed-off-by: zhongjian <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/878107e3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/878107e3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/878107e3

Branch: refs/heads/master-hbase1.x
Commit: 878107e35bf4ac3a7963f22ac00a805eea9c323f
Parents: 6f563df
Author: chenzhx <34...@qq.com>
Authored: Mon Dec 19 14:16:47 2016 +0800
Committer: zhongjian <ji...@163.com>
Committed: Mon Dec 19 16:29:42 2016 +0800

----------------------------------------------------------------------
 webapp/app/js/controllers/cubeAdvanceSetting.js | 31 +--------
 webapp/app/js/controllers/cubeDimensions.js     | 38 ++++-------
 webapp/app/js/controllers/cubeEdit.js           |  6 +-
 webapp/app/js/controllers/cubeMeasures.js       | 12 ++--
 webapp/app/js/controllers/cubeSchema.js         |  1 -
 webapp/app/js/controllers/modelDataModel.js     |  6 --
 webapp/app/js/controllers/modelEdit.js          |  2 +-
 webapp/app/js/filters/filter.js                 | 17 ++++-
 .../cubeDesigner/advanced_settings.html         | 17 +----
 .../app/partials/cubeDesigner/dimensions.html   | 69 ++++++++++----------
 webapp/app/partials/cubeDesigner/measures.html  | 19 +++---
 .../app/partials/modelDesigner/data_model.html  | 34 ++++------
 .../partials/modelDesigner/model_measures.html  |  2 +-
 13 files changed, 100 insertions(+), 154 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/cubeAdvanceSetting.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js b/webapp/app/js/controllers/cubeAdvanceSetting.js
index 20af908..760133a 100644
--- a/webapp/app/js/controllers/cubeAdvanceSetting.js
+++ b/webapp/app/js/controllers/cubeAdvanceSetting.js
@@ -21,7 +21,7 @@
 KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfig,MetaModel,cubesManager,CubeDescModel,SweetAlert) {
   $scope.cubesManager = cubesManager;
   $scope.getTypeVersion=function(typename){
-    var searchResult=/\[v(\d+)\]/.exec(typename);
+    var searchResult=/\s*\(v(\d+)\)/.exec(typename);
     if(searchResult&&searchResult.length){
       return searchResult.length&&searchResult[1]||1;
     }else{
@@ -30,7 +30,7 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi
   }
   $scope.removeVersion=function(typename){
     if(typename){
-      return typename.replace(/\[v\d+\]/g,"");
+      return typename.replace(/\s*\(v\d+\)/g,"");
     }
     return "";
   }
@@ -49,7 +49,7 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi
     _encoding=baseKey;
     var rowkeyObj = {
       column:item.column,
-      encoding:_encoding+(item.encoding_version?"[v"+item.encoding_version+"]":"[v1]"),
+      encoding:_encoding+(item.encoding_version?"  (v"+item.encoding_version+")":"  (v1)"),
       valueLength:_valueLength,
       isShardBy:item.isShardBy,
       encoding_version:item.encoding_version||1
@@ -109,31 +109,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi
     }
   }
 
-  $scope.removeRowkey = function(arr,index,item){
-    if (index > -1) {
-      arr.splice(index, 1);
-    }
-    $scope.cubeMetaFrame.rowkey.rowkey_columns.splice(index,1);
-  }
-
-
-  $scope.addNewRowkeyColumn = function () {
-    var rowkeyObj = {
-      column:"",
-      encoding:"dict",
-      valueLength:0,
-      isShardBy:"false"
-    }
-
-    $scope.convertedRowkeys.push(rowkeyObj);
-    $scope.cubeMetaFrame.rowkey.rowkey_columns.push({
-      column:'',
-      encoding:'dict',
-      isShardBy:'false'
-    });
-
-  };
-
   $scope.addNewHierarchy = function(grp){
     grp.select_rule.hierarchy_dims.push([]);
   }

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/cubeDimensions.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeDimensions.js b/webapp/app/js/controllers/cubeDimensions.js
index e2787a5..80d54bb 100644
--- a/webapp/app/js/controllers/cubeDimensions.js
+++ b/webapp/app/js/controllers/cubeDimensions.js
@@ -206,9 +206,7 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
         });
 
         modalInstance.result.then(function () {
-            if (!$scope.dimState.editing) {
-                $scope.doneAddDim();
-            } else {
+            if ($scope.dimState.editing) {
                 $scope.doneEditDim();
             }
 
@@ -268,31 +266,31 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
 
     };
 
-    $scope.addDim = function (dimType) {
-        $scope.newDimension = Dimension('', [], dimType);
-
-        $scope.openDimModal(dimType);
-    };
-
     $scope.editDim = function (dim) {
         $scope.dimState.editingIndex = dimList.indexOf(dim);
         $scope.dimState.editing = true;
 
         // Make a copy of model will be editing.
         $scope.newDimension = angular.copy(dim);
+        if($scope.newDimension.derived&&$scope.newDimension.derived.length>0){
+          $scope.newDimension.normal="false";
+        }else{
+          $scope.newDimension.normal="true";
+        }
 
         $scope.openDimModal($scope.getDimType(dim));
     };
 
-    $scope.doneAddDim = function () {
-        // Push new dimension which bound user input data.
-        dimList.push(angular.copy($scope.newDimension));
-
-        $scope.resetParams();
-    };
-
     $scope.doneEditDim = function () {
         // Copy edited model to destination model.
+        if($scope.newDimension.derived&&($scope.newDimension.normal=="true")){
+           $scope.newDimension.column=$scope.newDimension.derived[0];
+           $scope.newDimension.derived=null;
+        }
+        if(!$scope.newDimension.derived&&($scope.newDimension.normal=="false")){
+           $scope.newDimension.derived=[$scope.newDimension.column];
+           $scope.newDimension.column=null;
+        }
         angular.copy($scope.newDimension, dimList[$scope.dimState.editingIndex]);
 
         $scope.resetParams();
@@ -490,14 +488,6 @@ KylinApp.controller('CubeDimensionsCtrl', function ($scope, $modal,MetaModel,cub
         }
     }
 
-    $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();

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/cubeEdit.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeEdit.js b/webapp/app/js/controllers/cubeEdit.js
index a2b38f9..90cdbc0 100755
--- a/webapp/app/js/controllers/cubeEdit.js
+++ b/webapp/app/js/controllers/cubeEdit.js
@@ -60,7 +60,7 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio
               for(var s=1;s<=typeVersion;s++){
                 $scope.store.supportedEncoding.push({
                   "name":name+" (v"+s+","+(s==typeVersion&&typeVersion>1?"suggest)":")"),
-                  "value":value+"[v"+s+"]",
+                  "value":value+"  (v"+s+")",
                   "version":typeVersion,
                   "baseValue":value,
                   "suggest":s==typeVersion
@@ -70,7 +70,7 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio
           }else {
             $scope.store.supportedEncoding.push({
               "name": name,
-              "value": value+"[v1]",
+              "value": value+"  (v1)",
               "encoding_version":1,
               "version":typeVersion,
               "baseValue":value,
@@ -103,7 +103,7 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio
         for(var s=0;s<$scope.cubeMetaFrame.rowkey.rowkey_columns.length;s++){
           if(filterName==$scope.cubeMetaFrame.rowkey.rowkey_columns[s].column){
             var version=$scope.cubeMetaFrame.rowkey.rowkey_columns[s].encoding_version;
-            filterEncoding=VdmUtil.getFilterObjectListByOrFilterVal(encodings,'value',$scope.cubeMetaFrame.rowkey.rowkey_columns[s].encoding.replace(/:\d+/,"")+(version?"[v"+version+"]":"[v1]"),'suggest',true)
+            filterEncoding=VdmUtil.getFilterObjectListByOrFilterVal(encodings,'value',$scope.cubeMetaFrame.rowkey.rowkey_columns[s].encoding.replace(/:\d+/,"")+(version?"  (v"+version+")":"  (v1)"),'suggest',true)
           }
         }
       }else{

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/cubeMeasures.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeMeasures.js b/webapp/app/js/controllers/cubeMeasures.js
index 67a107b..15c330a 100644
--- a/webapp/app/js/controllers/cubeMeasures.js
+++ b/webapp/app/js/controllers/cubeMeasures.js
@@ -32,12 +32,12 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes
   var needLengthKeyList=['fixed_length','fixed_length_hex','int','integer'];
   $scope.removeVersion=function(typename){
     if(typename){
-      return typename.replace(/\[v\d+\]/g,"");
+      return typename.replace(/\s*\(v\d+\)/g,"");
     }
     return "";
   }
   $scope.getTypeVersion=function(typename){
-    var searchResult=/\[v(\d+)\]/.exec(typename);
+    var searchResult=/\s*\(v(\d+)\)/.exec(typename);
     if(searchResult&&searchResult.length){
       return searchResult.length&&searchResult[1]||1;
     }else{
@@ -62,7 +62,7 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes
     if($scope.isEdit) {
       if (name && $scope.newMeasure.function.configuration&&$scope.newMeasure.function.configuration['topn.encoding.' + name]) {
         var version = $scope.newMeasure.function.configuration['topn.encoding_version.' + name] || 1;
-        filterEncoding = VdmUtil.getFilterObjectListByOrFilterVal(encodings, 'value', $scope.newMeasure.function.configuration['topn.encoding.' + name].replace(/:\d+/, "") + (version ? "[v" + version + "]" : "[v1]"), 'suggest', true);
+        filterEncoding = VdmUtil.getFilterObjectListByOrFilterVal(encodings, 'value', $scope.newMeasure.function.configuration['topn.encoding.' + name].replace(/:\d+/, "") + (version ? "  (v" + version + ")" : "  (v1)"), 'suggest', true);
       }else{
         filterEncoding=VdmUtil.getFilterObjectListByOrFilterVal(encodings,'suggest', true);
       }
@@ -89,7 +89,7 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes
       if($scope.newMeasure.function.configuration==null){
         var GroupBy = {
             name:$scope.newMeasure.function.parameter.next_parameter.value,
-            encoding:"dict",
+            encoding:"dict  (v1)",
             valueLength:0,
             }
         $scope.convertedColumns.push(GroupBy);
@@ -110,7 +110,7 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes
             _encoding=baseKey;
             $scope.GroupBy = {
               name:_name,
-              encoding:_encoding+(version?"[v"+version+"]":"[v1]"),
+              encoding:_encoding+(version?"  (v"+version+")":"  (v1)"),
               valueLength:_valueLength,
               encoding_version:version||1
             }
@@ -271,7 +271,7 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes
   $scope.addNewGroupByColumn = function () {
     $scope.nextGroupBy = {
       name:null,
-      encoding:"dict",
+      encoding:"dict  (v1)",
       valueLength:0,
     }
     $scope.convertedColumns.push($scope.nextGroupBy);

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/cubeSchema.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/cubeSchema.js b/webapp/app/js/controllers/cubeSchema.js
index d7dfc09..357b6af 100755
--- a/webapp/app/js/controllers/cubeSchema.js
+++ b/webapp/app/js/controllers/cubeSchema.js
@@ -109,7 +109,6 @@ KylinApp.controller('CubeSchemaCtrl', function ($scope, QueryService, UserServic
     };
 
     $scope.goToStep = function(stepIndex){
-      console.log($scope.cubeMode);
         if($scope.cubeMode == "addNewCube"){
             if(stepIndex+1>=$scope.curStep.step){
                 return;

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/modelDataModel.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/modelDataModel.js b/webapp/app/js/controllers/modelDataModel.js
index 3834e06..95c42c4 100644
--- a/webapp/app/js/controllers/modelDataModel.js
+++ b/webapp/app/js/controllers/modelDataModel.js
@@ -264,9 +264,6 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
           break;
         }
       }
-      if($scope.aliasName.indexOf($scope.newLookup.alias)!=-1&&$scope.lookupState.editing == false){
-        errors.push("Table Alias ["+$scope.newLookup.alias+"] already exist!");
-      }
       if($scope.aliasName.indexOf($scope.newLookup.alias)!=-1&&$scope.aliasName[$scope.lookupState.editingIndex+1] != $scope.newLookup.alias){
         errors.push("Table Alias ["+$scope.newLookup.alias+"] already exist!");
       }
@@ -281,7 +278,4 @@ KylinApp.controller('ModelDataModelCtrl', function ($location,$scope, $modal,cub
         return true;
       }
     };
-    $scope.filterNotRoot = function (item) {
-      return item.name!==modelsManager.selectedModel.fact_table;
-    };
 });

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/controllers/modelEdit.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/controllers/modelEdit.js b/webapp/app/js/controllers/modelEdit.js
index c504b52..351e779 100644
--- a/webapp/app/js/controllers/modelEdit.js
+++ b/webapp/app/js/controllers/modelEdit.js
@@ -209,7 +209,7 @@ KylinApp.controller('ModelEditCtrl', function ($scope, $q, $routeParams, $locati
                           $scope.state.modelSchema = request.modelSchema;
                           SweetAlert.swal('', 'Created the model successfully.', 'success');
                           $location.path("/models");
-                          location.reload();
+                         // location.reload();
                         } else {
                             $scope.saveModelRollBack();
                             var message =request.message;

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/js/filters/filter.js
----------------------------------------------------------------------
diff --git a/webapp/app/js/filters/filter.js b/webapp/app/js/filters/filter.js
index f9f7165..aff4e3a 100755
--- a/webapp/app/js/filters/filter.js
+++ b/webapp/app/js/filters/filter.js
@@ -190,4 +190,19 @@ KylinApp
         return _day +" (Days)";
       }
     }
-  });
+  }).filter('inDimNotInMea', function ($filter) {
+    return function (inputArr, table, arr) {
+      var out=[];
+      angular.forEach(arr,function(item){
+        if(item.table==table){
+          angular.forEach(inputArr,function(inputItem){
+            if(item.columns.indexOf(inputItem.name)==-1){
+              out.push(inputItem);
+            }
+          });
+        }
+      });
+      return out;
+    }
+  })
+  ;

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/partials/cubeDesigner/advanced_settings.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubeDesigner/advanced_settings.html b/webapp/app/partials/cubeDesigner/advanced_settings.html
index 438eb1f..f9e422c 100755
--- a/webapp/app/partials/cubeDesigner/advanced_settings.html
+++ b/webapp/app/partials/cubeDesigner/advanced_settings.html
@@ -202,11 +202,10 @@
                   <thead>
                   <tr>
                     <th>ID</th>
-                    <th class="col-xs-4">Column</th>
+                    <th class="col-xs-5">Column</th>
                     <th>Encoding</th>
                     <th>Length</th>
                     <th>Shard By</th>
-                    <th ng-if="state.mode=='edit'"></th>
                   </tr>
                   </thead>
 
@@ -243,11 +242,11 @@
                       <!--Column Length -->
                       <input type="text" class="form-control" placeholder="Column Length.." ng-if="state.mode=='edit'"
                              tooltip="rowkey column length.." tooltip-trigger="focus"
-                             ng-disabled="rowkey_column.encoding=='dict'||rowkey_column.encoding=='date'||rowkey_column.encoding=='time'||rowkey_column.encoding=='boolean'||instance.status=='READY'"
+                             ng-disabled="rowkey_column.encoding.indexOf('dict')>=0||rowkey_column.encoding.indexOf('date')>=0||rowkey_column.encoding.indexOf('time')>=0||instance.status=='READY'"
                              ng-change="refreshRowKey(convertedRowkeys,$index,rowkey_column);"
                              ng-model="rowkey_column.valueLength" class="form-control">
 
-                      <small class="help-block red" ng-show="state.mode=='edit' && rowkey_column.encoding=='int' && (rowkey_column.valueLength>8 || rowkey_column.valueLength<1)">int encoding column length should between 1 and 8</small>
+                      <small class="help-block red" ng-show="state.mode=='edit' && rowkey_column.encoding.indexOf('integer')>=0 && (rowkey_column.valueLength>8 || rowkey_column.valueLength<1)">integer encoding column length should between 1 and 8</small>
                       <span ng-if="state.mode=='view'">{{rowkey_column.valueLength}}</span>
                     </td>
 
@@ -263,21 +262,11 @@
                       <small class="help-block red" ng-show="state.mode=='edit' && rule.shardColumnAvailable==false && rowkey_column.isShardBy == true">at most one 'shard by' column is allowed.</small>
                       <span ng-if="state.mode=='view'">{{rowkey_column.isShardBy}}</span>
                     </td>
-
-                    <td ng-if="state.mode=='edit'">
-                      <button class="btn btn-xs btn-info"  ng-disabled="instance.status=='READY'"
-                              ng-click="removeRowkey(convertedRowkeys, $index,rowkey_column)"><i
-                        class="fa fa-minus"></i>
-                      </button>
-                    </td>
                   </tr>
                   </tbody>
                 </table>
               </div>
           </div>
-          <button class="btn btn-sm btn-info" style="margin-left:42px" ng-disabled="instance.status=='READY'"
-                  ng-click="addNewRowkeyColumn()" ng-show="state.mode=='edit'">New Rowkey Column<i class="fa fa-plus"></i>
-          </button>
         </div>
         <div class="form-group large-popover" style="overflow:auto">
           <h3 style="margin-left:42px">Advanced Dictionaries  <i kylinpopover placement="right" title="Advanced Dictionaries" template="AdvancedDictionariesTip.html" class="fa fa-info-circle"></i></h3>

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/partials/cubeDesigner/dimensions.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubeDesigner/dimensions.html b/webapp/app/partials/cubeDesigner/dimensions.html
index 7fedeb6..d8a8fce 100644
--- a/webapp/app/partials/cubeDesigner/dimensions.html
+++ b/webapp/app/partials/cubeDesigner/dimensions.html
@@ -24,7 +24,7 @@
             <div class="col-xs-6" ng-if="state.mode=='edit'">
                 <button type="button" class="btn btn-default" ng-disabled="!metaModel.model.fact_table.length||instance.status=='READY'"
                         ng-click="openAutoGenModal()" >
-                    <i class="fa fa-building-o"></i> Auto Generator
+                    <i class="fa fa-building-o"></i> Add Dimensions
                 </button>
             </div>
             <div ng-class="(state.mode=='edit')?'col-xs-6':'col-xs-12'">
@@ -57,7 +57,7 @@
                     </td>
                     <!--Table Name -->
                     <td>
-                        <span tooltip="{{availableFactTables.indexOf(dimension.table)==-1? 'Lookup Table':'Fact Table'}}">{{dimension.table}}</span>
+                        <span>{{dimension.table}}</span>
                     </td>
                     <!--Type-->
                     <td>
@@ -109,7 +109,7 @@
     <!-- Edit Dimension Form -->
     <script type="text/ng-template" id="addEditDimension.html">
         <div class="modal-header">
-            <h4 class="box-title lighter">{{dimState.editing ? 'Edit' : 'Add'}} Dimension
+            <h4 class="box-title lighter">Edit Dimension
                 <span class="label label-primary" ng-repeat="t in dimType">{{t}}</span>
             </h4>
         </div>
@@ -138,17 +138,8 @@
                     <div class="form-group">
                         <div class="row">
                             <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default"><b>Table Name</b></label>
-                            <div class="col-xs-12 col-sm-6" ng-if="dimType.indexOf('derived') >= 0">
-                                <select class="form-control" required="true" chosen data-placeholder="Select a lookup table"
-                                        ng-model="newDimension.table" ng-options="table for table in availableLookupTables">
-                                    <option value=""></option>
-                                </select>
-                            </div>
-                            <div class="col-xs-12 col-sm-6" ng-if="dimType.indexOf('derived') == -1">
-                                <select class="form-control" required="true" chosen data-placeholder="Select a table"
-                                        ng-model="newDimension.table" ng-options="table for table in availableFactTables">
-                                    <option value=""></option>
-                                </select>
+                            <div class="col-xs-12 col-sm-6" >
+                              <span>{{newDimension.table}}</span>
                             </div>
                             <div class="col-xs-12 col-sm-3">
                                 <div class="text-info" ng-if="dimType.indexOf('derived') >= 0">
@@ -161,12 +152,11 @@
                     <!--Normal Dimension: choose one column-->
                     <div class="form-group" ng-if="dimType.indexOf('normal') >= 0">
                         <div class="row">
-                            <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default"><b>Column Name</b></label>
+                            <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default">
+                              <b>Column Name</b>
+                            </label>
                             <div class="col-xs-12 col-sm-6">
-                                <select class="form-control" required="true" chosen data-placeholder="Select a column"
-                                        ng-model="newDimension.column" ng-options="column.name as column.name for column in getDimColumnsByAlias(newDimension.table)">
-                                    <option value=""></option>
-                                </select>
+                              <span>{{newDimension.column}}</span>
                             </div>
                         </div>
                     </div>
@@ -174,27 +164,34 @@
                     <div ng-if="dimType.indexOf('derived') >= 0">
                         <div class="form-group">
                             <div class="row">
-                                <div class="col-sm-6 col-sm-offset-3">
+                                <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default">
+                                    <b>Column Name</b>
+                                </label>
+                                <div class="col-sm-6 ">
                                     <div ng-repeat="derived in newDimension.derived track by $index">
-                                        <div>
-                                            <select chosen style="width: 80%;" data-placeholder="Derived Columns.."
-                                                    ng-model="newDimension.derived[$index]"
-                                                    ng-options="columns.name as columns.name for columns in getDimColumnsByAlias(newDimension.table)" >
-                                                <option value=""></option>
-                                            </select>
-                                            <button class="pull-right btn btn-xs btn-danger" style="cursor: pointer " tooltip="Delete"
-                                                    ng-click="newDimension.derived.splice($index, 1);">
-                                                <i class="fa fa-trash-o"></i>
-                                            </button>
-                                            <div class="space-4"></div>
-                                        </div>
+                                      <span >
+                                       {{newDimension.derived[$index]}}
+                                      </span>
                                     </div>
-                                    <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  ng-if="availableLookupTables.indexOf(newDimension.table)!=-1">
+                        <div  class="row">
+                            <label class="control-label col-xs-12 col-sm-3 no-padding-right font-color-default">
+                                <b>Type</b>
+                            </label>
+                            <div class="col-xs-12 col-sm-6">
+                                <label>
+                                    <input type="radio" ng-model="newDimension.normal" value="true" > Normal
+                                </label>
+                                <label>
+                                    <input type="radio" ng-model="newDimension.normal" value="false" > Derived
+                                </label>
+                            </div>
+                        </div>
+                    </div>
                 </div>
             </div>
             </ng-form>
@@ -221,7 +218,7 @@
                           <ul class="list-unstyled columns-region">
                               <!--FactTable-->
                               <div ng-repeat="table in availableFactTables track by $index"   class="panel-default " >
-                                <h4>{{table}}[FactTable]</h4>
+                                <h4>{{table}}&nbsp;[FactTable]</h4>
                                 <table class="table table-striped table-hover ng-scope">
                                   <tr >
                                     <td class="col-xs-2"><label><input type="checkbox" ng-model="selectedColumns[table].all" ng-change="autoChangeAll(table)">Select All</label></td>
@@ -247,7 +244,7 @@
                               </div>
                               <!--LookUp Table-->
                               <div ng-repeat="table in availableLookupTables track by $index"  class="panel-default" >
-                                <h4>{{table}}[LookupTable]</h4>
+                                <h4>{{table}}&nbsp;[LookupTable]</h4>
                                 <table class="table table-striped table-hover ng-scope">
                                   <tr class="row" >
                                     <td class="col-xs-2"><label><input type="checkbox" ng-model="selectedColumns[table].all" ng-change="autoChangeAll(table)">Select All</label></td>

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/partials/cubeDesigner/measures.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/cubeDesigner/measures.html b/webapp/app/partials/cubeDesigner/measures.html
index 492220c..9eb04c3 100755
--- a/webapp/app/partials/cubeDesigner/measures.html
+++ b/webapp/app/partials/cubeDesigner/measures.html
@@ -239,10 +239,10 @@
                                        class="table table-hover table-bordered list">
                                   <thead>
                                   <tr>
-                                    <th>ID</th>
-                                    <th class="col-xs-5" >Column</th>
-                                    <th>Encoding</th>
-                                    <th>Length</th>
+                                    <th  style="width:40px;">ID</th>
+                                    <th  style="width:300px;">Column</th>
+                                    <th  style="width:140px;">Encoding</th>
+                                    <th >Length</th>
                                     <th ng-if="state.mode=='edit'"></th>
                                   </tr>
                                   </thead>
@@ -258,7 +258,7 @@
                                     </td>
                                     <!--Column Name -->
                                     <td>
-                                      <select class="form-control col-xs-12" chosen ng-if="nextPara.type !== 'constant'" required
+                                      <select class="form-control" chosen ng-if="nextPara.type !== 'constant'" required
                                               ng-model="groupby_column.name"
                                               ng-options="column as column for column in getAllModelDimColumns()" >
                                         <option value="">--Select A Column--</option>
@@ -266,25 +266,22 @@
                                     </td>
                                     <!--Column Encoding -->
                                     <td>
-                                      <select ng-if="state.mode=='edit'" style="width:180px;"
+                                      <select ng-if="state.mode=='edit'"
                                               chosen ng-model="groupby_column.encoding"
                                               ng-change="refreshGroupBy(convertedColumns,$index,groupby_column)"
                                               ng-options="dt.value as dt.name for dt in getEncodings(groupby_column.name)">
                                         <option value=""></option>
                                       </select>
-                                      <span ng-if="state.mode=='view'">{{groupby_column.encoding}}</span>
-
                                     </td>
                                     <td>
                                       <!--Column Length -->
                                       <input type="text" class="form-control" placeholder="Column Length.." ng-if="state.mode=='edit'"
                                              tooltip="group by column length.." tooltip-trigger="focus"
+                                             ng-disabled="groupby_column.encoding.indexOf('dict')>=0||groupby_column.encoding.indexOf('date')>=0||groupby_column.encoding.indexOf('time')>=0"
                                              ng-change="refreshGroupBy(convertedColumns,$index,groupby_column);"
-                                             ng-disabled="groupby_column.encoding=='dict'||groupby_column.encoding=='date'||groupby_column.encoding=='time'"
                                              ng-model="groupby_column.valueLength" class="form-control">
 
-                                      <small class="help-block red" ng-show="state.mode=='edit' && groupby_column.encoding=='int' && (groupby_column.valueLength>8 || groupby_column.valueLength<1)">int encoding column length should between 1 and 8</small>
-                                      <span ng-if="state.mode=='view'">{{groupby_column.valueLength}}</span>
+                                      <small class="help-block red" ng-show="state.mode=='edit' && groupby_column.encoding.indexOf('integer')>=0 && (groupby_column.valueLength>8 || groupby_column.valueLength<1)">integer encoding column length should between 1 and 8</small>
                                     </td>
                                     <td ng-if="state.mode=='edit'">
                                       <button class="btn btn-xs btn-info"

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/partials/modelDesigner/data_model.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/modelDesigner/data_model.html b/webapp/app/partials/modelDesigner/data_model.html
index 97d3c51..6e66e91 100644
--- a/webapp/app/partials/modelDesigner/data_model.html
+++ b/webapp/app/partials/modelDesigner/data_model.html
@@ -126,7 +126,7 @@
                         <div class="row">
                           <div class="col-xs-9">
                             <div>
-                              <select chosen ng-model="newLookup.joinTable" style="width: 45%"
+                              <select chosen ng-model="newLookup.joinTable" class="col-sm-4"
                                       ng-options="table as table for table in aliasName"
                                       name="table_name"  ng-disabled="lookupState.editing"
                                       ng-required="true"
@@ -134,20 +134,21 @@
                                       class="chosen-select">
                                 <option value=""> &#45;&#45; Select Join Table &#45;&#45; </option>
                               </select>
-                              <small class="help-block" ng-show="lookup_form.table_name.$invalid && (lookup_form.table_name.$dirty||forms.model_info_form.$submitted)">Table name required</small>
-                              <b>&nbsp;&nbsp;&nbsp;</b>
-                              <select chosen ng-model="newLookup.table" style="width: 45%"
-                                      ng-options="table.name as VdmUtil.removeNameSpace(table.name) for table in tableModel.selectProjectTables|filter:filterNotRoot"
+                              <!--Join Type-->
+                              <select class="form-control"  chosen ng-model="newLookup.join.type" style="width:120px;"
+                                            ng-options="joinType.value as joinType.name for joinType in cubeConfig.joinTypes">
+                                <option value=""></option>
+                              </select>
+                              <label class="control-label font-color-default"><b>Join</b></label>
+                              <select chosen ng-model="newLookup.table" class="col-sm-4"
+                                      ng-options="table.name as VdmUtil.removeNameSpace(table.name) for table in tableModel.selectProjectTables"
                                       name="table_name"  ng-disabled="lookupState.editing"
                                       ng-required="true"  ng-change="changeJoinTable()"
                                       data-placeholder="Join Table Name"
                                       class="chosen-select">
                                 <option value=""> &#45;&#45; Select Join Table &#45;&#45; </option>
                               </select>
-                              <small class="help-block" ng-show="lookup_form.table_name.$invalid && (lookup_form.table_name.$dirty||forms.model_info_form.$submitted)">Table name required</small>
-
                             </div>
-                            <div class="space-4"></div>
                           </div>
                         </div>
                       </div>
@@ -161,18 +162,7 @@
                             </div>
                         </div>
                     </div>
-                    <!--Join Type and Columns-->
-                    <div class="form-group">
-                        <div class="row">
-                            <label class="col-sm-3 control-label font-color-default"><b>Join Type</b></label>
-                            <div class="col-sm-6">
-                                <select class="form-control"  chosen ng-model="newLookup.join.type"
-                                        ng-options="joinType.value as joinType.name for joinType in cubeConfig.joinTypes">
-                                    <option value=""></option>
-                                </select>
-                            </div>
-                        </div>
-                    </div>
+                    <!--Table Type-->
                     <div class="form-group">
                         <div class="row">
                           <label class="col-sm-3 control-label font-color-default"><b>Table Type</b></label>
@@ -233,8 +223,8 @@
                             <div class="row">
                                 <div class="col-xs-12">
                                     <ol class="text-info">
-                                      <li>Pick up lookup table at first</li>
-                                      <li>Specify join relationship between fact table and chosen lookup table.</li>
+                                      <li>Pick up a table joins another table that already exist.</li>
+                                      <li>Specify join relationship between two tables.</li>
                                       <li>Join Type have to be same as will be used in query</li>
                                     </ol>
                                 </div>

http://git-wip-us.apache.org/repos/asf/kylin/blob/878107e3/webapp/app/partials/modelDesigner/model_measures.html
----------------------------------------------------------------------
diff --git a/webapp/app/partials/modelDesigner/model_measures.html b/webapp/app/partials/modelDesigner/model_measures.html
index f34e3fb..271c04f 100644
--- a/webapp/app/partials/modelDesigner/model_measures.html
+++ b/webapp/app/partials/modelDesigner/model_measures.html
@@ -67,7 +67,7 @@
                 ng-model="selectedFactTables[table]" multiple>
                 <ui-select-match placeholder="Select Column...">{{$item.name}}</ui-select-match>
                 <ui-select-choices
-                  repeat="table+'.'+measure.name as measure in getColumnsByAlias(table) | filter:$select.search">
+                  repeat="table+'.'+measure.name as measure in getColumnsByAlias(table) | filter:$select.search|inDimNotInMea:table:modelsManager.selectedModel.dimensions">
                   {{measure.name}}
                 </ui-select-choices>
               </ui-select>