1

部門間の給与支払いのテーブルがあります (「Y からの日数」= 年始からの日数、「M までの日数」= 月末までの日数)

Department | Salary | Date       | Type            | Days from Y | Days to M
-----------+--------+------------+-----------------+-------------+-----------
Finance    |     71 | 01-01-2016 | Regular payment |           1 |        30
Sales      |   3000 | 20-01-2016 | Regular payment |          20 |        11
Sales      |   -300 | 21-01-2016 | Correction      |          21 |        10
Finance    |   2000 | 01-02-2016 | Regular payment |          32 |        27
Sales      |   3100 | 15-02-2016 | Regular payment |          46 |        12

定期的な支払いの場合、給与を修正して、満月であるかのように表示する必要があります。しかし、次の月には、前月の修正を含めてはなりません (新しい給与で既に提供されているため) - 先月の修正のみを含める必要があります。

販売の場合、次のようになります。

Date           | Salary | Salary (cum.) | Correction | Salary (corr.) cum.
---------------------------------------------------------------------------
2016           |   5800 |          5800 |            |            
  2016-01      |   2700 |          2700 |       1650 |                4350
    2016-01-20 |   3000 |          3000 |       1650 |                4650
    2016-01-21 |   -300 |          2700 |            |                4350
  2016-02      |   2550 |          5250 |       2040 |                7290
    2016-02-15 |   2550 |          5250 |       2040 |                7290

修正自体の計算は非常に簡単です。通常の支払いの場合は、その日付を使用して、指定された月と部門の組み合わせの修正を計算します。

式を使用してLASTNONBLANK、1 つの部門で機能する正しい累積メジャーを作成できます。

Salary (corr.) cum := CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction])

ただし、これは部門間では機能しません - 2016-01 の場合、間違った合計カウンターにつながる可能性があります。

Department | Salary | Salary (cum.) | Correction | measure | should be
-----------------------------------------------------------------------
(Total)    |   2771 |          3071 |            |    4721 |      6851    
  Finance  |     71 |            71 |       2130 |    2201 |      2201
  Sales    |   2700 |          3000 |       1650 |    4650 |      4650

各月の補正を正しく計算し、合計を正しく取得するメジャーを作成するにはどうすればよいですか?

(したがって、基本的には、各部門(または他のディメンション) の最後の修正を調べ、すべてのディメンションにわたる最後の修正ではなく、これらの合計を使用します)

4

1 に答える 1

2

基本的に、部門を反復処理する必要があります。

Salary (corr.) cum := 
SUMX (
    Departments,
    CACLULATE(MAX([Correction]); LASTNONBLANK([Date]; MAX([Correction])
)

これでうまくいくはずです。

アルベルト

于 2016-09-02T06:37:44.370 に答える