月下旬更新速递丨 实战场景深化、集成能力升级与开发进阶

初冬来临,一波热气腾腾的更新也准时抵达!我们聚焦实战技巧、集成增强与开发进阶,一系列新功能与新教程,助你在数据分析与系统开发的效率上再进一步。

一、实战技巧精讲

雷达图:多维度数据的“透视镜”,3步读懂数据真相》→ 聚焦雷达图核心应用场景,快速掌握多对象、多维度数据的可视化分析方法。

用图表解锁你的生活“数据密码”!》→ 探索图表在日常场景中的应用,让数据解读更直观、更具操作性。

二、直播上线

2025新特性实战解读(上)数据分析效率倍增秘籍》→ 解析2025新特性落地路径,助力实现数据分析效率成倍提升。

三、技术经验分享

【专家分享】数据排序的“权力游戏”:优先级规则决定谁先谁后》→解读高级排序的业务配置逻辑,让关键数据始终处于优先展示位置。

四、二次开发视频

扩展包开发知识点——前端改造》→从需求分析入手到最终实现的全流程讲解,帮助您快速入门上手Smartbi前端改造。

五、任务持续上线

【初级任务】解锁生活“数据密码”,可视化创意实践任务》→发起可视化创意任务,推动数据表达更生动、更具趣味性。

【初级任务】玩转雷达图解数据,200麦豆等你拿!》→推出雷达图实战任务,以激励方式提升多维数据分析技能。

六、全新素材上线

AD域(LDAP/LDAPS)登录验证V2》→扩展域账号登录支持,实现与企业Windows认证体系无缝对接。

数据模型:对接RestfulAPI接口》→打通数据模型与RestfulAPI对接通道,提升系统集成与数据获取效率。

计划任务:定时清空用户属性缓存→引入缓存自动清理机制,确保权限变更实时生效、业务数据及时更新。

用户同步:BI系统自定义用户所属组》→优化用户组同步逻辑,实现自定义组信息自动识别与补全。

审核流程:可以调用自助ETL》→增强审核流程集成能力,支持在用户任务节点直接调用自助ETL过程。

麦粉社区
>
帖子详情

表格设置与在线预览不一样

数据分析 发表于 2021-4-20 15:00
发表于 2021-4-20 15:00:20
表格设置为图1 54826607e7be9dc14d.png
在线预览为图2 223607e7be75c7c7.png



发表于 2021-4-20 16:22:48
怎么设置的?是否可以把设置界面截图?
回复

使用道具 举报

发表于 2021-4-21 09:09:20
30400607f7b2fbe92c.png 32779607f7b3f4d1b2.png
回复

使用道具 举报

发表于 2021-4-21 09:09:46
Jaylin 发表于 2021-4-20 16:22
怎么设置的?是否可以把设置界面截图?

您看一下三楼我的截图
回复

使用道具 举报

发表于 2021-4-21 09:11:38
Jaylin 发表于 2021-4-20 16:22
怎么设置的?是否可以把设置界面截图?

但是导出表格,显示是对的,就是在线预览不一样
回复

使用道具 举报

发表于 2021-4-21 20:35:19
这个目前支持不了。

/**
* 客户端宏
* 对象:spreadsheetReport
* 事件:onRenderReport
*/

可以用下面这个宏尝试:
function main(spreadsheetReport) {
    // 数据条位置配置信息,key为sheet名称或者照相机的名称
    // 例如"标题"表示对"标题"sheet页进行配置
   
    var config = {
        "Sheet1": [{
            // 数据条的区域
            area: {
                start: "D2"
            },
            // 数据条的位置:MID表示单元格中点值对齐,AUTO表示自动
            position: "MID"
        }]
    };
   
    spreadsheetReport.processConditionalFormattingsHTMLs_0331 = spreadsheetReport.processConditionalFormattingsHTMLs;
   
    spreadsheetReport.processConditionalFormattingsHTMLs = function (win) {
        var data = buildDataBarPositionData.call(this, config, win)
        var ret = spreadsheetReport.processConditionalFormattingsHTMLs_0331.apply(this, arguments);
        resetDataBarPositionData.call(this, data)
        return ret;
    };
}

// 重置数据条的位置
function resetDataBarPositionData(data) {
    if (!data || !data.result || data.result.length == 0) {
        return;
    }
    var result = data.result;
    for (var i = 0; i < result.length; i++) {
        result[i].td.style.backgroundPosition = result[i].marginLeft + "px" + " 50%";
        result[i].td._resetDataBarProcessed = true;
    }
   
    for (var i = 0; i < data.noneImageTdArray.length; i++) {
        /*if (data.options[i] !== "MID") {
            continue;
        }*/
        for (var j = 0; j < data.noneImageTdArray[i].length; j++) {
            
            var td = data.noneImageTdArray[i][j];
            if (!td.style.background || td._resetDataBarProcessed) {
                continue;
            }
            if (util.trim(td.innerHTML) == "0") {
                td.style.backgroundSize = "auto";
                td.style.backgroundPosition = "center";
                //if (data.options[i] !== "MID") {
                    td.style.backgroundPosition = "-10000px 50%";
                //}
            }
        }
    }
}

// 重置数据条的位置的数据
function buildDataBarPositionData(config, win) {
    var htmls = win.conditionalFormattingsHTMLs;
    var cellRange = win.cellRange || [0, 0, 0, 0];
    if (!htmls || !win.frameElement) {
        return;
    }
    // sheet
    var sheetName = this.sheetNames[this.currentSheetIndex];
    var name;
    if (win.frameElement == this.elemSheetFrame) {
        name = sheetName;
    } else {
        if (!win.frameElement.isCamera) {
            return;
        }
        name = sheetName + "/" + win.frameElement.name;
    }
    var options = config[name];
    if (!options) {
        return;
    }
    var tdArray = [];
    var imgWidths = [];
    var noneImageTdArray = [];
    for (var key in htmls) {
                var val = htmls[key];
                var p = this.parseCellIndex(key);
                var optionIndx = findMatchedOptionIndex.call(this, options, p);
                if (optionIndx === undefined) {
                    continue;
                }
                var td = this.getFrameCell(win, p[0] - cellRange[0] + cellRange[2], p[1] - cellRange[1] + cellRange[3]);
                if (!td) {
                        continue;
                }
        var img = td.getElementsByTagName("IMG")[0];
        if (img) {
            putArray(tdArray, optionIndx, td);
            putArray(imgWidths, optionIndx, img.clientWidth);
        } else {
            putArray(noneImageTdArray, optionIndx, td);
        }
    }
   
    var result = [];
    for (var i = 0; i < tdArray.length; i++) {
        if (!tdArray[i]) {
            continue;
        }
        var position = options[i].position;
        var tdValues = [];
        for (var j = 0; j < tdArray[i].length; j++) {
            var valueTd = tdArray[i][j].getElementsByTagName("TD")[0];
            if (!valueTd) {
                continue;
            }
            var val = util.trim(valueTd.innerHTML);
            tdValues[j] = val;
            
            if (position == "MID") {
                var tdWidth = valueTd.clientWidth;
                var marginLeft =  val.indexOf("-") == 0 ?
                        tdWidth/2 - imgWidths[i][j] - 1: tdWidth/2 - 1;
                if (val == "0") {
                    marginLeft = 0;
                }
                result.push({
                    td: tdArray[i][j],
                    marginLeft: marginLeft
                });
            }
        }
        
        if (position !== "MID") {
            var max = 0;
            for (var m = 0; m < tdValues.length; m++) {
                if (tdValues[m].indexOf("-") == 0) {
                    max = Math.max(max, imgWidths[i][m]);
                }
            }
            for (var j = 0; j < tdArray[i].length; j++) {
                result.push({
                    td: tdArray[i][j],
                    marginLeft: (tdValues[j].indexOf("-") == 0 ?
                        max - imgWidths[i][j] : max)
                })
            }
        }
    }
    return {
        result: result,
        noneImageTdArray: noneImageTdArray,
        options: options
    };
}

function putArray(arr, index, val) {
    if (!arr[index]) {
        arr[index] = [];
    }
    arr[index] .push(val);
}

function findMatchedOptionIndex(options, p) {
    for (var i = 0; i < options.length; i++) {
        var option = options[i];
        if (!option.area || !option.area.start) {
            continue;
        }
        var start = option.area._$start;
        if (!start) {
            start = this.parseCellIndex(option.area.start);
            option.area._$start = start;
        }
        if (p[0] >= start[0] && p[1] == start[1]) {
                    return i;
                }
    }
}
回复

使用道具 举报

发表于 2021-4-22 09:23:16
Jaylin 发表于 2021-4-21 20:35
这个目前支持不了。

/**

晕,我又看不懂
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

6回帖数 0关注人数 6013浏览人数
最后回复于:2021-4-22 09:23
快速回复 返回顶部 返回列表