当前位置:首页>python>第286讲:VBA和Python双方案:绩效评分自动标准化与分布强制排名

第286讲:VBA和Python双方案:绩效评分自动标准化与分布强制排名

  • 2026-06-28 12:52:11
第286讲:VBA和Python双方案:绩效评分自动标准化与分布强制排名

在大型企业的绩效管理中,一个常见难题是不同部门之间评分尺度存在显著差异。有的部门主管倾向于给下属普遍打80分以上,形成“分数膨胀”;而有的部门则严格执行评分标准,导致平均分仅在70分左右。这种尺度不一的现象,使得跨部门绩效比较失去公平性,也无法准确识别真正的优秀员工。

问题场景深度分析

假设某公司有销售、研发、运营三个部门,年度绩效评分结果如下:

  • 销售部门:12名员工,分数集中在85-95分之间

  • 研发部门:8名员工,分数集中在70-85分之间

  • 运营部门:10名员工,分数集中在75-90分之间

如果直接按原始分数排名,销售部门的普通员工可能比研发部门的优秀员工排名更高,这显然不符合绩效管理的本意。更科学的做法是:先将各部门分数进行标准化处理,消除部门间评分尺度差异,再按公司统一的强制分布比例确定绩效等级。

解决方案设计原则

有效的绩效标准化方案应遵循以下原则:

  1. 公平性:消除部门主观评分习惯带来的系统性偏差

  2. 可比性:标准化后的分数应在同一量纲下,便于跨部门比较

  3. 区分度:保持员工在部门内部的相对排名顺序

  4. 可操作性:方案要简单透明,便于向员工解释

  5. 灵活性:能够根据不同公司的绩效分布政策进行调整

Python实现方案详解

Python凭借其强大的数据处理能力,成为绩效分析的理想工具。下面我们分步骤讲解完整方案。

数据准备与探索

import pandas as pdimport numpy as npfrom scipy import statsimport matplotlib.pyplot as pltimport seaborn as sns# 创建示例数据np.random.seed(286)departments = ['销售部''研发部''运营部']employees_per_dept = [12810]data = []for dept, n in zip(departments, employees_per_dept):    if dept == '销售部':        scores = np.random.normal(903, n)  # 销售部分数偏高    elif dept == '研发部':        scores = np.random.normal(784, n)  # 研发部分数严格    else:        scores = np.random.normal(823.5, n)  # 运营部分数中等    for i, score in enumerate(scores):        data.append({            '员工ID'f'{dept[:2]}{i+1:03d}',            '部门': dept,            '原始分数'max(60min(100round(score, 1)))  # 限制在60-100分之间        })df = pd.DataFrame(data)print("原始数据描述性统计:")print(df.groupby('部门')['原始分数'].describe())

标准化方法对比与选择

方法一:百分位数排名法

这种方法将原始分数转换为在部门内的百分位数排名,完全消除部门间尺度差异。

def percentile_standardize(df):    """百分位数标准化"""    df_standardized = df.copy()    df_standardized['标准化分数'] = 0    for dept in df['部门'].unique():        dept_mask = df['部门'] == dept        dept_scores = df.loc[dept_mask, '原始分数']        # 计算每个分数的百分位数        percentiles = []        for score in dept_scores:            # 计算小于等于该分数的人数比例            percentile = (sum(dept_scores <= score) / len(dept_scores)) * 100            percentiles.append(percentile)        df_standardized.loc[dept_mask, '标准化分数'] = percentiles    return df_standardizeddf_percentile = percentile_standardize(df)

方法二:Z-Score标准化

此方法基于均值和标准差,适合数据近似正态分布的情况。

def zscore_standardize(df):    """Z-Score标准化"""    df_standardized = df.copy()    for dept in df['部门'].unique():        dept_mask = df['部门'] == dept        dept_scores = df.loc[dept_mask, '原始分数']        # 计算Z分数        z_scores = stats.zscore(dept_scores)        # 将Z分数转换为0-100分制        standardized = 50 + (z_scores * 10)  # 1个标准差对应10分        standardized = np.clip(standardized, 0100)  # 限制在0-100分之间        df_standardized.loc[dept_mask, '标准化分数'] = standardized    return df_standardizeddf_zscore = zscore_standardize(df)

方法三:Min-Max归一化

此方法将分数线性映射到指定范围,保持原始分布形态。

def minmax_standardize(df, new_min=0, new_max=100):    """Min-Max归一化"""    df_standardized = df.copy()    for dept in df['部门'].unique():        dept_mask = df['部门'] == dept        dept_scores = df.loc[dept_mask, '原始分数']        old_min = dept_scores.min()        old_max = dept_scores.max()        # 线性转换公式        if old_max != old_min:  # 防止除零错误            standardized = ((dept_scores - old_min) / (old_max - old_min)) * (new_max - new_min) + new_min        else:            standardized = np.full_like(dept_scores, (new_max + new_min) / 2)        df_standardized.loc[dept_mask, '标准化分数'] = standardized    return df_standardizeddf_minmax = minmax_standardize(df)

绩效等级强制分布

标准化处理后,我们需要按照公司规定的比例强制分布绩效等级。假设公司政策为:前20%为A,中间70%为B,后10%为C。

def force_rank_distribution(df_standardized, ratios={'A'0.2'B'0.7'C'0.1}):    """    强制排名分布    ratios: 各等级占比,如{'A': 0.2, 'B': 0.7, 'C': 0.1}    """    df_result = df_standardized.copy()    # 按标准化分数降序排列    df_result = df_result.sort_values('标准化分数', ascending=False).reset_index(drop=True)    total_employees = len(df_result)    # 计算各等级的分界点    cum_ratio = 0    performance_grade = []    for grade, ratio in ratios.items():        count = int(round(total_employees * ratio))        if grade == list(ratios.keys())[-1]:  # 最后一个等级            count = total_employees - len(performance_grade)        performance_grade.extend([grade] * count)    # 如果员工总数不等于等级分配总数,微调最后一个等级的数量    if len(performance_grade) != total_employees:        diff = total_employees - len(performance_grade)        performance_grade.extend([list(ratios.keys())[-1]] * diff)    df_result['绩效等级'] = performance_grade[:total_employees]    return df_result# 使用百分位数标准化结果进行强制排名df_final = force_rank_distribution(df_percentile)print("\n强制排名结果:")print(df_final[['员工ID''部门''原始分数''标准化分数''绩效等级']].head(10))

分部门强制排名

在某些情况下,公司希望在每个部门内部也执行强制分布。这就需要分部门进行标准化和排名。

def department_wise_force_rank(df, ratios={'A'0.2'B'0.7'C'0.1}):    """    分部门强制排名    """    result_dfs = []    for dept in df['部门'].unique():        dept_df = df[df['部门'] == dept].copy()        # 部门内标准化        dept_scores = dept_df['原始分数']        dept_df['部门内标准化分数'] = ((dept_scores.rank() - 1) / (len(dept_scores) - 1)) * 100        # 部门内按比例分配等级        dept_df = dept_df.sort_values('部门内标准化分数', ascending=False)        dept_total = len(dept_df)        # 计算各等级数量        grade_counts = {}        cumulative = 0        for i, (grade, ratio) in enumerate(ratios.items()):            if i < len(ratios) - 1:                count = int(round(dept_total * ratio))            else:  # 最后一个等级                count = dept_total - cumulative            grade_counts[grade] = count            cumulative += count        # 分配等级        grades = []        for grade, count in grade_counts.items():            grades.extend([grade] * count)        dept_df['部门内绩效等级'] = grades[:dept_total]        result_dfs.append(dept_df)    return pd.concat(result_dfs, ignore_index=True)# 分部门强制排名df_dept_rank = department_wise_force_rank(df)print("\n分部门强制排名结果:")print(df_dept_rank[['员工ID''部门''原始分数''部门内标准化分数''部门内绩效等级']].head(10))

可视化分析

为了更直观地展示标准化效果,我们可以通过可视化对比。

def visualize_standardization(df_raw, df_standardized):    """可视化标准化效果"""    fig, axes = plt.subplots(22, figsize=(1512))    # 1. 原始分数分布    ax1 = axes[00]    for dept in df_raw['部门'].unique():        dept_scores = df_raw[df_raw['部门'] == dept]['原始分数']        ax1.hist(dept_scores, alpha=0.5, label=dept, bins=10)    ax1.set_xlabel('原始分数')    ax1.set_ylabel('频数')    ax1.set_title('各部门原始分数分布')    ax1.legend()    ax1.grid(True, alpha=0.3)    # 2. 标准化后分数分布    ax2 = axes[01]    for dept in df_standardized['部门'].unique():        dept_scores = df_standardized[df_standardized['部门'] == dept]['标准化分数']        ax2.hist(dept_scores, alpha=0.5, label=dept, bins=10)    ax2.set_xlabel('标准化分数')    ax2.set_ylabel('频数')    ax2.set_title('各部门标准化后分数分布')    ax2.legend()    ax2.grid(True, alpha=0.3)    # 3. 箱线图对比    ax3 = axes[10]    data_to_plot = [df_raw['原始分数'].values, df_standardized['标准化分数'].values]    ax3.boxplot(data_to_plot, labels=['原始分数''标准化分数'])    ax3.set_ylabel('分数')    ax3.set_title('标准化前后分数整体分布对比')    ax3.grid(True, alpha=0.3)    # 4. 绩效等级分布    ax4 = axes[11]    if '绩效等级' in df_standardized.columns:        grade_counts = df_standardized['绩效等级'].value_counts().sort_index()        colors = {'A''gold''B''silver''C''peru'}        bar_colors = [colors.get(grade, 'gray'for grade in grade_counts.index]        bars = ax4.bar(grade_counts.index, grade_counts.values, color=bar_colors, alpha=0.7)        # 在柱子上添加数量标签        for bar, count in zip(bars, grade_counts.values):            height = bar.get_height()            ax4.text(bar.get_x() + bar.get_width()/2., height + 0.1,                    f'{count}', ha='center', va='bottom', fontsize=10)        ax4.set_xlabel('绩效等级')        ax4.set_ylabel('人数')        ax4.set_title('绩效等级分布')        ax4.grid(True, alpha=0.3, axis='y')    plt.tight_layout()    plt.savefig('绩效标准化效果对比.png', dpi=300, bbox_inches='tight')    plt.show()# 生成可视化图表visualize_standardization(df, df_final)

VBA/Excel实现方案详解

对于习惯使用Excel的HR人员,VBA方案提供了无需编程环境、直接在Excel中操作的便捷选择。

标准化计算实现

在Excel中,我们可以通过以下步骤实现绩效标准化:

  1. 数据准备:将各部门评分放在同一工作表的不同列或不同工作表中

  2. 百分位数计算:使用PERCENTILE函数计算分位点

  3. Z-Score计算:使用AVERAGE和STDEV函数

  4. 强制排名:使用RANK函数结合百分比切分

以下是完整的VBA实现代码:

Option Explicit' 主过程:执行绩效标准化与强制排名Sub PerformanceStandardization()    Dim ws As Worksheet    Dim lastRow As Long, i As Long    Dim deptRange As Range, cell As Range    Dim scores As Collection    Dim standardizedScore As Double    ' 设置工作表    Set ws = ThisWorkbook.Worksheets("绩效数据")    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row    ' 添加新列用于标准化结果    ws.Cells(1, 4).Value = "标准化分数"    ws.Cells(1, 5).Value = "部门排名"    ws.Cells(1, 6).Value = "部门百分位"    ws.Cells(1, 7).Value = "绩效等级"    ' 获取所有部门    Dim departments As Object    Set departments = CreateObject("Scripting.Dictionary")    For i = 2 To lastRow        Dim dept As String        dept = ws.Cells(i, 2).Value ' B列为部门        If Not departments.Exists(dept) Then            Set scores = New Collection            departments.Add dept, scores        Else            Set scores = departments(dept)        End If        ' 收集部门分数        scores.Add ws.Cells(i, 3).Value ' C列为原始分数    Next i    ' 计算标准化分数    Dim deptKey As Variant    For Each deptKey In departments.Keys        Set scores = departments(deptKey)        ' 转换为数组计算统计量        Dim scoreArr() As Double        ReDim scoreArr(1 To scores.Count)        For i = 1 To scores.Count            scoreArr(i) = scores(i)        Next i        ' 计算均值和标准差        Dim meanVal As Double, stdDev As Double        meanVal = Application.WorksheetFunction.Average(scoreArr)        stdDev = Application.WorksheetFunction.StDev_S(scoreArr)        ' 标准化计算        Dim j As Long: j = 1        For i = 2 To lastRow            If ws.Cells(i, 2).Value = deptKey Then                If stdDev > 0 Then                    standardizedScore = 50 + ((ws.Cells(i, 3).Value - meanVal) / stdDev) * 10                    ' 限制在0-100分之间                    standardizedScore = Application.WorksheetFunction.Max(0, _                        Application.WorksheetFunction.Min(100, standardizedScore))                Else                    standardizedScore = 50                End If                ws.Cells(i, 4).Value = Round(standardizedScore, 1)                j = j + 1            End If        Next i    Next deptKey    ' 计算部门内排名和百分位    For Each deptKey In departments.Keys        Dim deptScores As Collection        Set deptScores = New Collection        ' 收集该部门标准化分数        For i = 2 To lastRow            If ws.Cells(i, 2).Value = deptKey Then                deptScores.Add ws.Cells(i, 4).Value            End If        Next i        ' 计算排名        Dim rankDict As Object        Set rankDict = CreateObject("Scripting.Dictionary")        ' 计算百分位排名        For i = 2 To lastRow            If ws.Cells(i, 2).Value = deptKey Then                Dim currentScore As Double                currentScore = ws.Cells(i, 4).Value                ' 计算排名                Dim rank As Long                rank = 1                Dim k As Long                For k = 2 To lastRow                    If ws.Cells(k, 2).Value = deptKey Then                        If ws.Cells(k, 4).Value > currentScore Then                            rank = rank + 1                        End If                    End If                Next k                ws.Cells(i, 5).Value = rank                ' 计算百分位                ws.Cells(i, 6).Value = 1 - (rank - 1/ (deptScores.Count - 1)            End If        Next i    Next deptKey    ' 全公司强制排名    Call ForceRankCompanyWide(ws, lastRow)    MsgBox "绩效标准化与强制排名完成!", vbInformationEnd Sub' 全公司强制排名Sub ForceRankCompanyWide(ws As Worksheet, lastRow As Long)    Dim i As Long    Dim totalEmployees As Long    ' 计算总人数    totalEmployees = lastRow - 1    ' 按标准化分数排序    Dim scores() As Double    ReDim scores(1 To totalEmployees)    For i = 1 To totalEmployees        scores(i) = ws.Cells(i + 14).Value    Next i    ' 计算排名    For i = 2 To lastRow        Dim rank As Long        rank = Application.WorksheetFunction.Rank(ws.Cells(i, 4).Value, _            ws.Range(ws.Cells(2, 4), ws.Cells(lastRow, 4)), 0)        ws.Cells(i, 7).Value = "待定"        ' 按比例分配绩效等级        Dim percentile As Double        percentile = rank / totalEmployees        If percentile <= 0.2 Then            ws.Cells(i, 7).Value = "A"        ElseIf percentile <= 0.9 Then            ws.Cells(i, 7).Value = "B"        Else            ws.Cells(i, 7).Value = "C"        End If    Next i    ' 格式化    With ws.Range("A1:G1")        .Font.Bold = True        .Interior.Color = RGB(217, 225, 242)    End With    With ws.Range("A1:G" & lastRow)        .Borders.LineStyle = xlContinuous        .HorizontalAlignment = xlCenter    End With    ' 条件格式:绩效等级    Dim rng As Range    Set rng = ws.Range("G2:G" & lastRow)    rng.FormatConditions.Delete    ' A级 - 金色    With rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""A""")        .Interior.Color = RGB(255, 215, 0) ' 金色        .Font.Color = RGB(000)    End With    ' B级 - 银色    With rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""B""")        .Interior.Color = RGB(192, 192, 192) ' 银色        .Font.Color = RGB(000)    End With    ' C级 - 铜色    With rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""C""")        .Interior.Color = RGB(205, 127, 50) ' 铜色        .Font.Color = RGB(255255255)    End WithEnd Sub

高级功能:动态调整与异常处理

' 动态调整绩效分布比例Sub AdjustPerformanceDistribution()    Dim ws As Worksheet    Set ws = ThisWorkbook.Worksheets("绩效数据")    ' 获取用户输入的分布比例    Dim ratioA As Double, ratioB As Double, ratioC As Double    ratioA = Application.InputBox("请输入A级比例(如0.2表示20%)", "绩效分布设置", 0.2, Type:=1)    ratioB = Application.InputBox("请输入B级比例(如0.7表示70%)", "绩效分布设置", 0.7, Type:=1)    ratioC = Application.InputBox("请输入C级比例(如0.1表示10%)", "绩效分布设置", 0.1, Type:=1)    ' 验证比例总和为1    If Abs(ratioA + ratioB + ratioC - 1) > 0.001 Then        MsgBox "比例总和必须为100%,请重新输入!", vbExclamation        Exit Sub    End If    ' 重新计算绩效等级    Dim lastRow As Long    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row    ' 按标准化分数排序    Dim scores As Collection    Set scores = New Collection    Dim i As Long    For i = 2 To lastRow        scores.Add ws.Cells(i, 4).Value    Next i    ' 获取排序后的分数    Dim sortedScores() As Double    ReDim sortedScores(1 To scores.Count)    For i = 1 To scores.Count        sortedScores(i) = scores(i)    Next i    ' 快速排序    Call QuickSort(sortedScores, 1, scores.Count)    ' 确定分界点    Dim cutoffA As Long, cutoffB As Long    cutoffA = Int(scores.Count * ratioA)    cutoffB = Int(scores.Count * (ratioA + ratioB))    ' 重新分配绩效等级    For i = 2 To lastRow        Dim currentScore As Double        currentScore = ws.Cells(i, 4).Value        ' 查找当前分数的排名        Dim rank As Long        rank = 1        Dim j As Long        For j = 1 To scores.Count            If sortedScores(j) > currentScore Then                rank = rank + 1            End If        Next j        ' 分配等级        If rank <= cutoffA Then            ws.Cells(i, 7).Value = "A"        ElseIf rank <= cutoffB Then            ws.Cells(i, 7).Value = "B"        Else            ws.Cells(i, 7).Value = "C"        End If    Next i    MsgBox "绩效分布已调整!A级:" & ratioA * 100 & "%,B级:" & ratioB * 100 & "%,C级:" & ratioC * 100 & "%", vbInformationEnd Sub' 快速排序算法Sub QuickSort(arr() As Doublefirst As Long, last As Long)    Dim pivot As Double    Dim i As Long, j As Long    Dim temp As Double    If first < last Then        pivot = arr((first + last) \ 2)        i = first        j = last        Do            Do While arr(i) > pivot                i = i + 1            Loop            Do While arr(j) < pivot                j = j - 1            Loop            If i <= j Then                temp = arr(i)                arr(i) = arr(j)                arr(j) = temp                i = i + 1                j = j - 1            End If        Loop While i <= j        If first < j Then QuickSort arr, first, j        If i < last Then QuickSort arr, i, last    End IfEnd Sub

两种方案对比与选择建议

Python方案优势

  1. 处理能力:适合大规模数据处理(千级以上员工)

  2. 灵活性:可轻松集成到现有数据分析流程

  3. 可视化:丰富的图表库支持深度分析

  4. 自动化:可部署为定期自动运行的任务

  5. 扩展性:易于添加机器学习等高级分析功能

VBA/Excel方案优势

  1. 易用性:无需额外软件,HR人员可直接操作

  2. 即时性:实时计算,立即查看结果

  3. 兼容性:与企业现有Excel流程无缝集成

  4. 透明度:每一步计算都可追踪验证

  5. 低门槛:基础版本无需编程知识

选择建议

  • 大型企业(员工数>1000):推荐Python方案,便于与HR系统集成

  • 中型企业(员工数100-1000):推荐Python为主,Excel为辅

  • 小型企业(员工数<100):Excel方案完全足够

  • 跨部门复杂场景:Python方案更灵活

  • 审计要求高:Excel方案更易解释和验证

最佳实践建议

  1. 数据验证:标准化前需识别并处理异常分数

  2. 结果复核:自动计算后需人工复核边界情况

  3. 沟通透明:向员工解释标准化方法的原理

  4. 政策稳定:绩效方法应保持年度一致性

  5. 持续优化:每年评估方法效果并微调参数

常见问题与解决方案

Q1:部门人数过少怎么办?

A:建议将5人以下部门合并为"职能支持"等虚拟部门处理

Q2:边界分数如何确定等级?

A:设置明确的决策规则,如同分时参考关键指标

Q3:如何处理特殊贡献员工?

A:建立破格机制,但需严格控制比例

Q4:标准化会扭曲部门内部差异吗?

A:合理选择标准化方法,Z-Score可保持原始分布形态

Q5:如何应对员工质疑?

A:公开算法逻辑,提供个人分数计算说明

结语

绩效评分的标准化与强制排名是现代企业绩效管理的重要工具。通过Python或VBA实现自动化处理,既能确保公平性,又能大幅提高工作效率。关键在于选择适合企业实际情况的技术方案,并建立配套的管理流程和沟通机制。

无论选择哪种技术路径,核心都是通过数据驱动的科学方法,将绩效评估从主观判断转变为客观比较,为人才发展和激励提供可靠依据。


知识测试

选择题

  1. 在进行跨部门绩效评分标准化时,以下哪种方法最能消除不同部门评分松紧度差异?

    A) 直接使用原始分数排名

    B) 统一加固定分数调整

    C) 百分位数排名法

    D) 乘以统一系数调整

  2. 使用Z-Score标准化绩效分数时,一个员工的原始分数为85分,其部门平均分为80分,标准差为5分,则标准化后分数是多少?(假设转换为50±10Z)

    A) 55分

    B) 60分

    C) 70分

    D) 90分

  3. 某公司采用强制分布政策:前20%为A,中间70%为B,后10%为C。如果销售部有15名员工,研发部有10名员工,采用分部门强制排名,则研发部应有多少名A级员工?

    A) 2名

    B) 3名

    C) 1名

    D) 无法确定

  4. 在Excel VBA方案中,要计算一组数据的标准差,应该使用哪个函数?

    A) Application.WorksheetFunction.StdevP

    B) Application.WorksheetFunction.Average

    C) Application.WorksheetFunction.Percentile

    D) Application.WorksheetFunction.Rank

  5. 当某个部门所有员工分数完全相同时,以下哪种标准化方法会失效?

    A) 百分位数法

    B) Min-Max归一化

    C) Z-Score标准化

    D) 直接排名法


答案

  1. C - 百分位数排名法完全基于部门内部排名,能有效消除部门间评分尺度差异

  2. B - Z = (85-80)/5 = 1,标准化分数 = 50 + 10×1 = 60分

  3. A - 10×20% = 2名,需四舍五入取整

  4. A - StdevP计算样本标准差,StdevS计算总体标准差

  5. C - 当所有分数相同时,标准差为0,Z-Score计算会出现除零错误

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 08:11:16 HTTP/2.0 GET : https://f.mffb.com.cn/a/498171.html
  2. 运行时间 : 0.097129s [ 吞吐率:10.30req/s ] 内存消耗:4,776.05kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ad655941ff42993c188531a78c558f28
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000839s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000915s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000336s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000302s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000531s ]
  6. SELECT * FROM `set` [ RunTime:0.000229s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000728s ]
  8. SELECT * FROM `article` WHERE `id` = 498171 LIMIT 1 [ RunTime:0.000498s ]
  9. UPDATE `article` SET `lasttime` = 1783037476 WHERE `id` = 498171 [ RunTime:0.007665s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000284s ]
  11. SELECT * FROM `article` WHERE `id` < 498171 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001017s ]
  12. SELECT * FROM `article` WHERE `id` > 498171 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000482s ]
  13. SELECT * FROM `article` WHERE `id` < 498171 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008492s ]
  14. SELECT * FROM `article` WHERE `id` < 498171 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005438s ]
  15. SELECT * FROM `article` WHERE `id` < 498171 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000975s ]
0.098739s