Forum Discussion

iceparrot's avatar
iceparrot
Advocate II
7 months ago
Solved

Multilanguage Field Parameter

Hello everyone, 

I'm currently updating our reports to multilanguage. It is working fine for regular text elements or column names. However, I do have some issues to use the multilanguage feature with my field parameters. 

I use those to enable users to select which columns they want to see in a table.

 

My question: how can I use a dynamic naming so that the users see the selection either in English or German?

 

This is how the field parameter looks like:

kpi_tabelle = {
    ("Placement", NAMEOF('Measuretable'[PLACEMENT]), 0),
    ("Impressions", NAMEOF('Measuretable'[SUM_IMPRESSIONS]), 1),
    ("Clicks", NAMEOF('Measuretable'[SUM_CLICKS]), 2),
    ("Spending", NAMEOF('Measuretable'[SUM_SPENT_PER_CAMP_ID]), 3)
}

 

This is how I did it for our text/buttons on the report, but it is not working for the field parameters.

ML_BTN_EDIT = SWITCH(USERCULTURE(),
    "de-DE", "Bearbeiten",
    "en-US", "Edit"
) 

 

Thank you

  • Hi iceparrot,

    You will need to set up your parameter table to include the culture as well as the equivalent of the field for that culture.

    
    // Parameter table with culture
    Parameter = {
        // Culture: en-US
        ("Album", NAMEOF('Data'[album]), 0, "en-US"),
        ("Artist", NAMEOF('Data'[artist]), 1, "en-US"),
        ("Explicit", NAMEOF('Data'[explicit_text]), 2, "en-US"),
        ("Genre", NAMEOF('Data'[genre]), 3, "en-US"),
        ("Track Name", NAMEOF('Data'[track_name]), 4, "en-US"),
        ("Track ID", NAMEOF('Data'[track_id]), 5, "en-US"),
    
        // Culture: de-DE
        ("Album", NAMEOF('Data'[album]), 0, "de-DE"),
        ("Künstler", NAMEOF('Data'[artist]), 1, "de-DE"),
        ("Explizit", NAMEOF('Data'[explicit_text]), 2, "de-DE"),
        ("Genre", NAMEOF('Data'[genre]), 3, "de-DE"),
        ("Titel", NAMEOF('Data'[track_name]), 4, "de-DE"),
        ("Track-ID", NAMEOF('Data'[track_id]), 5, "de-DE"),
    
        // Culture: fr-FR
        ("Album", NAMEOF('Data'[album]), 0, "fr-FR"),
        ("Artiste", NAMEOF('Data'[artist]), 1, "fr-FR"),
        ("Explicite", NAMEOF('Data'[explicit_text]), 2, "fr-FR"),
        ("Genre", NAMEOF('Data'[genre]), 3, "fr-FR"),
        ("Nom de Piste", NAMEOF('Data'[track_name]), 4, "fr-FR"),
        ("ID Piste", NAMEOF('Data'[track_id]), 5, "fr-FR")
    }
    

    It is possible to automatically filter a slicer with a measure to the culture relevant to the user, but not if the field parameters are used in other visuals. Using the measure below will not filter the visible columns but will instead hide all rows:

    
    culture_check = 
    IF ( SELECTEDVALUE ( Parameter[Culture] ) = USERCULTURE (), 1 )
    

4 Replies

  • Hello iceparrot 

     

    In Power BI, field parameter labels are static and cannot evaluate DAX like USERCULTURE().
    So direct multilingual naming inside a single field parameter is not supported.

     

    Create separate field parameters per language
    Example
    KPI_Table_EN → English labels
    KPI_Table_DE → German labels
    Keep the same measures/columns in both parameters
    Only the display names differ
    Create a language selector
    Either a Language slicer or auto-detect using USERCULTURE()
    Create a DAX switcher measure
    Chooses the correct field parameter based on selected language
    Use the switcher measure in the table visual
    Column headers change automatically between English and German

  • Hi iceparrot

    Field Parameters in Power BI are powerful for dynamic column selection, but they do not natively support dynamic display names based on culture because the names you define in the parameter table are static text.
    Here’s why your approach works for buttons but not for Field Parameters:
    • ML_BTN_EDIT uses a DAX measure with SWITCH(USERCULTURE()), which is evaluated at runtime.
    • Field Parameter names are stored as literal text in the parameter table and are not evaluated dynamically.

      Two Practical Approaches

      1. Use a Translation Table for Display Names

      Instead of hardcoding names in the Field Parameter, create a separate table with translations:
      Example Translation Table:
      ColumnKey en-US de-DE SelectedColumnName = VAR CurrentCulture = USERCULTURE() VAR SelectedKey = SELECTEDVALUE('Field Parameter'[ColumnKey]) RETURN SWITCH(CurrentCulture, "de-DE", LOOKUPVALUE('Translations'[de-DE], 'Translations'[ColumnKey], SelectedKey), "en-US", LOOKUPVALUE('Translations'[en-US], 'Translations'[ColumnKey], SelectedKey), SelectedKey )
      Use this measure in your visual title or dynamic labels instead of relying on the static Field Parameter name.
       

      2. Dynamic Headers via Measures

      If you want the column headers themselves to change language:
      • Instead of using Field Parameters directly for display names, use measures that return the translated name.
      • For example:
      Placement_Measure = SWITCH(USERCULTURE(), "de-DE", "Platzierung", "en-US", "Placement" )

       

      Then include these measures in your Field Parameter definition instead of static text.

      Important Note

      Field Parameters themselves cannot dynamically rename columns inside the table visual. The workaround is to:
      PlacementPlacementPlatzierung
      ImpressionsImpressionsImpressionen
      ClicksClicksKlicks
      SpendingSpendingAusgaben
       
      Then create a measure for the display name:
       
  • Field parameters don’t support dynamic labels via DAX (so USERCULTURE() can’t rename "Placement", "Clicks", etc.). The display names in a field parameter are static.

     

    The practical workaround is to create separate field parameters per language and show the right one based on language.

    Example:

    • kpi_tabelle_EN (Placement, Impressions, …)

    • kpi_tabelle_DE (Platzierung, Impressionen, …)

    Then either:

    • Use a bookmark toggle (EN/DE) to show the correct slicer + table, or

    • Use a language table + field parameter selector pattern (two visuals, one per language), and hide/show based on language.

    If you want the cleanest setup with minimal duplication: use two slicers (EN/DE) + two tables and control visibility with bookmarks. That’s the most reliable way today.

  • Hi iceparrot,

    You will need to set up your parameter table to include the culture as well as the equivalent of the field for that culture.

    
    // Parameter table with culture
    Parameter = {
        // Culture: en-US
        ("Album", NAMEOF('Data'[album]), 0, "en-US"),
        ("Artist", NAMEOF('Data'[artist]), 1, "en-US"),
        ("Explicit", NAMEOF('Data'[explicit_text]), 2, "en-US"),
        ("Genre", NAMEOF('Data'[genre]), 3, "en-US"),
        ("Track Name", NAMEOF('Data'[track_name]), 4, "en-US"),
        ("Track ID", NAMEOF('Data'[track_id]), 5, "en-US"),
    
        // Culture: de-DE
        ("Album", NAMEOF('Data'[album]), 0, "de-DE"),
        ("Künstler", NAMEOF('Data'[artist]), 1, "de-DE"),
        ("Explizit", NAMEOF('Data'[explicit_text]), 2, "de-DE"),
        ("Genre", NAMEOF('Data'[genre]), 3, "de-DE"),
        ("Titel", NAMEOF('Data'[track_name]), 4, "de-DE"),
        ("Track-ID", NAMEOF('Data'[track_id]), 5, "de-DE"),
    
        // Culture: fr-FR
        ("Album", NAMEOF('Data'[album]), 0, "fr-FR"),
        ("Artiste", NAMEOF('Data'[artist]), 1, "fr-FR"),
        ("Explicite", NAMEOF('Data'[explicit_text]), 2, "fr-FR"),
        ("Genre", NAMEOF('Data'[genre]), 3, "fr-FR"),
        ("Nom de Piste", NAMEOF('Data'[track_name]), 4, "fr-FR"),
        ("ID Piste", NAMEOF('Data'[track_id]), 5, "fr-FR")
    }
    

    It is possible to automatically filter a slicer with a measure to the culture relevant to the user, but not if the field parameters are used in other visuals. Using the measure below will not filter the visible columns but will instead hide all rows:

    
    culture_check = 
    IF ( SELECTEDVALUE ( Parameter[Culture] ) = USERCULTURE (), 1 )