Kerekítési módszerek MDX-ben (Arithmetic & Banker's Rounding)
Tudta Ön hogy a Round() függvény a 2,5-öt lefelé, a 3,5-öt felfelé kerekíti? Próbálja ki!
with
member [Measures].[2,5 kerekítve] as 'Round(2.5, 0)'
member [Measures].[3,5 kerekítve] as 'Round(3.5, 0)'
select
{[Measures].[2,5 kerekítve], [Measures].[3,5 kerekítve]}
on columns
from [Adatkocka]
Ahogy az ábráról leolvasható a Round() függvény a 2,5-öt 2-re, a 3,5-öt 4-re kerekíti. Első ránézésre talán úgy tűnhet, mintha ez egy bug lenne, hiszen ez a kerekítési módszer nem felel meg a kerekítés általános szabálya alatt tanult módszernek. Pedig ez nem hiba, csak a VBA Round() függvény nem a kerekítés általános szabálya szerint kerekít.
A kerekítés általános szabálya (Arithmetic Rounding)
A kerekítés általános szabálya szerint az 0,5 től felfelé, 0,49-től lefelé kell kerekíteni. Azaz a 0,5 már 1 lesz, míg a 0,49 nulla. Ezt a módszert használja az Excel, és az SQL server Round() függvénye is.
Banker’s Rounding.
Ha sok kerekített értékeket kell összeadnunk, és a ,5-öt mindig felfelé kerekítjük, akkor az eredmény szép lassan elkezd torzítani. Ha ezt ki akarjuk küszöbölni, akkor a ,5-öt néha felfelé, néha lefelé kell kerekítenünk.
A Banker’s kerekítés lényege, hogy az ,5-öt néha felfelé, néha lefelé kerekíti (így csökkenti az egyirányú kerekítés torzítását). A Banker’s kerekítés mindig páros számra kerekít. A 2,5-öt 2-re, a 3,5-öt 4-re. És pont így működik a VBA Round() függvénye.
Összefoglalva: Ha azt akarjuk, hogy MDX lekérdezésünk a kerekítés általános szabálya szerint kerekítsen, akkor a VBA Round() függvény helyet használjuk ez Excel Round() függvényét:
with
member [Measures].[2,5 kerekítve] as 'Excel!Round(2.5, 0)'
member [Measures].[3,5 kerekítve] as 'Excel!Round(3.5, 0)'
select
{[Measures].[2,5 kerekítve], [Measures].[3,5 kerekítve]}
on columns
from [adatkocka]
Eredménye:
Felhasznált irodalom:
- MSDN forum: Problem with using Round() in mdx
Kapcsolódó anyagok:
Kővári Attila - BI projekt
hozzászólás
auto insurance ...
k, 04/21/2015 - 15:00
Permalink
oxhNtJfOPwJxgm
Új hozzászólás