gpt4 book ai didi

neo4j - 在 Neo4j 中建模有关数学计算的元数据

转载 作者:行者123 更新时间:2023-12-04 13:57:25 26 4
gpt4 key购买 nike

我是论坛的新手,刚刚开始使用 Neo4J。为我冗长的问题和背景信息道歉,但我认为这有助于解释我试图理解的内容。

我经常为公司从事商业智能和数据仓库项目。当我们创建商业智能需求时,我们通常需要创建一个我们感兴趣的业务指标列表(例如销售收入、利润率、总费用),并记录如何使用来自我们底层系统的数据属性来计算这些业务指标。
通常,我们将大部分工作以数据需求电子表格的形式记录在 excel 中。我们创建了一个业务指标列表,然后是一堆带有描述、源数据属性、计算等的列。我想做的(作为个人项目)是开发一个应用程序,我们可以用它来记录这种类型的元数据信息。我已经阅读了一些 Neo4j 书籍和在线文章,我认为 Neo4j 非常适合这个用例,现在我正在尝试记录一个基本的数据模型来帮助我入门。

起初,我想出了一些相当直接的东西,如下图左图所示:

Sales Revenue = Unit_Price * Count_Units_Sold



First Attempt at Modelling Metrics & Attributes

然而,我很快意识到计算本身对我来说非常重要,我以后可能想要获取更多关于它的信息,例如添加不同版本的计算或添加注释以进一步描述它。我修改了模型,使“计算本身”成为一个单独的节点,如左上图所示。

但是,当我开始查看更复杂的指标时,我仍然不确定如何最好地表示计算的细节。如果我采用下面的例子,我会按如下方式建模。

Salary = Salary_Amount + Overtime_Amount – Tax Amount



More Complex Example

现在这清楚地表示了计算中使用的数据属性(3 个或它们),但我不知道如何表示计算本身。例如。通过首先将 Salary_Amount 添加到 Overtime_Amount 然后减去 Tax_Amount 来定义计算。当我有更复杂的计算涉及需要以特定顺序执行的除法和乘法时,这将变得更加复杂。
基本上我希望能够从模型中推断出计算如下:

Salary = Salary_Amount + Overtime_Amount – Tax Amount



与之相反:

Salary = Salary_Amount * Tax Amount / Overtime Amount



或者:

Salary = Tax Amount * Overtime Amount - Salary Amount



我正在寻找某种方法来定义计算节点,借此我可以对数据属性的使用方式应用排序。可能我应该只将计算作为文本字符串存储在计算的属性中,但我不禁想到这可能会让我痛苦,并限制我从图表中获取有用信息的能力。数据属性用于不同的计算。

注意:我确实看到了 this question在讨论类似主题但没有收到很多回复的论坛上,尽管我的问题很相似,但我认为提供更多背景信息可能会带来一些进一步的见解。

非常感谢,
迈克尔

在查看@ChristopheWillemsen 和@stdob-- 的答案后,我正在编辑这个问题。

首先非常感谢两位贡献者。答案和引用资料真的很有帮助,都满足了我的要求。根据@stdob 的回答,最初我倾向于使用反向波兰表示法——因为它提供了一种处理分组操作的巧妙方法(例如,我的数学公式中的括号)。然而,在尝试以两种方式对我的数据建模后,我发现我有一些额外的要求,我在我的第一篇文章中没有提到这些要求,即捕获逻辑表达式,例如“If、Where、Having”。基本上我希望能够捕获超越纯数学表达式的 ETL 类型转换规则,我认为@ChristopheWillemsen 的解决方案将支持这一点。

以下是我如何使用这种方法为我的基本公式建模:

Basic Calc following Method 1

但是,我还有更复杂的逻辑要建模。这些是 ETL 类型规则,在定义数据仓库或 BI 项目的业务需求时,它们通常会被捕获为伪代码或 SQL 的形式。下面是我定义 ETL 如何计算保险公司的新 claim 计数指标的逻辑的示例。

New Claims Count Calculation

这就是我如何在@ChristopheWillemsen 在下面的第一个答案中提供的解决方案上对此进行建模。

New Claims Count Modelled

你能看看这个,看看这是否是一个合适的建模方法。从需求的角度来看,我希望能够:
  • 重新构建逻辑,以便我可以将其呈现给最终用户
  • 回答诸如需要该属性用于哪些指标之类的问题。
  • 进行假设分析(例如,如果属性值发生变化,对使用该属性的指标有何影响。

  • 这看起来是对此类信息建模的合适方法吗?任何建议或改进将受到欢迎?

    最佳答案

    这是一个非常有趣的用例,对我来说它接近于我们所说的规则引擎。

    我在 neo4j 博客上发布了一个关于它的用例:https://neo4j.com/blog/uncommon-use-cases-graph-databases/

    当然,有多种方法可以实现您想要的目标,我将分享我想到的一种方法。

    我会将计算视为 Operations 的有序列表它们的标签定义了哪些不同的性质。例如,您将有一个 Operation具有附加标签的节点 Addition它的下一个操作可以是 Operation带有标签的节点 Substraction .

    一个简单的模型可以这样表示:

    enter image description here

    您的 Operation然后节点将引用它们正在使用的传入值。

    在更复杂的情况下,您希望表示可以在括号之间定义数学分组的一组操作,同样可以像这样完成模型:

    enter image description here

    可能性几乎是无限的。

    请注意,在计算机科学中,这种技术也称为规范模式:https://www.martinfowler.com/apsupp/spec.pdf

    关于neo4j - 在 Neo4j 中建模有关数学计算的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42022564/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com