If you are working with DAX and do more than single-line statements, you will frequently find yourself wishing for a powerful editor with proper syntax highlighting. Below I explain how to use Notepad++ for that purpose. While I use DAX mostly in Power BI, it of course works just as well with other environments.

If you prefer watching over reading, check out the short video below. In it, I use DAX as an example. But it works just the same for M, of course.

First Things First

  • This guide is based on the 64-Bit Notepad++ version 8.4.2. You can always download the latest version of Notepad++ here.
  • The same process works with the files for PowerQuery (M) over here.

To the right, you can download the custom language XML files for easy import into Notepad++ and further customization.

Follow the instructions below to

  • enable syntax highlighting
  • enable auto-completion
  • modify the syntax colors to your liking

Get The Files

Subscribe below to get the current version and all future updates for DAX and PowerQuery (M).


    If you don’t want to share your e-mail address, you can purchase the current version of the files on Ko-Fi. As I won’t have your e-mail, I will not be able to send you any updates.

    Let's Go

    Extract the received ZIP archive and open the folder location in your file explorer. Make sure there is an “m.xml” file and an “AutoComplete” folder.

    I am aware that the screenshots show DAX, just select M instead. The process remains the same.

    "dax.xml" in the extracted archive folder

    Syntax Highlighting

    To import the file,

    • start Notepad++,
    • click on LanguageDefine your Language, Import,
    • navigate to the file and click Open.
    • Close the Define your Language dialog.
    Click on the image for a larger view
    Click on the image for a larger view

    Make sure to click Language again and select DAX from the list. Only then it will be applied to the file you opened.

    If you don’t see DAX in the language menu right away, you may have to restart Notepad++.

    Click on the image for a larger view
    Click on the image for a larger view

    Auto Completion

    This will give you syntax highlighting. If you want to have the auto-complete functionality, you need to

    • navigate to the extracted folder
    • enter the “AutoComplete” folder
    • copy the file “m.xml” from the AutoComplete folder to the folder “autoCompletion” inside the Notepad++ program directory. In my case this is “C:\Program Files\Notepad++\autoCompletion
      • You will get a warning, requiring Administrator permissions.
    • Confirm the warning and restart Notepad++
    Click on the image for a larger view

    Modifying The Colors

    I tried to pick colors that work equally well with the light and dark theme of Notepad++. However, colors that work well for me, might not be that great for you.

    Fortunately, you can adapt them very easily. In Notepad++ click on Language, User Defined Language, Define your Language.

    Select M from the User Language drop-down:

    Click on the image for a larger view
    Click on the image for a larger view

    Use the tabs to find the elements you want to modify:

    • Folder & Default
    • Keywords
    • Comment & Number
    • Operators & Delimiters
    Click on the image for a larger view
    Click on the image for a larger view

    Click on the Styler button and adjust any attributes you want

    • Font
    • Size
    • Bold
    • Italic
    • Underline
    • Foreground color
    • Background color
    pbi_dax_npp_05
    Click on the image for a larger view

    Version History

    • Fixed some formatting issues

    • Created completely new XML files for syntax highlighting and auto-completion
    • Adjusted formatting to work with dark and light mode
    • Made the syntax highlighting case-insensitive
    • Separated AutoComplete from syntax highlighting to work with the new version of Notepad++

    27 Comments

    1. Hi there; wondered if you wanted to add autocomplete functionality to this? If you add a DAX.xml file to your ProgramFiles\Notepad++\plugins\APIs\ folder with entries for each function in a specified format (see below), then the autocomplete (like Intellisense) works in Notepad++:

      Sample structure for each function:

      <Param name = "” />
      ” />
      <Param name = "” />
      <Param name = "” />

      Please send me a note if you would like my initial draft of this document. I just don’t have a good way to scrape all of this updated information and populate this file (which I suspect you may already have).

    2. Hi Sascha

      Thank you so much for your work on this!

      I use an M UserDefined in Notepad++ and it’s a lifesaver. I’m starting out learning DAX and this will be a fantastic help. I would also love the Intellisense functionality that Geoff is offering as I make use of that in M already and it’s great!

    3. Sascha D. Kasper

      Hi Geoff,
      yes, I would like this very much. I tried before but got stuck and then had to deal with other things first. I would very much appreciate your help here. Thanks.

    4. Sascha D. Kasper

      Hi Zedleb,
      would you mind sharing the ‘m.xml’ file? I do have one, but am not very happy with it, to be honest.
      If Geoff is kind enough to provide his draft, I will take another shot on autocomplete for DAX.
      Thank you for your feedback.

    5. @Sascha thank you for sharing this work. It is really helpful for me.
      The Intellisense functionality @Geoff referred would be the cherry on top of the cake .
      Great work

    6. Sascha D. Kasper

      Thank you, Jose. Much appreciated. Please share, if you find it useful. I will keep working on Auto completion. Just need to make some time for it.

    7. Sascha D. Kasper

      Hi again,
      I now added AutoComplete to the DAX file. Just download it again and replace the old one. If you are not sure, check the version number (a comment in the file). It should be 2.05.
      Let me know if it works.

    8. Sascha D. Kasper

      Hi again,
      I now added AutoComplete to the DAX file. Just download it again and replace the old one. If you are not sure, check the version number (a comment in the file). It should be 2.05.
      Let me know if it works.

    9. Sascha D. Kasper

      Hi again,
      I now added AutoComplete to the DAX file. Just download it again and replace the old one. If you are not sure, check the version number (a comment in the file). It should be 2.05.
      Let me know if it works.

    10. Hi Sascha – how can I reach you to send you my work in progress on the autocomplete? I cannot seem to find a contact page on your website.

    11. Sorry for the multiple posts. I looked into your revised DAX xml file and looks great.

      One point that would improve this even further would be to expand each keyword with description and required parameters e.g. CALCULATETABLE below:

      <Param name = " ” />
      <Param name = " ” />
      <Param name = " ” />

    12. Sascha D. Kasper

      yes, that’s true. frankly, the current version with auto-complete was what I could do quickly and I found it better than nothing. Adding description and parameters is certainly on the backlog.

    13. Sascha D. Kasper

      Updated the file (now version 3.01) to include

      • Parameters
      • Return Value
      • Description

      See the screenshots in the updated post for details.

      I did only preliminary testing, so if you find any issues, please let me know.

    14. Hi Sascha,

      Firstly, kudos to you for creating such a great tool!

      Secondly, I could get autocomplete to work but I couldn’t see the parameters, return value and description option and I’m pretty sure I’m using the version 3.01 file.

      Thanks

    15. Hi Luke, thank you for your feedback. I am not sure what to tell you. I just double checked and it works fine. Some things to consider:

      1. please open the DAX.xml file and check the version to make sure it is 3.01
      2. the syntax is case sensitive. I.e. using ‘CALCULATE’ would work, but ‘calculate’ would not.
      3. the parameters and value options are only displayed once you type the ‘(‘. e.g.: ‘ = IF( ‘. NOT after just typing ‘IF’

      Please check these things. Thank you.

    16. Daniel Holth

      Thanks for putting this together. They way you grouped the keywords is intuitive. Lets me easily use this with dark theme by swapping for brighter colors on black background.

      Cheers!

    17. Walid Saafan

      Thanks for your excellent work, We really appreciate your effort

    18. Sascha D. Kasper

      Thank you, Walid. Glad to see that it is useful for people.

    19. Cameron Turner

      Hi Sascha,

      There is an error in the 3.04 V of the XML.

      I think that you have added the autocorrect of the three new functions, but have not put them into the key words. This then causes an “Fail to import” error on notepad++.

      I found that if I delete the three auto complete inputs then the code will import successfully.

      Thanks for your continued hard work!

    20. Rodney Moulder

      Hi Cameron are you able to send me the a working version I am getting failed to import error

    21. Sascha D. Kasper

      Hi Cameron. Thank you for pointing this out. You’re right, of course. I will provide a fixed import file tomorrow. My apologies for the inconvenience!

    22. Sascha D. Kasper

      Hi Rodney. I will provide a fixed import file tomorrow. Sorry about that.

    23. Sascha D. Kasper

      Rodney, the fixed XML file is now available for download.

    24. Sascha D. Kasper

      Cameron, fixed XML file is now online for download. I forgot to close a tag… Thank you again for letting me know.

    25. Walid Saafan

      Hi Sascha,
      Thanks for your effort.
      I added the updated dax.xml to notepad++ as per your instructions, selected DAX from the language, enable auto-completion preference.
      the auto completion for DAX functions is not working! it is colored blue after full typing.
      Your help is appreciated.
      Thanks

    26. Sascha D. Kasper

      Hi Walid Saafan,
      thank you for your input. I fixed the file and added two new functions, which were only released yesterday (see release notes for details).
      Please let me know, if it works for you.
      Cheers.

    Leave a Comment

    Your email address will not be published.

    This site uses Akismet to reduce spam. Learn how your comment data is processed.