5

好吧,我希望这不是一个太宽泛的问题,但我的好奇心战胜了我。我在一家大型保险公司工作。我们正在构建 Excel 电子表格,用于处理人寿保险单的未来现金价值预测。这些是相当大的工作簿(40-50mb),有大量的工作表和列,为了准确地预测现金价值,必须考虑大量的变量。

这将如何构建为桌面或业务应用程序?对于初学者来说,我非常了解 .net,但我在思考电子表格思维方式之外以及如何将 .net 应用于类似的东西时遇到了麻烦。您将如何跟踪代码中的计算,该计算需要 3 或 4 页,在电子表格中每 1300 行有 60 列?以及根据年龄、性别、吸烟者/非吸烟者等输入动态变化的利率、费用和其他影响政策的因素……

4

8 回答 8

4

我敢打赌,您的公司每年的收入超过 1B 美元,全部基于 Excel 电子表格。你并不孤单。

我会首先考虑问题而不是 Excel 电子表格。什么是业务问题?你能用物体建模吗?我看到了一些对象: 政策,以及所有随之而来的 Coverage 和 Class 子项;被保险人,具有性别、吸烟者等特征 - 你明白了。

投影听起来像是您将拥有一些“假设”变量,这些变量将具有一些您会改变的统计属性。您的工作将是运行大量类似蒙特卡罗的模拟,这些模拟通过从样本中提取并计算输出来改变变量。您的结果将是具有标准偏差和置信水平的预计平均值。

可能是大规模并行计算的良好候选者。

计算的依据是什么?有什么知名的模型可以分享吗?也许这会给出一个提示。

于 2009-07-08T22:02:38.137 回答
3

还要确保不要使用浮点数或双精度数进行涉及金钱的计算。使用十进制。

于 2009-07-08T22:27:55.510 回答
2

这真的是一个简单的问题……答案很复杂。

您在问:我如何计划一个复杂的软件项目?

了解您的环境(听起来像您所做的那样):

了解软件工程:

了解您的语言/开发环境:


  1. 第一步是弄清楚您作为开发人员的工作方式。
  2. 计划好你将要或可以采取的步骤。
  3. 将一切简化到最低限度。
  4. 重新审视你的行动清单。
  5. 嘲笑它。
  6. 去做吧。

如果您对开始感到紧张,那么我将创建一个简单的功能原型。从像Balsamiq Mockups之类的可视化项目开始,这样您就可以看到拼图的每个部分是如何组合在一起的。

如果您花几天时间研究软件工程方法,您将为自己节省数小时的头痛。从那些已经完成您正在尝试做的事情的 alpha 极客给我们的良好实践开始。

于 2009-07-08T22:09:59.727 回答
1

SpreadsheetGear for .NET可以让您直接在您的 .NET 应用程序中使用您的 Excel 模型,而无需使用 Excel,并且每次业务人员想要更新模型时都无需花费大量时间转换为 C# 或 VB。

如果您想亲自试用,可以在此处下载免费试用版。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-07-10T22:21:35.083 回答
0

考虑一下电子表格,因为很多东西都在比 C# 代码更高的抽象级别上工作。

因此,要在 .Net 中重新实现您的工作表,您有一些广泛的方法

  1. 自定义临时解决方案,在您的问题域中具有许多狭窄的特定功能
  2. 或者,您可以重新实现电子表格的概念。从 maxtrix 值的持久性和视图中拆分计算引擎,该计算引擎评估具有单元之间可选依赖关系的表达式矩阵。将数据存储在您喜欢的数据存储(xml、relationalDB)中,创建一个 Web/桌面应用程序来编辑和读取结果并使用自定义引擎对其进行评估。
于 2009-07-08T22:33:23.970 回答
0

添加一些细节:

  • 单元格值成为数据库中的变量或条目。例如,B1 的公式不是 = A1 + 2(其中 A1 包含给定策略的小部件数量),而是:

    var widgets = (from policy in db.Policies select new {policy.widgets}).First().widgets;
    var moreWidgets = widgets + 2;

  • 函数和宏被移植——例如,Round(B1, 0) 变成 Math.Round(moreWidgets, 0, MidpointRounding.AwayFromZero)

  • 相关数据和功能被分组到类和对象实例中。
  • Sheets成为存储的数据库表和UI的标签页/对话框/网页等。
  • 您可以为一次输入/审查的数据制作表单:

名字:[________________]
姓氏:[________________]
SSN:[________________]

做这一切的好处(假设它做得很好)是:

  • 改进的组织,以便可以更轻松地找到功能以进行重用/增强。
  • 提高性能
  • 对数据的共享、实时访问,包括聚合当前分布在多个文件中的数据。
  • 一个全新的功能世界——也许你想添加语音合成或你有什么。
于 2009-07-08T23:42:59.540 回答
0

您必须一次将事情分解成一个部分,然后从数据库设计开始。考虑基础表。您可以浏览 excel 中的每个工作表,并考虑如果您获取相关信息并将其放入数据库表中会是什么样子。

数据库视图非常适合进行基本数学运算,因为它可以基于许多表进行计算并以良好的格式显示结果。

于 2009-07-08T22:00:11.293 回答
0

这是我要采取的方法:

  • 将您的数据(包含 60 列/1,300 行的 3-4 页中的内容)存储在数据库或其他数据存储中。
  • 通过使用 DB 函数(从 blah 中选择 sum(foo);)、临时表、内存数组等进行计算
  • 将计算保存在数据存储中(以便以后更轻松地检索和审核)
于 2009-07-08T22:01:26.187 回答