Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access MS访问:滚动12个月_Ms Access_Vba - Fatal编程技术网

Ms access MS访问:滚动12个月

Ms access MS访问:滚动12个月,ms-access,vba,Ms Access,Vba,我正在进行一项数据库增强,它将添加资源跟踪,用于12个月的前滚(forecast)。换句话说,一个人在这个月、下个月以及12个月后的某个项目上预计花费多少时间;他们目前正在进行的每一个项目的所有信息 我正在考虑最好的方法,并提出以下表格格式(请记住,这是一个现有的数据库,所以一些字段映射到其他表格上的字段) 表格式1: 投射 联系人ID 分类(当前/历史) 报告期(截至日期) 容量月 百分比(这是一个人每月在项目上花费的时间) 基本上,每个项目每月(12个月)为联系人创建一个记录。我的保留意见

我正在进行一项数据库增强,它将添加资源跟踪,用于12个月的前滚(forecast)。换句话说,一个人在这个月、下个月以及12个月后的某个项目上预计花费多少时间;他们目前正在进行的每一个项目的所有信息

我正在考虑最好的方法,并提出以下表格格式(请记住,这是一个现有的数据库,所以一些字段映射到其他表格上的字段)

表格式1:

  • 投射
  • 联系人ID
  • 分类(当前/历史)
  • 报告期(截至日期)
  • 容量月
  • 百分比(这是一个人每月在项目上花费的时间)

  • 基本上,每个项目每月(12个月)为联系人创建一个记录。我的保留意见是,该表可以很快获得大量记录。没什么大不了的,但我个人尽量避免

表格式2:

  • 投射
  • 联系人ID
  • 分类(当前/历史)
  • 报告期(截至日期)
  • 一月
  • 二月
  • 十二月
  • 百分比

  • 我还想用M0,M1…M11代替月份名称,作为我的第二点:


现在,除了上述两个选项之外,我需要考虑设计表单以输入数据的最佳方法。我希望将月份按顺序排列,第一个月为当前月份,如下所示:

九月|十月|……|八月

但我想不出一个办法让Access在表单上以这种方式组织月份。为了解决这个问题,我考虑使用M0 | M1 |…| M11,但最终用户可能不知道哪个月等于另一个月


我肯定我丢失了信息,所以我会根据需要添加。我无法上传副本,因为它是专有信息。我或多或少地在寻找第二种意见,以最好的方式做这些表格。任何建议或魔鬼倡导者都将不胜感激

数据库设计中始终建议使用规范化,因此我选择表格式1-
[CapacityMonth]
选项。但对于您的情况,以下是第一种方法的几个原因:

  • 结构:长格式表格总是比宽格式表格好。在Access中,行是便宜的,因为列涉及表结构设计(例如,Access对行没有限制,但对列有255个限制)。考虑后端更改与前端应用程序设计更改。此外,使用长格式比宽格式(甚至更少的表单/报表控件)更容易索引、查询、聚合、合并和重塑,特别是当您的应用程序随着时间的推移而增长,并且所需的需求可能会变得越来越复杂时。因此,从一开始就要设计效率和可扩展性方面的最佳实践

  • 查询:作为报表和数据处理的主干,您希望为查询优化而构建。使用
    [CapacityMonth]
    列,查询所涉及的脚本更少,可维护性更好,可读性更清晰,效率也更高

    例如,比较可读性(回想一下读起来像陈述句一样的SQL语句):

    从Format2Table中选择[一月]

    从Format1Table中选择[Percent],其中[CapacityMonth]=“一月”

    此外,比较季度/年度总计的汇总查询:

    选择Sum([一月])+Sum([二月])+…+按[年度]分组的[年度总计]金额([12月])

    选择Sum([Percent])作为[YearTotal]分组依据[Year]

    最后,要检索列中的月度总计报告,第一种格式需要一个group by查询,而第二种格式需要堆叠的union查询。还有其他例子

  • 转换:不用担心,
    [CapacityMonth]
    方法的优点在于,您可以运行交叉表查询,以任何指定顺序获得只读表、报表或电子表格导出的月份列

    将总和(百分比)转换为百分比之和
    选择ContactID,ProjectID
    从Format1Table
    按ContactID、ProjectID分组
    ‘九月’、‘十月’、‘十一月’、‘十二月’、‘一月’、‘二月’、‘三月’、‘四月’、‘五月’、‘六月’、‘七月’、‘八月’的枢纽容量


数据库设计中始终建议使用规范化,因此我选择表格式1-
[CapacityMonth]
选项。但对于您的情况,以下是第一种方法的几个原因:

  • 结构:长格式表格总是比宽格式表格好。在Access中,行是便宜的,因为列涉及表结构设计(例如,Access对行没有限制,但对列有255个限制)。考虑后端更改与前端应用程序设计更改。此外,使用长格式比宽格式(甚至更少的表单/报表控件)更容易索引、查询、聚合、合并和重塑,特别是当您的应用程序随着时间的推移而增长,并且所需的需求可能会变得越来越复杂时。因此,从一开始就要设计效率和可扩展性方面的最佳实践

  • 查询:作为报表和数据处理的主干,您希望为查询优化而构建。使用
    [CapacityMonth]
    列,查询所涉及的脚本更少,可维护性更好,可读性更清晰,效率也更高

    例如,比较可读性(回想一下读起来像陈述句一样的SQL语句):

    从Format2Table中选择[一月]

    从Format1Table中选择[Percent],其中[CapacityMonth]=“一月”

    此外,比较季度/年度总计的汇总查询:

    选择Sum([一月])+Sum([Fe