【问题标题】:Version control for reports (git)报告的版本控制 (git)
【发布时间】:2011-03-26 14:17:24
【问题描述】:

我有一个特定的报告,我被要求不时运行。每次的细节都略有不同——不同的日期范围,不同的选择标准——但在结构上,报告相当稳定。不过,我确实会不时进行一些结构性更改。

我对这些报告有两个希望:

  1. 为了能够在以后复制任何报告。
  2. 能够查看随着时间的推移对报告所做的结构更改。

现在,我只有一个包含主脚本的文件夹,我会针对报告的每次迭代对其进行修改,以及用于保存主脚本快照和每次运行数据的子文件夹。

也许这已经足够了。但是我已经开始使用 git 来管理我的(更复杂的)数据分析脚本,我想知道是否有一种方法可以在这里(以及无数类似的报告)使用它来实现更强大的版本控制。

我可以想到几种不同的方法来做到这一点:为每个报表创建一个分支,但只将结构更改合并回主报表;将主文件克隆到新报告的子文件夹中,在那里进行更改,推回结构更改;等等。但我真的什至不知道能够将疯狂的想法与合理的想法区分开来,更不用说好的想法了。你怎么看?

【问题讨论】:

    标签: git version-control sas


    【解决方案1】:

    这显然取决于报告以及它会如何变化,但按照您所说的,在我看来,您可以编写一个好的且有意义的 SAS 宏程序,该程序可以将所有选择标准作为参数。 然后,您可以在 SAS 宏代码中评估参数并在必要时进行结构更改。

    因此,一个 .sas 文件中只有一个大宏,根据您用于调用宏的参数,它可以重现您想要的所有报告。

    这对你有意义吗?如果它没有让我知道,如果您不熟悉它,我可以提供一些 SAS 宏示例来帮助您入门。

    【讨论】:

    • ...你知道,我真的不知道为什么我没有想到。我想,这就是继承代码而不认真看待它的危险。
    • 然而,在重新审视这个(我有一段时间没做过)之后,我想起了我提出这个问题的部分原始动机:存在无法自动化的数据清理过程,并且需要手动更改数据。我想确保这些更改中的每一个都以某种方式记录在案 - 例如,如果在分支或标记提交中,它将被保留。
    • 不过,感谢您的好回答 - 只需一分钟即可转换为宏变量,而且更简洁。
    【解决方案2】:

    我个人会采纳你的第一个建议:

    为每个报告创建一个分支,但是 仅将结构更改合并回来 到主人身上

    这是迄今为止最简单的概念,它通过将结构更改合并到头部修订中,您可以在需要时将它们应用到其他分支(当请求时)。唯一的缺点是你会留下很多分支,这听起来像是一个不常见的请求,一个好的命名方案应该可以解决这个问题。

    【讨论】:

      【解决方案3】:

      我有一个特定的报告,我被要求不时运行。每次的细节都略有不同 - 不同的日期范围,不同的选择标准 - 但在结构上,报告相当稳定。

      如果您可以预测每次更改哪些字段,我会说制作一个通用报告,每次运行报告时都会提示您输入这些数据。您应该能够在几乎任何报告软件中执行此操作。报告本身可以在 git 中跟踪,您不必担心存储库中有 50,000 个分支。

      如果无法预测每次需要自定义哪些字段,请为大多数字段提供有用的默认值。

      如果您经常运行此报告,并且对跟踪各种结果集特别感兴趣,我建议您采用不同的方法。我不知道您的报告生成了什么,但假设它是 PDF。我会在某个地方创建一个目录结构,您可以将每个运行存储在results/year/month/date.pdf 中。这样,您将获得 2010 年 5 月 5 日(或以 2010 年 5 月 5 日作为参数)提取的数据的记录。

      编辑:对于那些不能合并到单个报告中的内容,您可能会考虑使用标签而不是分支。如果您有一个您认为需要快速访问的版本,请标记它。任何时候您需要返回它,只需检查标签并运行报告。

      【讨论】:

      • 正如我在我对 Fabio 的 cmets 中提到的,部分问题是我不只是更改日期 - 我还添加了手动数据更正行(更正这不会也不应该反馈到实际的数据库中),我希望这些在将来易于查看。我感兴趣的是保留那些基于判断的变化,而不是系统性变化的变化。
      • 另外,我已经保存了每个报告的数据集和输出的副本;我很好奇如何为脚本本身做同样的事情,而不是为每次运行报告提供​​一个版本。我将不可避免地以 N 个分支或文件或提交或其他方式结束;这只是一个最易于管理的问题。
      • 感谢您的回答,但它确实帮助我更清楚地思考我在问什么,并提醒我至少可以通过使用 SAS 的宏变量来处理一些问题,即姗姗来迟。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2023-04-04
      • 2022-01-21
      • 2022-07-21
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多