马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
x
本帖最后由 千剑公子 于 2020-8-22 10:25 编辑
有兴趣交流斯伦贝谢OFM软件相关使用技巧的可以加QQ群870854490。
前言 之前曾经在网上找到过一篇前人写的有关学习OFM软件的心得,名字很普通,叫《OFM软件学习总结》。虽然我下载后放在硬盘里面尘封许久,也偶尔拾起,发现有诸多地方值得我们学习和探讨,但同时也表示很多地方看不太懂,可能我自己理解有误,也可能是前人写错了。 我在这里抛砖引玉,有兴趣的可以讨论下。这也是写以下这篇帖子的初衷。最后对前人的努力表示感谢,帖子中间可能有些文字直接是引用的,如果有侵权的地方,请联系我以便及时处理。 正文 这篇帖子主要想跟大家探讨下OFM软件的灵魂——变量,它是OFM一切模块或者功能的核心。 概括起来,OFM中的变量类型大致有三种,分别是Project Variables(工程变量)、User Functions(用户函数)以及2014版开放了API以后才引入的Plug-infunctions(插件函数)。 限于篇幅,这篇帖子主要讨论第一种——工程变量。 其实有很多分类方法可以来对工程变量继续分类,例如基于数据的时间频率分,可以有月度、日度、不定期(我不喜欢称之为“散点数据”,因为这种称法主要强调是数据的分散度,而不是时间频率);基于数据的类型分,可以有日期型、数值型、字符串(或文本)型。 OFM中共有三种不同类型的工程变量:input (table) variables(输入变量)、calculated variables(计算变量)和calculated fields(计算字段)。 每次当有人问我什么输入变量、计算变量、计算字段和系统函数,以及它们之间大概的区别的时候,我都喜欢打一个我觉得不是非常恰当的比喻。 我会告诉他,你可以这样去理解,就好比我们做一道菜,输入变量就是“食材”,而内置的245个系统函数就是“烹饪方法”,得到的较为简单的家常菜就是计算字段,更为复杂的硬菜就是计算变量。换句话说,我们这些厨师通过系统函数这些烹饪方法对作为食材的输入变量进行加工,得到的菜就是计算字段或者计算变量。 下面将会挨个讨论上面所提到的工程变量——输入变量、计算变量和计算字段。 1. 输入变量 输入变量之所以有时候又被直接称为表格变量(table variables),是因为它是底层数据库的表格中“实际”存放的“原始字段数据”(raw data),是形式最简单的变量。通常命名方式为“表格名.字段名”。换句话说,输入变量是真实存在于底层数据库的表格中的,不管你通过哪种方式去查看(比如OFM中的Data Grid或者直接打开OFM底层数据库),都能通过表格名+字段名的查找方式去直接找到对应于某个特定输入变量的真实字段及其中存放的数据。 “在OFM数据库中属于原始数据,理论上讲只包括日报数据和少量的措施数据。而月报数据中除产量劈分数据外,其它都不应属于输入变量,而应该是计算字段,因为这些数据都可以从日报数据生成。由此可见,输入变量数据相对较少,也容易把握,是构成整个OFM数据库的基础,它的准确与否至关重要。” 以上这段话的前面部分和后面部分我都还是赞同,严格意义的原始数据确实是日报数据和少量的措施作业措施(我看也有人称之为井史数据,英文叫events),而且月报数据、年报数据都是基于日报数据统计得到的,但还有试油试采数据呢,这不是能基于日报数据得到吧?所以,其实OFM并没有基于时间频率对于输入变量进行严格区分,根据其定义可以知道,只要是来自于底层数据库的表格中“实际”存放的“原始字段数据”都是输入变量。还有就是输入变量无所谓多寡,这主要看用户的数据量了,不过它确实是构成整个OFM数据库的基础,它的准确与否至关重要(因为它就是原始数据!)! 2. 计算变量 计算变量属于衍生变量,是利用系统函数对输入变量以及其它计算变量进行再加工后所得到的结果。它通过对输入变量和其它计算变量的不同组合,实现不同的功能,对生产数据进行非常灵活的深层次数据挖掘。这也是OFM功能强大且应用灵活的主要原因。 与输入变量的区别: 计算变量仅保存计算变量的定义(计算公式或计算方法),而不保存实际计算结果(实体数据)。因此计算变量并不属于OFM数据库的有机组成部分,因为它本身就不包含数据,它应该属于OFM数据库的具体应用。这样会造成两个结果,一方面是可以实现计算变量的导入、导出和复制等操作;另一方面是计算变量的值会随时间改变,特别是当计算变量中所调用的项目数据更新后。 计算变量的优点: 1)应用灵活、功能强大; 2)用户总能得到最新的计算结果数据,且永远不用担心项目数据库的存储容量限制。 3. 计算字段 在开始介绍计算字段之前,想给大家提个问题:为什么OFM在已经引入了应用灵活且功能强大的计算变量之后,还专门又引入了计算字段这样的一种工程变量类型? 这是因为即使调用相同的变量(输入变量或计算变量),并采用相同的计算公式,如果计算顺序不同,所得到的计算结果也不同。类似于我之前打的比方,如果对于相同的食材(原材料),即使厨师采用相同的烹饪手段,如果烹饪顺序不同,最终所得到的菜也会不同。而我们在很多时候,确实就需要一种不同于计算变量所定义的计算顺序的变量——这就是计算字段。 计算字段是OFM中一类较为特殊的变量类型,它也属于衍生变量。引入初衷是为了弥补由于计算变量的计算顺序而导致OFM计算功能的使用范围相对较窄的短板。 顾名思义,计算字段是“用于计算的字段”(Calculated Fields),它会出现在OFM的SchemaTable(用户自定义数据表管理器)中,是实际的物理表格的延伸,而不会写入物理表格。但注意用户需要拥有OFM底层数据库的写入权限,不然计算字段就没办法保存。 与计算变量的区别: 1)计算字段与计算变量之间的最大区别是它们的计算顺序的不同。计算字段是先进行计算字段内的计算再进行其它计算,而计算变量则恰好相反。如此可能导致即使对于同一公式,如果采用计算字段和计算变量进行计算,得到的结果也可能会相差很多。 2)计算字段由计算公式和实体数据(输入变量)构成,它和输入变量共同构成了完整的OFM数据库。而计算变量则既不包含具体数据,也不属于OFM数据库的组成部分。 3)计算字段只用于对输入变量进行简单的计算,可用的操作符也仅有简单的“+、-、*、/和[ ] ”,无系统函数可调用,其功能性和灵活性远远不及计算变量,只能对数据进行简单的初级处理。 4)计算字段不能进行跨表操作,而计算变量几乎没能任何限制,功能强大。 与输入变量的区别: 1)输入变量是底层数据库的表格中实际存放的原始字段数据,而计算字段则是虚拟地存放于OFM的SchemaTable中用于计算的变量,是物理表格的延伸。 2)所有的计算字段和计算变量从本质上而言,都来源于输入变量,是对输入变量的再加工。 |