1

我正在写一份包含 3 组的报告:年、月和供应商。

每页从顶部的年份开始,然后是 12 个月的每个月,每个月都有销售摘要。然后,用户可以深入查看每个公司从该月开始的单独销售数据。

例如,我的报告的顶层如下所示:

2010  
   January    £20,000
   February   £30,000
   March      £15,000
   etc.

2011
    January   £16,000
    February  £14,000

现在,我希望将 2011 年 1 月的值与上一年同期的值(在本例中:16,000 与 20,000)进行比较,以便进行一些额外的计算。

目前,我通过使用名为 JanGlobal、FebGlobal 等的全局变量来实现这一点,这些变量会根据需要进行存储和检索。这是可行的,因为我知道只有 12 个月,所以我可以提前命名变量。

但是,在供应商层面,我不知道会有多少供应商,甚至根本不知道它们是否存在(供应商可能是新的,因此他们不会有同比信息;或者他们可能有破产了,所以在新的一年里就不存在了)。

我的供应商向下钻取如下所示:

2010
    January
        Company 1    £5,000
        Company 2    £7,000
        Company 3    £8,000

因此,我需要将可变数量的供应商与 12 个月前的供应商进行比较,如果它们存在的话。有任何想法吗?

4

1 回答 1

0

这里的解决方案涉及相当程度的字符串操作。本质上,在公司的组页脚中(当年份是 2010 年时),您建立了一系列公司名称和销售数据。当年份为 2011 年时,您处理字符串以提取与 2011 年相关的数据(对于给定的公司和月份),并将其用于比较。

因此,对于名为 ProcessJan 的字符串公式,您可能有(使用管道作为分割字符):

Global StringVar JanGlobal;
Local NumberVar NumberToCompare := 0;
If Year(Sales) = 2010 Then
    JanGlobal := '||' + {CompanyName} + '|' + ToText({SalesFigure}); //append current value to Jan's formula
Else
(
    If UBound(SalesSearch) > 0
    (
        Local NumberVar Searching := 1;
        For Searching = 1 to UBound(SalesSearch)
            If SalesSearch[Searching] StartsWith ({CompanyName} + '|') Then
            (
                Local StringVar Array Matched := Split(SalesSearch[Searching], '|')
                NumberToCompare := ToNumber(Matched[2]);
            )          
        Next
    )
    //do whatever you want with the 2011 sales figure and the value of NumberToCompare
    //(which should be either zero or Jan 2010's sales figure for the company) here
)

通过一些工作,您可以调整此方法以使用一个公式和全局变量来管理所有月份和公司。

于 2011-02-15T12:57:51.780 回答