When we work with SQL Reporting Services we will often use Currency Amounts and Date fields to present data back to the Report User.

By default, SSRS will assume we are working against a US Culture and so present as per the following:

SSRS Expression
=Format(Fields!Last_Month_Sales.Value,”C2″)
User Experience
image

Whereas we may want our Currency presented using a UK or Euro Format.

The key here is understanding that the “C2” Formatting in SSRS is our way of reading the Designated Culture for the Report and then formatting the Number in this Culture. (“C” being Currency, and the “2” being for the number of Decimal Points)

Each Report then has a Property for the Culture we want the Report to work against.

However this Property is slightly ‘buried’ in the Properties Explorer for Visual Studio and so can sometimes be hard to find – and this can lead some developers to implement the same user experience in a manual and less effective way:

Bad SSRS Expression
=”£ ” + Format(Fields!Last_Month_Sales.Value,”N2″)
User Experience
image

This does the job, but is not really working the way that SSRS does – and so forms more of a ‘hack’ to get the right result, rather than a more future-proof solution.

The better way of working is to find the Culture Property of our Report and set this to the intended non-US Format and then allow the inbuilt “C2” format to do the business for us.

To do this, we can:

1. Bring up the Properties Sidebar.

2. Use the Drop-down to select the ‘Report’ Option (and not the ‘Body’ option which this can default to)

image

3. Review the list of Properties and find the Property for ‘Language’

image

This will be blank initially and so defaulting to the Globalisation tag for the US, specifically ‘en-US’

We can set this value to the similar Globalisation tag for the UK (en-GB) and therefore configure our Report to render Currency Amounts and Dates accordingly.

SSRS Expression
=Format(Fields!Last_Month_Sales.Value,”C2″)=Format(Fields!Last_Month_Sales.Value,”C2″)
Language Setting 
en-GBfr-FR
User Experience 
imageimage

This then allows us to control the formatting of the entire Report from a single Setting, as opposed to applying a manual formatting for each intended Currency or Date being presented.

The above is purely a small tip for building SSRS Reports (for us, when working with SSRS to present Dynamics CRM data), but can often be missed and lead to extra manual effort on the part of the developer – so can be a handy one for ‘doing things the right way rather than the manual way’ when it comes to SSRS Development.

Further Reading

Set the Locale for a Report or Text Box (Reporting Services)

https://msdn.microsoft.com/en-us/library/ms159642.aspx

Solution Design Considerations for Multi-Lingual or Global Deployments (Reporting Services)

The above article is predominantly focused on amending an SSRS Report to work within a single designated Culture, whereas this can be expanded (both in the Report, and in the underlying configuration of SSRS) to accommodate multiple Cultures depending on the User Location – and the following MSDN Article provides more in-depth information on this:

https://msdn.microsoft.com/en-us/library/ms156493.aspx

Appendix – Country Codes

The Culture Info class specifies a unique name for each culture, based on RFC 4646 (Windows Vista and later).

The name is a combination of an ISO 639 two-letter lowercase culture code associated with a language and an ISO 3166 two-letter uppercase subculture code associated with a country or region.

CountryTwo Letter CodeThree Letter CodeLanguageTwo Letter Lang CodeThree Letter Lang CodeCulture Info Code
AfghanistanAFAFGPashtopspusps-AF
AfghanistanAFAFGDariprsprsprs-AF
AlbaniaALALBAlbaniansqsqisq-AL
AlgeriaDZDZAArabicararaar-DZ
ArgentinaARARGSpanishesspaes-AR
ArmeniaAMARMArmenianhyhyehy-AM
AustraliaAUAUSEnglishenengen-AU
AustriaATAUTGermandedeude-AT
BahrainBHBHRArabicararaar-BH
BangladeshBDBGDBengalibnbngbn-BD
BasqueESESPBasqueeueuseu-ES
BelarusBYBLRBelarusianbebelbe-BY
BelgiumBEBELFrenchfrfrafr-BE
BelgiumBEBELDutchnlnldnl-BE
BelizeBZBLZEnglishenengen-BZ
Bolivarian Republic of VenezuelaVEVENSpanishesspaes-VE
BoliviaBOBOLQuechuaquzqubquz-BO
BoliviaBOBOLSpanishesspaes-BO
BrazilBRBRAPortugueseptporpt-BR
Brunei DarussalamBNBRNMalaymsmsams-BN
BulgariaBGBGRBulgarianbgbulbg-BG
CambodiaKHKHMKhmerkmkhmkm-KH
CanadaCACANFrenchfrfrafr-CA
CanadaCACANEnglishenengen-CA
Caribbean2929Englishenengen-029
CatalanESESPCatalancacatca-ES
ChileCLCHLMapudungunarnarnarn-CL
ChileCLCHLSpanishesspaes-CL
ColombiaCOCOLSpanishesspaes-CO
Costa RicaCRCRISpanishesspaes-CR
CroatiaHRHRVCroatianhrhrvhr-HR
Cyrillic, AzerbaijanAZAZEAzeriazazeaz-Cyrl-AZ
Cyrillic, Bosnia and HerzegovinaBABIHSerbiansrsrnsr-Cyrl-BA
Cyrillic, Bosnia and HerzegovinaBABIHBosnianbsbscbs-Cyrl-BA
Cyrillic, MongoliaMNMNGMongolianmnmonmn-MN
Cyrillic, MontenegroMEMNESerbiansrsrpsr-Cyrl-ME
Cyrillic, SerbiaRSSRBSerbiansrsrpsr-Cyrl-RS
Cyrillic, Serbia and Montenegro (FormerCSSCGSerbian )srsrpsr-Cyrl-CS
Cyrillic, TajikistanTJTAJTajiktgtgktg-Cyrl-TJ
Cyrillic, UzbekistanUZUZBUzbekuzuzbuz-Cyrl-UZ
Czech RepublicCZCZECzechcscescs-CZ
DenmarkDKDNKDanishdadanda-DK
Dominican RepublicDODOMSpanishesspaes-DO
EcuadorECECUQuechuaquzquequz-EC
EcuadorECECUSpanishesspaes-EC
EgyptEGEGYArabicararaar-EG
El SalvadorSVSLVSpanishesspaes-SV
EstoniaEEESTEstonianetestet-EE
EthiopiaETETHAmharicamamham-ET
Faroe IslandsFOFROFaroesefofaofo-FO
FinlandFIFINFinnishfifinfi-FI
FinlandFIFINSwedishsvswesv-FI
FinlandFIFINSami, Northernsesmgse-FI
FinlandFIFINSami, Skoltsmssmssms-FI
FinlandFIFINSami, Inarismnsmnsmn-FI
Former Yugoslav Republic of MacedoniaMKMKDMacedonianmkmkdmk-MK
FranceFRFRAFrenchfrfrafr-FR
FranceFRFRABretonbrbrebr-FR
FranceFRFRAOccitanococioc-FR
FranceFRFRACorsicancocosco-FR
FranceFRFRAAlsatiangswgswgsw-FR
GalicianESESPGalicianglglggl-ES
GeorgiaGEGEOGeorgiankakatka-GE
GermanyDEDEUGermandedeude-DE
GermanyDEDEUUpper Sorbianhsbhsbhsb-DE
GermanyDEDEULower Sorbiandsbdsbdsb-DE
GreeceGRGRCGreekelellel-GR
GreenlandGLGRLGreenlandicklkalkl-GL
GuatemalaGTGTMK’ichequtqutqut-GT
GuatemalaGTGTMSpanishesspaes-GT
HondurasHNHNDSpanishesspaes-HN
HungaryHUHUNHungarianhuhunhu-HU
IcelandISISLIcelandicisislis-IS
IndiaININDHindihihinhi-IN
IndiaININDBengalibnbngbn-IN
IndiaININDPunjabipapanpa-IN
IndiaININDGujaratigugujgu-IN
IndiaININDOriyaororior-IN
IndiaININDTamiltatamta-IN
IndiaININDTelugutetelte-IN
IndiaININDKannadaknkankn-IN
IndiaININDMalayalammlmymml-IN
IndiaININDAssameseasasmas-IN
IndiaININDMarathimrmarmr-IN
IndiaININDSanskritsasansa-IN
IndiaININDKonkanikokkokkok-IN
IndiaININDEnglishenengen-IN
IndonesiaIDIDNIndonesianidindid-ID
IranIRIRNPersianfafasfa-IR
IraqIQIRQArabicararaar-IQ
IrelandIEIRLIrishgaglega-IE
IrelandIEIRLEnglishenengen-IE
Islamic Republic of PakistanPKPAKUrduururdur-PK
IsraelILISRHebrewhehebhe-IL
ItalyITITAItalianititait-IT
JamaicaJMJAMEnglishenengen-JM
JapanJPJPNJapanesejajpnja-JP
JordanJOJORArabicararaar-JO
KazakhstanKZKAZKazakhkkkazkk-KZ
KenyaKEKENKiswahiliswswasw-KE
KoreaKRKORKoreankokorko-KR
KuwaitKWKWTArabicararaar-KW
KyrgyzstanKGKGZKyrgyzkykirky-KG
Lao P.D.R.LALAOLaololaolo-LA
Latin, AlgeriaDZDZATamazighttzmtzmtzm-Latn-DZ
Latin, AzerbaijanAZAZEAzeriazazeaz-Latn-AZ
Latin, Bosnia and HerzegovinaBABIHCroatianhrhrbhr-BA
Latin, Bosnia and HerzegovinaBABIHBosnianbsbsbbs-Latn-BA
Latin, Bosnia and HerzegovinaBABIHSerbiansrsrssr-Latn-BA
Latin, CanadaCACANInuktitutiuikuiu-Latn-CA
Latin, MontenegroMEMNESerbiansrsrpsr-Latn-ME
Latin, NigeriaNGNGAHausahahauha-Latn-NG
Latin, SerbiaRSSRBSerbiansrsrpsr-Latn-RS
Latin, Serbia and Montenegro (FormerCSSCGSerbian )srsrpsr-Latn-CS
Latin, UzbekistanUZUZBUzbekuzuzbuz-Latn-UZ
LatviaLVLVALatvianlvlavlv-LV
LebanonLBLBNArabicararaar-LB
LibyaLYLBYArabicararaar-LY
LiechtensteinLILIEGermandedeude-LI
LithuaniaLTLTULithuanianltlitlt-LT
LuxembourgLULUXLuxembourgishlbltzlb-LU
LuxembourgLULUXGermandedeude-LU
LuxembourgLULUXFrenchfrfrafr-LU
MalaysiaMYMYSMalaymsmsams-MY
MalaysiaMYMYSEnglishenengen-MY
MaldivesMVMDVDivehidvdivdv-MV
MaltaMTMLTMaltesemtmltmt-MT
MexicoMXMEXSpanishesspaes-MX
MohawkCACANMohawkmohmohmoh-CA
MonacoMCMCOFrenchfrfrafr-MC
MoroccoMAMARArabicararaar-MA
NepalNPNPLNepalinenepne-NP
NetherlandsNLNLDDutchnlnldnl-NL
NetherlandsNLNLDFrisianfyfryfy-NL
New ZealandNZNZLMaorimimrimi-NZ
New ZealandNZNZLEnglishenengen-NZ
NicaraguaNINICSpanishesspaes-NI
NigeriaNGNGAYorubayoyoryo-NG
NigeriaNGNGAIgboigiboig-NG
NorwayNONORNorwegian, Bokmålnbnobnb-NO
NorwayNONORSami, Northernsesmese-NO
NorwayNONORNorwegian, Nynorsknnnnonn-NO
NorwayNONORSami, Lulesmjsmjsmj-NO
NorwayNONORSami, Southernsmasmasma-NO
OmanOMOMNArabicararaar-OM
PanamaPAPANSpanishesspaes-PA
ParaguayPYPRYSpanishesspaes-PY
PeruPEPERQuechuaquzqupquz-PE
PeruPEPERSpanishesspaes-PE
PhilippinesPHPHLFilipinofilfilfil-PH
PolandPLPOLPolishplpolpl-PL
PortugalPTPRTPortugueseptporpt-PT
PRCCNCHNTibetanbobodbo-CN
PRCCNCHNYiiiiiiii-CN
PRCCNCHNUyghuruguigug-CN
Puerto RicoPRPRISpanishesspaes-PR
QatarQAQATArabicararaar-QA
Republic of the PhilippinesPHPHLEnglishenengen-PH
RomaniaROROURomanianroronro-RO
RussiaRURUSRussianrurusru-RU
RussiaRURUSTatartttattt-RU
RussiaRURUSBashkirbabakba-RU
RussiaRURUSYakutsahsahsah-RU
RwandaRWRWAKinyarwandarwkinrw-RW
Saudi ArabiaSASAUArabicararaar-SA
SenegalSNSENWolofwowolwo-SN
Simplified, PRCCNCHNChinesezhzhozh-CN
Simplified, SingaporeSGSGPChinesezhzhozh-SG
SingaporeSGSGPEnglishenengen-SG
SlovakiaSKSVKSlovakskslksk-SK
SloveniaSISVNSlovenianslslvsl-SI
South AfricaZAZAFSetswanatntsntn-ZA
South AfricaZAZAFisiXhosaxhxhoxh-ZA
South AfricaZAZAFisiZuluzuzulzu-ZA
South AfricaZAZAFAfrikaansafafraf-ZA
South AfricaZAZAFSesotho sa Leboansonsonso-ZA
South AfricaZAZAFEnglishenengen-ZA
Spain, International SortESESPSpanishesspaes-ES
Sri LankaLKLKASinhalasisinsi-LK
SwedenSESWESwedishsvswesv-SE
SwedenSESWESami, Northernsesmfse-SE
SwedenSESWESami, Lulesmjsmksmj-SE
SwedenSESWESami, Southernsmasmbsma-SE
SwitzerlandCHCHERomanshrmrohrm-CH
SwitzerlandCHCHEGermandedeude-CH
SwitzerlandCHCHEItalianititait-CH
SwitzerlandCHCHEFrenchfrfrafr-CH
Syllabics, CanadaCACANInuktitutiuikuiu-Cans-CA
SyriaSYSYRSyriacsyrsyrsyr-SY
SyriaSYSYRArabicararaar-SY
ThailandTHTHAThaiththath-TH
Traditional Mongolian, PRCCNCHNMongolianmnmonmn-Mong-CN
Traditional, Hong Kong S.A.R.HKHKGChinesezhzhozh-HK
Traditional, Macao S.A.R.MOMACChinesezhzhozh-MO
Traditional, TaiwanTWTWNChinesezhzhozh-TW
Trinidad and TobagoTTTTOEnglishenengen-TT
TunisiaTNTUNArabicararaar-TN
TurkeyTRTURTurkishtrturtr-TR
TurkmenistanTMTKMTurkmentktuktk-TM
U.A.E.AEAREArabicararaar-AE
UkraineUAUKRUkrainianukukruk-UA
United KingdomGBGBRWelshcycymcy-GB
United KingdomGBGBRScottish Gaelicgdglagd-GB
United KingdomGBGBREnglishenengen-GB
United StatesUSUSAEnglishenengen-US
United StatesUSUSASpanishesspaes-US
UruguayUYURYSpanishesspaes-UY
VietnamVNVNMVietnamesevivievi-VN
YemenYEYEMArabicararaar-YE
ZimbabweZWZWEEnglishenengen-ZW

Credit here goes to Tim Trott for publishing a comprehensive list of these codes for use in .Net and SSRS:  https://timtrott.co.uk/culture-codes/

Author