2012-02-14 65 views
1

我在SSRS中遇到問題固定資產折舊報告是如何計算折舊值的? 我計算與該式((ACQUISITIONPRICE /折舊週期)*折舊剩餘),但該值不正確,讓我們採取一個實例,Dynamics AX 2009:計算固定資產折舊

由assetid,ASSETGROUP,NAME,LIFETIME,LIFETIMEREST,ACQUISITIONPRICE

BLDRNV53,大廈R,防水工作,60,-57,370

計算在SQL查詢:

SELECT  ASSETTABLE.ASSETID, ASSETTABLE.ASSETGROUP, ASSETTABLE.NAME, (ASSETBOOK.LIFETIMEREST * (ASSETBOOK.ACQUISITIONPRICE/ASSETBOOK.LIFETIME)) as AccDep 
FROM   ASSETBOOK INNER JOIN 
         ASSETTABLE ON ASSETBOOK.ASSETID = ASSETTABLE.ASSETID AND ASSETBOOK.DATAAREAID = ASSETTABLE.DATAAREAID 
WHERE  (ASSETBOOK.DEPRECIATION = 1) AND ASSETBOOK.STATUS = 1 

例如: ((370/60)* -57)= -351.5但是系統報告正在計算-350.550之間存在0.95差值,整個折舊值有這樣的小差異。

請幫助

+0

計算是在數據庫查詢中完成還是在報表中使用表達式?請提供查詢或表達式的代碼 – Bryan 2012-02-14 17:22:15

+0

在數據庫查詢中: – 2012-02-14 19:43:45

回答

0

什麼方程缺少的是固定資產刮量是1.000本例中的資產,所以公式爲(((Acquisition Price - Scrape Value)/Depreciation Period) * Depreciation Remain)

讓我們用數字填充: (((370 - 1)/ 60)* -57)= -350.550

感謝所有您的幫助

2

我不明白的地方的-350.550值的來源。我無法在測試中重現它。

我的建議是確保ACQUISITIONPRICE的列數據類型準確地表示存儲在數據庫中的數據類型。鑑於名稱,我假設存儲的值代表某種貨幣。數據類型decimal可能是一個不錯的選擇,像DECIMAL(10,2)。根據需要提高精度以滿足您的要求。

執行所有需要的計算之前四捨五入的值,只有在表示層中需要時才輪迴。

樣品T-SQL如下證明你的結果不同的數據類型的影響:

-- create temporary table, columns with integer datatype 
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL 
    DROP TABLE #Asset; 
CREATE TABLE #Asset (
    LifetimeRest INTEGER NOT NULL, 
    AcquisitionPrice INTEGER NOT NULL, 
    Lifetime INTEGER NOT NULL 
); 

-- load sample data 
INSERT INTO #Asset VALUES (-57, 370, 60); 

-- result is -342 with integer datatype and no conversion 
SELECT 
    IntegerCalculation = LifetimeRest * (AcquisitionPrice/Lifetime) 
FROM #Asset; 

-- result is -351.500000 is with dynamic decimal conversion 
SELECT 
    DynamicDecimalCalculation = LifetimeRest * 
           (CAST(AcquisitionPrice AS DECIMAL)/Lifetime) 
FROM #Asset; 

-- change price datatype to decimal with consistent precision and scale 
ALTER TABLE #Asset ALTER COLUMN AcquisitionPrice DECIMAL(10, 2); 

-- result is -351.4999620 with static decimal precision and scale, 
-- and no on the fly conversion 
SELECT 
    StaticDecimalCalculation = LifetimeRest * (AcquisitionPrice/Lifetime) 
FROM #Asset; 

-- cleanup 
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL 
    DROP TABLE #Asset; 
+0

-350.550在AX 2009中出現了固定資產餘額Morphex報表,它使用稱爲「AssetSumCalc」的類進行計算,該類不能反轉工程師正在執行的操作。但根據你的回答差異是不相等的-350.500,你的回答是幫助我關於舍入,但不是關於這個差別「0.95」,謝謝你的幫助:) – 2012-02-15 06:06:23