KYLIN-2689 Only dimension columns can join when create a model
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2bc90f93 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2bc90f93 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2bc90f93 Branch: refs/heads/KYLIN-2606 Commit: 2bc90f9331bcdc2e64b43cb5025640f95ec4efe1 Parents: 3f3cb39 Author: luguosheng1314 <550175...@qq.com> Authored: Wed Jun 28 00:56:39 2017 +0800 Committer: chenzhx <346839...@qq.com> Committed: Wed Jun 28 09:10:33 2017 +0800 ---------------------------------------------------------------------- webapp/app/js/controllers/modelMeasures.js | 33 +++++++++++--------- webapp/app/js/filters/filter.js | 17 ++++++++++ .../partials/modelDesigner/model_measures.html | 2 +- 3 files changed, 37 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/2bc90f93/webapp/app/js/controllers/modelMeasures.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/modelMeasures.js b/webapp/app/js/controllers/modelMeasures.js index 342f341..5a3ac61 100644 --- a/webapp/app/js/controllers/modelMeasures.js +++ b/webapp/app/js/controllers/modelMeasures.js @@ -22,7 +22,7 @@ 'use strict'; -KylinApp.controller('ModelMeasuresCtrl', function ($scope, $modal,MetaModel,modelsManager,VdmUtil) { +KylinApp.controller('ModelMeasuresCtrl', function ($scope, $modal,MetaModel,modelsManager,VdmUtil,$filter) { $scope.modelsManager = modelsManager; $scope.availableFactTables = []; $scope.selectedFactTables = {}; @@ -33,20 +33,25 @@ KylinApp.controller('ModelMeasuresCtrl', function ($scope, $modal,MetaModel,mode $scope.availableFactTables.push(joinTable[j].alias); } } + $scope.changeColumns = function (table){ + angular.forEach($scope.selectedFactTables[table],function(column){ + if($scope.modelsManager.selectedModel.metrics.indexOf(column)==-1){ + $scope.modelsManager.selectedModel.metrics.push(column); + } + }); + angular.forEach($scope.modelsManager.selectedModel.metrics,function(metric){ + if($scope.selectedFactTables[VdmUtil.getNameSpaceAliasName(metric)].indexOf(metric)==-1){ + $scope.modelsManager.selectedModel.metrics.splice($scope.modelsManager.selectedModel.metrics.indexOf(metric),1); + } + }); + } angular.forEach($scope.modelsManager.selectedModel.metrics,function(metric){ - $scope.selectedFactTables[VdmUtil.getNameSpaceAliasName(metric)]=$scope.selectedFactTables[VdmUtil.getNameSpaceAliasName(metric)]||[]; - $scope.selectedFactTables[VdmUtil.getNameSpaceAliasName(metric)].push(metric); + var aliasName = VdmUtil.getNameSpaceAliasName(metric) + $scope.selectedFactTables[aliasName]=$scope.selectedFactTables[aliasName]||[]; + $scope.selectedFactTables[aliasName].push(metric); }); - $scope.changeColumns = function (table){ - angular.forEach($scope.selectedFactTables[table],function(column){ - if($scope.modelsManager.selectedModel.metrics.indexOf(column)==-1){ - $scope.modelsManager.selectedModel.metrics.push(column); - } - }); - angular.forEach($scope.modelsManager.selectedModel.metrics,function(metric){ - if($scope.selectedFactTables[VdmUtil.getNameSpaceAliasName(metric)].indexOf(metric)==-1){ - $scope.modelsManager.selectedModel.metrics.splice($scope.modelsManager.selectedModel.metrics.indexOf(metric),1); - } - }); + for (var i in $scope.selectedFactTables) { + $scope.selectedFactTables[i] = $filter('notInJoin')($scope.selectedFactTables[i], i, $scope.modelsManager.selectedModel.lookups) + $scope.changeColumns(i) } }); http://git-wip-us.apache.org/repos/asf/kylin/blob/2bc90f93/webapp/app/js/filters/filter.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/filters/filter.js b/webapp/app/js/filters/filter.js index 78f6cf9..8b6cffa 100755 --- a/webapp/app/js/filters/filter.js +++ b/webapp/app/js/filters/filter.js @@ -204,6 +204,23 @@ KylinApp }); return out; } + }).filter('notInJoin', function ($filter) { + return function (inputArr, table, arr) { + var out=[]; + angular.forEach(inputArr, function (inputItem) { + var isInJoin = false + angular.forEach(arr,function(item) { + var checkColumn = inputItem.name ? table + '.' + inputItem.name : inputItem; + if (item.join.foreign_key.indexOf(checkColumn) !== -1 || item.join.primary_key.indexOf(checkColumn) !== -1) { + isInJoin = true; + } + }); + if (!isInJoin) { + out.push(inputItem); + } + }); + return out; + } }).filter('inMeaNotInDim', function ($filter) { return function (inputArr, table, arr) { var out=[]; http://git-wip-us.apache.org/repos/asf/kylin/blob/2bc90f93/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 bf27914..d41f690 100644 --- a/webapp/app/partials/modelDesigner/model_measures.html +++ b/webapp/app/partials/modelDesigner/model_measures.html @@ -68,7 +68,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|inDimNotInMea:table:modelsManager.selectedModel.dimensions"> + repeat="table+'.'+measure.name as measure in getColumnsByAlias(table) | filter:$select.search|inDimNotInMea:table:modelsManager.selectedModel.dimensions|notInJoin:table:modelsManager.selectedModel.lookups"> {{measure.name}} </ui-select-choices> </ui-select>