F#和"企业级"报告

JDB*_*JDB 35 .net f# reporting etl

根据您的实际经验,白皮书或其他受人尊敬的可参考研究,F#目前是企业/企业级报告的可行工具吗?

注意:在投票将此问题视为"不具有建设性"之前,请阅读底部的位.

背景
我目前在一家大公司工作,该公司大量使用许多不同的报告工具,包括(但不限于)SAS,Cognos,SSRS甚至是一小部分COBOL.每个工具都有其合适的位置,其中许多工具在功能设置等方面具有相同的功能.我们的大多数工具都能够相对轻松地输出到PDF,Excel和数据库,并且在这些情况下工作得非常好.

不幸的是,我的组织和许多人一样,使用Excel电子表格,喜欢它或者讨厌它,我们花了很多时间编写.NET控制台应用程序来从Excel电子表格中提取信息并将信息插入到Excel电子表格中.(我对争论这种方法的优点或不利感兴趣.它就是这样,我无法改变它.)

与上面列出的报告技术一样,当涉及到电子表格中的高级ETL时,它们就会失败.它们并非专为它而设计,虽然它们完全擅长将报表格式化为Excel电子表格,但它们并不擅长更新现有电子表格或以某种非常具体的方式提取数据(仅提取以红色突出显示的值,例如).因此,我们最终编写了大量的.NET控制台应用程序来完成这项工作.(再次 - 对辩论方法不感兴趣.它就是它.我知道 - 我也不喜欢它.)

在我看来,.NET是一个非常棒的框架,足够灵活,可以处理几乎所有的编程任务,因此我们理论上可以处理.NET中的所有报告.但是 - 尝试处理.NET中的所有报告需要太长时间.我们必须自己编写所有的样板材料.我喜欢利用我们已有的实际报告工具的强大功能,简单性和健壮性.

因此,我们最终为单个任务编写两个应用程序 - 例如,SAS作业从多个数据源加载数据,执行转换并将结果存储在永久或临时位置,以及第二个.NET作业结果并将它们加载到电子表格中.(我知道.)


在过去的几年里,我一直看到并听到很多关于F#的观点,我自己也有点涉足过它.我在大学里学过OCAML,我喜欢函数式编程.如果需要,我很乐意在单一平台(如果不是单一语言)上为特定报告进行所有编程.现在的问题,虽然是F#语言和.NET框架是否完全准备好提供企业级报告-和我说的是报告必须运行准确高效.微软当然很难卖掉它,但我想知道在其他报告技术方面有经验的人是否真的在生产环境中尝试过.它如何与其他报告技术进行比较,是否可以轻松集成到企业环境中?你是如何解决安全问题的?做得对,F#需要什么样的内存配置文件(我们说的是数百万条记录)?它是否很好地处理表格数据?它有效吗?维护有多容易(特别是如果代码增长)?什么样的第三方附加组件,插件等需要什么才能使某些东西工作(或者它可以开箱即用)?与其他报告系统相比,需要多少工作(编程时间等)(类似结果)?

如果您没有F#的经验,或者您只使用F#,那么我对您的意见并不特别感兴趣 - 我想听听那些实际弥合差距的人,并且可以从经验,机会和使用F#作为大数据的报告引擎(数百万条记录,输出为各种格式)的缺陷.

我已经看到一些问题已经涵盖了一些基础:

但他们已经有几年了.以后的几个版本,是F#的任务吗?或者我是一只狗吠叫错误的树?

编辑

为了清楚起见,我对F#新的信息丰富的编程特别感兴趣.在F#3.0之前,它只是一项有趣的技术,但F#最近增加了使用数据库类型提供程序及其查询表达式的功能,使其看起来像是其他报表创作技术的可行替代方案.微软当然暗示它是.

一个可接受的答案将包含实施F#内置的企业级报告引擎的第一手账户(或对案例研究的参考),以及与任何绩效收益或损失等的其他报告技术的比较.它不会必须过于详细 - 足以说服普通(有能力的)经理F#将是批量/批量数据处理的适当/不适当的技术.它完成了吗?谁干的?结果是什么?实施有多复杂(相对于类似技术)?它表现良好吗?


我为什么要问一个主观问题?
像大多数优秀的stackoverflow成员一样,我经常投票来关闭主观问题.根据常见问题解答,应该避免主观问题,但不要完全禁止.常见问题解答链接到我试图遵循的六个主要问题指南.请在投票结束此问题之前阅读这些指南.

Jon*_*rop 28

它如何与其他报告技术进行比较,是否可以轻松集成到企业环境中?

我不知道F#如何与其他报告技术进行比较,但我已将其部署在多个企业环境中,它与C#基本相同,即简单而强大.

你是如何解决安全问题的?

与C#相同.

做得对,F#需要什么样的内存配置文件(我们说的是数百万条记录)?

我在使用5年后在.NET中发现了一个GC错误,并不是特定于F#.我在使用大型对象时遇到了一些问题(同样,不是F#特定的),但是,一般来说,GC非常强大且高效并且可以积极地收集.

我已经处理了数十亿条记录,发现F#非常快且非常可靠.请注意,F#用于Microsoft的Bing AdCenter(用于广告放置)和Microsoft的Halo 3,两者都需要处理TB级数据集.

它是否很好地处理表格数据?

是的,你有简单的并行性(参见Array.Parallel模块),但它相对于其他工具的主要优势在于操纵树和图等结构化数据.

它有效吗?

是.

我们目前的客户是世界上最大的保险公司之一,从C++到F#的性能改进提高了10倍(代码大小减少了10倍).

之前的客户看到了将编译器从OCaml转移到F#的性能改进.这是令人印象深刻的,因为OCaml是专为编写编译器而设计的,速度非常快.

一位前客户让我们重写了他们的交易平台,即使我们从非GC C++迁移到GC'd F#,我们也看到了100倍的吞吐量和延迟改进.

维护有多容易(特别是如果代码增长)?

易于维护.在ML中,添加函数是不费脑子的,当扩展联合类型时,静态类型系统捕获会给你很多反馈.

我们现在的客户在去年四月推出他们的第一个F#代码,尽管没有接受过F#(或OCaml)的任何培训,但它的维护者没有任何问题.

什么样的第三方附加组件,插件等需要什么才能使某些东西工作(或者它可以开箱即用)?

我们从未使用任何(但我们卖两个!).我考虑过的唯一第三方的东西是WPF控件,它们同样不是F#特有的.

与其他报告系统相比,需要多少工作(编程时间等)(类似结果)?

不知道,对不起.看起来我们已经开始使用Dialogue和HP Extreme,所以我很快就会发现......

实施有多复杂(相对于类似技术)?

F#代码比C++,C#和Java等旧主流语言简单得多.

我想强调的是,当您使用它来攻击使用更传统的工具来解决太复杂的问题时,F#确实会带来好处,而不仅仅是在F#中重写旧代码.

例如,我们当前的客户一直在使用一个商业规则引擎,花费大约1,000,000英镑购买,但它不能解决他们的业务问题(与大桌子挣扎,与数学斗争)所以我给他们写了一个定制业务的演示规则引擎在一周内就有大约1,000行F#代码.我无法用任何其他工具做到这一点.

  • "......但它相对于其他工具的主要优势在于操纵结构化数据,如树木和图形." 在过去的一年里,我阅读并关注了大部分关于F#的评论(和论点).我从未发现它们是不正确的.报价也不例外.我的公司正在使用VoltDB来计算某些匹配项.我在F#中使用内存中类似于trie的结构重新编写了整个模块.即使对于复杂的查询,我的800系列F#也可以轻松击败VoltDB.不,我的F#没有执行VoltDB操作的逻辑子集.编辑:我的trie有大约3.2x10 ^ 6个节点. (5认同)

mol*_*ymb 26

回答你的问题 - 你走在正确的轨道上.我说这是建立了大量报告和大数据系统的人.我在Scala和R的eBay上构建了一个大数据分析平台.最近,我为MSRC构建了Hadoop/Hive F#类型提供程序.我可以说F#.net堆栈没有为此目的而接近.出色的性能,易于使用的原生互操作,大量的库,REPL,类型提供程序,WPF用于制图.自MSRC以来,我一直在构建一个可以嵌入到Excel中的全功能F#IDE,您可以使用类型提供程序与完全使用Intelisense的工作簿进行交互.如果您愿意,请给我发电子邮件.

编辑;

当然; 我使用内存数据和一个从头开始的查询引擎替换了我的一个客户Infobright数据库和F#.它将10英寸数据的查询时间从30分钟减少到100毫秒.整个过程花了我6个小时来构建,只有几百行代码.该数据库是基于Web的报告服务的后端,该服务在升级后变得非常敏感.

虽然在eBay上我曾经在R中进行大数据(批量/批量)后期处理.基本的平面文件是10英镑的GB,所以它们对Excel来说太大了.R在聚合过程中进行了大量不必要的内存分配; 10GB将变为40GB,并且一旦开始点击页面文件就会爬行停止.根据数据,它需要几分钟,几小时或永远不会完成.有付费的R库可以解决这个问题,但它们在其他方面受到限制.在F#中进行聚合会将此值降低到100毫秒,并且空间不变.这些聚合是10行代码,与R大致相同,但更容易理解并进行类型检查.由于输入错误而在处理一小时后R工作失败令人愤怒.

我曾经使用OLAP多维数据集(例如Microsoft Analysis Services),但这些系统已被大数据集群和大内存机器完全黯然失色.现在很容易用F#和.net 4.5中的新垃圾收集器构建自己的Big Memory机器.

希望有所帮助.

  • 我很想看到你的嵌入式F#IDE!可能会成为一个很棒的博客文章? (7认同)

Jac*_* P. 5

我不确定这有多大帮助,但在微软的网站上有一些关于F#的白皮书.我在下面链接的第一个特别提到了统计处理/数据库,因此它可能是三者中最有用的.

还有一个F#R类型提供程序,它使F#和R之间的互操作变得容易.