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%;">