From acd05774dd24d35599714bad862b0f25a809c2bb Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Thu, 6 Jul 2017 15:21:55 +0800 Subject: [PATCH] KYLIN-2604 Use global dict as the default encoding for precise distinct count in web --- webapp/app/js/controllers/cubeAdvanceSetting.js | 5 --- webapp/app/js/controllers/cubeEdit.js | 52 +++++++++++++++++++++++++ webapp/app/js/controllers/cubeMeasures.js | 7 ++++ 3 files changed, 59 insertions(+), 5 deletions(-) diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js b/webapp/app/js/controllers/cubeAdvanceSetting.js index 7d375da94..8041a12c4 100644 --- a/webapp/app/js/controllers/cubeAdvanceSetting.js +++ b/webapp/app/js/controllers/cubeAdvanceSetting.js @@ -187,7 +187,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi }; $scope.initUpdateDictionariesStatus(); - $scope.addNewDictionaries = function (dictionaries, index) { if(dictionaries&&index>=0){ $scope.updateDictionariesStatus.isEdit = true; @@ -207,10 +206,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi }; $scope.saveNewDictionaries = function (){ - if(!$scope.cubeMetaFrame.dictionaries){ - $scope.cubeMetaFrame.dictionaries=[]; - } - if($scope.updateDictionariesStatus.isEdit == true) { if ($scope.cubeMetaFrame.dictionaries[$scope.updateDictionariesStatus.editIndex].column != $scope.newDictionaries.column) { if(!$scope.checkColumn()){ diff --git a/webapp/app/js/controllers/cubeEdit.js b/webapp/app/js/controllers/cubeEdit.js index 0e5038eb7..5f78b6119 100755 --- a/webapp/app/js/controllers/cubeEdit.js +++ b/webapp/app/js/controllers/cubeEdit.js @@ -721,7 +721,59 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio } } + function reGenerateAdvancedDict () { + if (!$scope.cubeMetaFrame.dictionaries) { + $scope.cubeMetaFrame.dictionaries = []; + } + + var distinctMeasures = []; + + angular.forEach($scope.cubeMetaFrame.measures, function (measure, index) { + if (measure.function.expression === 'COUNT_DISTINCT' && measure.function.returntype === 'bitmap') { + var measureColumn = measure.function.parameter.value; + distinctMeasures.push(measureColumn); + //keep backward compatibility + distinctMeasures.push(VdmUtil.removeNameSpace(measureColumn)) + + var isColumnExit = false; + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dictionaries) { + if (!isColumnExit) { + //keep backward compatibility + if (dictionaries.column == measureColumn || dictionaries.column == VdmUtil.removeNameSpace(measureColumn)) + isColumnExit = true; + } + }); + + if (!isColumnExit) { + var dict = CubeDescModel.createDictionaries(); + dict.column = measureColumn; + dict.builder = cubeConfig.buildDictionaries[0].value; + $scope.cubeMetaFrame.dictionaries.push(dict) + } + } + }); + + //get all reuse columns + var reuseColumns = []; + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dict, index) { + if (dict.reuse != null && reuseColumns.indexOf(dict.reuse) === -1) { + reuseColumns.push(dict.reuse); + } + }); + //remove deprecated distinct measures + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dict, index) { + if (distinctMeasures.indexOf(dict.column) === -1 && reuseColumns.indexOf(dict.column) === -1) { + $scope.cubeMetaFrame.dictionaries.splice(index, 1); + } + }); + } + + $scope.$on('MeasuresEdited', function (event) { + if ($scope.cubeMetaFrame) { + reGenerateAdvancedDict(); + } + }); $scope.$on('DimensionsEdited', function (event) { if ($scope.cubeMetaFrame) { diff --git a/webapp/app/js/controllers/cubeMeasures.js b/webapp/app/js/controllers/cubeMeasures.js index 2b8668305..8b0271c1b 100644 --- a/webapp/app/js/controllers/cubeMeasures.js +++ b/webapp/app/js/controllers/cubeMeasures.js @@ -422,6 +422,13 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes } } + if ($scope.state.mode == 'edit') { + $scope.$on('$destroy', function () { + // emit measures edit event in order to re-generate advanced dict. + $scope.$emit('MeasuresEdited'); + }); + } + }); var NextParameterModalCtrl = function ($scope, scope,para,$modalInstance,cubeConfig, CubeService, MessageService, $location, SweetAlert,ProjectModel, loadingRequest,ModelService) { -- 2.11.0 (Apple Git-81)