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
)

少しの作業で、この方法を適応させて、すべての月と会社を管理する1つの数式とグローバル変数を使用できます。

于 2011-02-15T12:57:51.780 に答える