当我们拿到网络得原始性能指标后,要根据厂家或者集团规范对原始性能指标进行统计生成各种指标,甚至要进行按网元或者按时间或者两个粒度都要考虑的进行指标统计并生成规定格式的报表,而且这个工作是日复一日,年复一件的重复去做,你有没有为此而烦恼呢,有没有想过有什么办法,让这样的统计工作变成一件非常惬意的事情呢。
1 背景资料
(1) 原始的性能指标
起始时间 | 周期 | 网元名称 | NB-IoT小区 | NB-IoT小区NPUSCH选择重复次数为1的次数 (无) | NB-IoT小区NPUSCH选择重复次数为2的次数 (无) | NB-IoT小区NPUSCH选择重复次数为4的次数 (无) | NB-IoT小区NPUSCH选择重复次数为8的次数 (无) | NB-IoT小区NPUSCH选择重复次数为16的次数 (无) | NB-IoT小区NPUSCH选择重复次数为32的次数 (无) | NB-IoT小区NPUSCH选择重复次数为64的次数 (无) | NB-IoT小区NPUSCH选择重复次数为128的次数 (无) |
2018/5/12 0:00 | 1440 | 大马士革NB-HLH | eNodeB名称=大马士革NB-HLH, 本地小区标识=183, 小区名称=大马士革NB-HLH-3, eNodeB标识=403331, 小区双工模式=CELL_FDD, NbCellFlag=TRUE | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2018/5/12 0:00 | 1440 | 东古塔NB-HLH | eNodeB名称=东古塔NB-HLH, 本地小区标识=181, 小区名称=东古塔NB-HLH-1, eNodeB标识=403490, 小区双工模式=CELL_FDD, NbCellFlag=TRUE | 3 | 236 | 0 | 0 | 0 | 7415 | 0 | 0 |
这是一个最简化的例子,只留下了NB-IoT小区NPUSCH选择重复次数为X的次数的指标
(2) 基站归属地市或地区清单
站名 | 地市 |
大马士革NB-HLH | 叙利亚 |
东古塔NB-HLH | 叙利亚 |
德黑兰NB-HLH | 伊朗 |
(3) 希望得到的统计报告:
维度 | 覆盖 | ||||||
数据来源 | 网管数据 | 网管数据 | 网管数据 | 网管数据 | MR数据 | ||
省份 | 城市 | 厂家 | 上行低重复次数占比 | 下行低重复次数占比 | NB-IoT覆盖等级2的用户数占比 | NB-IoT覆盖等级2的RRC连接建立次数占比 | MR覆盖率 |
阿拉伯 | 叙利亚 | 华为 | 1.00% | 1.00% | 1.00% | 1.00% | 不支持 |
阿拉伯 | 伊朗 | 华为 | 1.00% | 1.00% | 1.00% | 1.00% | 不支持 |
(4) 已知的公式定义:
分子 | 分母 | 上行低重复次数占比 |
NB-IoT小区NPUSCH选择重复次数为1的次数 | NB-IoT小区NPUSCH选择重复次数为1的次数+ | NB-IoT小区NPUSCH选择重复次数为1的次数/ |
(5) 请问您会怎么去做呢?
思考一下,稍后回来!
二 Access性能统计之旅
思考了之后,您可能已经有了一个Excel下实现的成熟思路了,而且您可能已经在日复一日的使用着,但是你对其所需要的Vba代码编写可能比较熟悉,那么问题可能还不那么难,但是如果你没有VBA代码的帮助,而仅仅利用内置函数这些手工操作,估计你早已经面临崩溃,或者已经被折磨的没有脾气,跟僵尸般的任劳任怨耗费青春着了。
下面我们开启Access的统计之旅:
(1) 创建空的Access文件,并将规范的Excel性能引入其中









看见了没有,Excel数据已经可以在Access中直接访问了,这是链接Excel文件的方式,当你数据发生变化,你只要保证Excel的文件名,工作表名,文件存放位置没有发生改变,那么一切都跟没有发生一样,但是你却在Access中能看到新的数据。
当然Excel数据也有不采用链接的方式,就是数据完全放入Access表中,而不再依赖原Excel文件,当Excel的数据发生变化时,你又得重新将更新后的数据导入进来。
当然还有非常简便的方法引入数据,就是直接在Excel下复制数据,然后在Access的表界面粘贴,Access将会自动创建新表,并使用复制区的第一行作为字段名,以工作表名称作为表名。
(2) 下来我们对导入的性能数据进行规范
A 网元对象的规范
默认网元除了eNodeB名称外,其他的都被整合在NB-IoT小区名里,并不便于在Access下使用,所以,首先我们得把小区名称,eNodeB标识,本地小区标识等信息单独提取出来,方法如下:
小区名称的获取:
原始的NB-IoT小区字段的内容为:eNodeB名称=大马士革NB-HLH, 本地小区标识=183, 小区名称=大马士革NB-HLH-3,eNodeB标识=403331, 小区双工模式=CELL_FDD, NbCellFlag=TRUE
其中包含有eNodeB标识和小区名称以及本地小区标识可能是我们经常使用到的数值,但是混在这个里面是不方便使用的,我们必须将他们根据名称提取出来
小区名称提取:
Mid([NB小区接入].[NB-IoT小区],InStr([NB小区接入].[NB-IoT小区],"小区名称=")+5,InStr([NB小区接入].[NB-IoT小区],",eNodeB标识")-InStr([NB小区接入].[NB-IoT小区],"小区名称=")-5)
因为小区名称的特征为,前面是5个字符"小区名称=",后面是",eNodeB标识"
提取eNodeB的原理一样:
Mid([NB小区接入].[NB-IoT小区],InStr([NB小区接入].[NB-IoT小区],"eNodeB标识=")+9,InStr([NB小区接入].[NB-IoT小区],", 小区双工模式")-InStr([NB小区接入].[NB-IoT小区],"eNodeB标识=")-9)
本地小区标识的提取就不在话下了:
Mid([NB小区接入].[NB-IoT小区],InStr([NB小区接入].[NB-IoT小区],"本地小区标识=")+7,InStr([NB小区接入].[NB-IoT小区],", 小区名称")-InStr([NB小区接入].[NB-IoT小区],"本地小区标识=")-7)
给大家留下一个思考题,如何提取最后一个NbCellFlag呢?
算了不卖关子了,还是也贴上来吧,注意空格,注意空格,注意空格!
Mid([NB小区接入].[NB-IoT小区],InStr([NB小区接入].[NB-IoT小区]," NbCellFlag=")+12,Len([NB小区接入].[NB-IoT小区])-InStr([NB小区接入].[NB-IoT小区]," NbCellFlag=")-11)








同理:


B 日期时间的规范
首先我们把日期时间格式的起始时间分裂为日期和时间两个字段,便于按日或按时等更加灵活的统计
获得日期的方法如下:
WeekNo:DatePart("ww",[起始时间],6)
Date:DateValue(Format([起始时间],"yyyy/mm/dd"))
Time:TimeValue(Format([起始时间],"短时间"))
实现过程同网元对象的规范,插入一列后,在生成器里填入以上Date或Time内容。

C 对性能数据进行计算(不进行分类汇总,以最小单元进行)
根据公式要求,分子为:NB-IoT小区NPUSCH选择重复次数为1的次数
也就是将统计指标NB-IoT小区NPUSCH选择重复次数为1的次数 (无) 更名为:NBIoT小区NPUSCH选择重复次数为1的次数,为了编写查询等方便,在更改后的名称中建议去除”-””(“”)“等有其他意义的符号和不必要的单位,并且尽可能是更改后的名称简短精炼又不产生歧义。


下来再做分母:
可通过复制修改其中个别字符的方法,快速生成,过程如下:

然后复制粘贴修改



至此,得到完整的分母。
分子,分母都有了,下来是生成KPI的关键时刻了,新增一列,使用生成器,写上如下函数,第一个上行低重复次数占比指标就大功告成了。

如果你还打算做下行等分子分母,方法同上,就是简单的重复,怎样做的更快更好,就靠大家自己琢磨了。




并保存为查询:NB小区接入整理


执行后显示的结果就是这样噢!
怎么执行的呢,就是开始-数据视图啦!
(3) 指标统计
A 性能数据进行统计汇总(以自己期望的网元或粒度进行统计)
这里我们打算统计到地市级别,并且以天为粒度
为了做地区级的统计,需要先将基站清单表导入或链接进来
创建新的查询,添加查询NB小区接入整理,跟上面的添加表一个道理。

关键的一步,将NB基站清单的站名字段和NB小区接入整理的网元字段连起来,其实就是用鼠标把站名拖到网元名称的位置。他们之间就有了一道连线了。


表行有文字的字段行是直接用鼠标从上边的对应表字段中拖下来的(或双击字段也可以),表行没文字的,字段行的内容是手工输入进去的。
下载关键的一步来了:,看设计菜单右上角的大大的汇总按钮,点击:

点击后默认效果是这样的,需要修改为如下这个样子:

并且,字段一行的内容要手工修改,目的还是字段改名,免得将来系统默认给你改名为 XX之总计,看着很别扭的,而且重用不便。


不过占比这一字段的修改就有点特殊了。


然后修改这一列的属性-格式-百分比,保存查询为:NB小区接入统计-全网

切换到数据视图看看效果了:

你的报表里面不想要分子分母的合计值这一列,那好办呢:
继续以NB小区接入统计-全网为基准建立查询,只选需要的列即可:


看到了么,这是做一个指标的过程样板,如果你慢慢花点时间适应并理解,然后自己把其他的指标也加进去,你会发现,以后这类重复的指标统计工作简直是时间最美妙的工作,因为你几乎99%的时间都是无事可干状态了;别想的太美了,能者向来多劳,而且能者总是为了给自己节省时间而花了更多的时间学习进步,最后活从不少干的;那就看你愿意每日操作复印机终老还是愿意挖空心思折腾终老了。
这个入门如果你能入门,那么你就真的有门了。
有人说,这个操作还是有点麻烦,干脆给我来个一键打开报表岂不更好,好吧,好吧,这个不得不增加一点点代码了:
(4) 生成菜单和按钮
A 创建-窗体设计-按钮-取消

按钮上右键-属性-全部,修改标题为打开统计报表,名称改为btnOpenReport

再点击事件-单击-事件过程

选完后点击后面的三个点:

哈哈,打开了VB编辑器,添加一行代码:

保存代码推出编辑器,再点保存,保存窗体名称为Main


点击视图,看看效果噢!
是不是一键打开报表。
想不想这个Access库一打开就自动打开窗体呢,那就再改点东西吧

Access选项-当前数据库

看到显示窗体哪一项了没,点下拉箭头试试吧。
我把我的绝活从头到尾都掏出来了,你再不努力我也没办法了,愿意做螺丝钉,不做火车头,我也没办法了。
最后附上本文的完整结果样本库。





