三月上旬新内容速递丨选图攻略、内存优化与场景深化

春风送暖,学习相伴!三月上旬更新聚焦数据可视化选图、内存管理技巧、频率分析与桑基图应用,助你轻松驾驭数据分析新场景!

一、场景应用精选

【数析课堂】频率分析:用“数数”快速定位业务痛点》→通过频率统计,快速发现高频问题,精准定位业务改进点。
【桑基图】流动的“资金河流”,一眼看透业务流向》→学习桑基图绘制,追踪资金流动路径,洞察业务流转全貌。

二、技术经验分享

不止选类型,更要找对入口:数据分析选图全攻略》→深入讲解图表选择的核心逻辑,助你告别“图表选择困难症”。
内存溢出别慌张:教你如何看懂BI的“胃”,并管住它的“嘴”》→揭秘BI内存机制,掌握优化技巧,让分析更流畅。

四、社区日志更新

2026年「月更日志」社区更新合集 2.1 - 2.28》→汇总二月社区更新动态,记录成长每一步。

六、任务持续上线

【BI知识闯关】不止选类型,更要找对入口:数据分析选图全攻略》→通过闯关巩固选图知识,提升实战应用能力。
【数析课堂】频率分析知识巩固》→配套练习,加深频率分析理解,强化业务洞察。
【图表应用】桑基图追踪资金流向,发现业务奥秘》→动手实践桑基图,探索资金流向中的业务规律。
【BI知识闯关】内存溢出别慌张:教你如何看懂BI的“胃”,并管住它的“嘴”》→挑战内存管理知识,成为BI优化高手。


阳春三月,学习正当时,快来社区参与挑战,一起探索数据新视界!

麦粉社区
>
帖子详情

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

数据分析 发表于 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关注人数 6326浏览人数
最后回复于:2021-4-22 09:23

社区

指南

AI

搜索

快速回复 返回顶部 返回列表