From 4e1a1764d1ad890ff6b55f88226b5317478dbc1b Mon Sep 17 00:00:00 2001
From: luguosheng1314 <550175214@qq.com>
Date: Wed, 28 Jun 2017 00:56:39 +0800
Subject: [PATCH] KYLIN-2689 Only dimension columns can join when create a
model
---
webapp/app/js/controllers/modelMeasures.js | 33 +++++++++++++---------
webapp/app/js/filters/filter.js | 17 +++++++++++
.../app/partials/modelDesigner/model_measures.html | 2 +-
3 files changed, 37 insertions(+), 15 deletions(-)
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)
}
});
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=[];
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>
{{$item.name}}
+ repeat="table+'.'+measure.name as measure in getColumnsByAlias(table) | filter:$select.search|inDimNotInMea:table:modelsManager.selectedModel.dimensions|notInJoin:table:modelsManager.selectedModel.lookups">
{{measure.name}}
--
2.9.2