dax.vim (7479B)
1 " Vim syntax file 2 " Language: Data Analysis Expressions (DAX) 3 " Maintainer: Anarion Dunedain <anarion80@gmail.com> 4 " Last Change: 5 " 2025 Mar 28 First version 6 7 " quit when a syntax file was already loaded 8 if exists("b:current_syntax") 9 finish 10 endif 11 let s:keepcpo = &cpo 12 set cpo&vim 13 14 " There are DAX functions with dot in the name (like VARX.S) 15 setlocal iskeyword+=. 16 " DAX is case insensitive 17 syn case ignore 18 19 " DAX statements 20 syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR 21 syn match daxStatement "ORDER\ BY" 22 syn match daxStatement "START\ AT" 23 24 " TODO 25 syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained 26 27 " DAX functions 28 syn keyword daxFunction 29 \ ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH 30 \ ADDCOLUMNS ADDMISSINGITEMS ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED 31 \ AMORDEGRC AMORLINC AND APPROXIMATEDISTINCTCOUNT ASIN ASINH ATAN 32 \ ATANH AVERAGE AVERAGEA AVERAGEX BETA.DIST BETA.INV BITAND 33 \ BITLSHIFT BITOR BITRSHIFT BITXOR BLANK CALCULATE CALCULATETABLE 34 \ CALENDAR CALENDARAUTO CEILING CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT 35 \ CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR COALESCE COLUMNSTATISTICS COMBIN COMBINA 36 \ COMBINEVALUES CONCATENATE CONCATENATEX CONFIDENCE.NORM CONFIDENCE.T CONTAINSROW 37 \ CONTAINSSTRING CONTAINSSTRINGEXACT CONVERT COS COSH COT COTH 38 \ COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX COUPDAYBS 39 \ COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CROSSFILTER CROSSJOIN 40 \ CUMIPMT CUMPRINC CURRENCY CURRENTGROUP CUSTOMDATA DATATABLE DATE 41 \ DATEADD DATEDIFF DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD 42 \ DATEVALUE DAY DB DDB DEGREES DETAILROWS DISC 43 \ DISTINCT column DISTINCT table DISTINCTCOUNT DISTINCTCOUNTNOBLANK DIVIDE DOLLARDE DOLLARFR 44 \ DURATION EARLIER EARLIEST EDATE EFFECT ENDOFMONTH ENDOFQUARTER 45 \ ENDOFYEAR EOMONTH ERROR EVALUATEANDLOG EVEN EXACT EXCEPT 46 \ EXP EXPON.DIST FACT FALSE FILTER FILTERS FIND 47 \ FIRST FIRSTDATE FIXED FLOOR FORMAT FV GCD 48 \ GENERATE GENERATEALL GENERATESERIES GEOMEAN GEOMEANX GROUPBY HASONEFILTER 49 \ HASONEVALUE HOUR IF IF.EAGER IFERROR IGNORE INDEX 50 \ INFO.ALTERNATEOFDEFINITIONS INFO.ANNOTATIONS INFO.ATTRIBUTEHIERARCHIES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.CALCDEPENDENCY INFO.CALCULATIONGROUPS INFO.CALCULATIONITEMS 51 \ INFO.CATALOGS INFO.CHANGEDPROPERTIES INFO.COLUMNPARTITIONSTORAGES INFO.COLUMNPERMISSIONS INFO.COLUMNS INFO.COLUMNSTORAGES INFO.CSDLMETADATA 52 \ INFO.CULTURES INFO.DATACOVERAGEDEFINITIONS INFO.DATASOURCES INFO.DELTATABLEMETADATASTORAGES INFO.DEPENDENCIES INFO.DETAILROWSDEFINITIONS INFO.DICTIONARYSTORAGES 53 \ INFO.EXCLUDEDARTIFACTS INFO.EXPRESSIONS INFO.EXTENDEDPROPERTIES INFO.FORMATSTRINGDEFINITIONS INFO.FUNCTIONS INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.GROUPBYCOLUMNS 54 \ INFO.HIERARCHIES INFO.HIERARCHYSTORAGES INFO.KPIS INFO.LEVELS INFO.LINGUISTICMETADATA INFO.MEASURES INFO.MODEL 55 \ INFO.OBJECTTRANSLATIONS INFO.PARQUETFILESTORAGES INFO.PARTITIONS INFO.PARTITIONSTORAGES INFO.PERSPECTIVECOLUMNS INFO.PERSPECTIVEHIERARCHIES INFO.PERSPECTIVEMEASURES 56 \ INFO.PERSPECTIVES INFO.PERSPECTIVETABLES INFO.PROPERTIES INFO.QUERYGROUPS INFO.REFRESHPOLICIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPINDEXSTORAGES 57 \ INFO.RELATIONSHIPS INFO.RELATIONSHIPSTORAGES INFO.ROLEMEMBERSHIPS INFO.ROLES INFO.SEGMENTMAPSTORAGES INFO.SEGMENTSTORAGES INFO.STORAGEFILES 58 \ INFO.STORAGEFOLDERS INFO.STORAGETABLECOLUMNS INFO.STORAGETABLECOLUMNSEGMENTS INFO.STORAGETABLES INFO.TABLEPERMISSIONS INFO.TABLES INFO.TABLESTORAGES 59 \ INFO.VARIATIONS INFO.VIEW.COLUMNS INFO.VIEW.MEASURES INFO.VIEW.RELATIONSHIPS INFO.VIEW.TABLES INT INTERSECT 60 \ INTRATE IPMT ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR 61 \ ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISO.CEILING 62 \ ISODD ISONORAFTER ISPMT ISSELECTEDMEASURE ISSUBTOTAL ISTEXT KEEPFILTERS 63 \ LAST LASTDATE LCM LEFT LEN LINEST LINESTX 64 \ LN LOG LOG10 LOOKUPVALUE LOWER MATCHBY MAX 65 \ MAXA MAXX MDURATION MEDIAN MEDIANX MID MIN 66 \ MINA MINUTE MINX MOD MONTH MOVINGAVERAGE MROUND 67 \ NATURALINNERJOIN NATURALLEFTOUTERJOIN NETWORKDAYS NEXT NEXTDAY NEXTMONTH NEXTQUARTER 68 \ NEXTYEAR NOMINAL NONVISUAL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV 69 \ NOT NOW NPER ODD ODDFPRICE ODDFYIELD ODDLPRICE 70 \ ODDLYIELD OFFSET OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR OR ORDERBY 71 \ PARALLELPERIOD PARTITIONBY PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH 72 \ PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT PI 73 \ PMT POISSON.DIST POWER PPMT PREVIOUS PREVIOUSDAY PREVIOUSMONTH 74 \ PREVIOUSQUARTER PREVIOUSYEAR PRICE PRICEDISC PRICEMAT PRODUCT PRODUCTX 75 \ PV QUARTER QUOTIENT RADIANS RAND RANDBETWEEN RANGE 76 \ RANK RANK.EQ RANKX RATE RECEIVED RELATED RELATEDTABLE 77 \ REMOVEFILTERS REPLACE REPT RIGHT ROLLUP ROLLUPADDISSUBTOTAL ROLLUPGROUP 78 \ ROLLUPISSUBTOTAL ROUND ROUNDDOWN ROUNDUP ROW ROWNUMBER RRI 79 \ RUNNINGSUM SAMEPERIODLASTYEAR SAMPLE SEARCH SECOND SELECTCOLUMNS SELECTEDMEASURE 80 \ SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME SELECTEDVALUE SIGN SIN SINH SLN 81 \ SQRT SQRTPI STARTOFMONTH STARTOFQUARTER STARTOFYEAR STDEV.P STDEV.S 82 \ STDEVX.P STDEVX.S SUBSTITUTE SUBSTITUTEWITHINDEX SUM SUMMARIZE SUMMARIZECOLUMNS 83 \ SUMX SWITCH SYD T.DIST T.DIST.2T T.DIST.RT T.INV 84 \ T.INV.2t TAN TANH TBILLEQ TBILLPRICE TBILLYIELD TIME 85 \ TIMEVALUE TOCSV TODAY TOJSON TOPN TOTALMTD TOTALQTD 86 \ TOTALYTD TREATAS TRIM TRUE TRUNC Table Constructor UNICHAR 87 \ UNICODE UNION UPPER USERCULTURE USERELATIONSHIP USERNAME USEROBJECTID 88 \ USERPRINCIPALNAME UTCNOW UTCTODAY VALUE VALUES VAR.P VAR.S 89 \ VARX.P VARX.S VDB WEEKDAY WEEKNUM WINDOW XIRR 90 \ XNPV YEAR YEARFRAC YIELD YIELDDISC YIELDMAT 91 92 " CONTAINS is a vim syntax keyword and can't be a defined keyword 93 syn match daxFunction "CONTAINS" 94 95 " Numbers 96 " integer number, or floating point number without a dot. 97 syn match daxNumber "\<\d\+\>" 98 " floating point number, with dot 99 syn match daxNumber "\<\d\+\.\d*\>" 100 101 syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+" 102 syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\=" 103 syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\=" 104 105 " String and Character constants 106 syn region daxString start=+"+ end=+"+ 107 108 " DAX Table and Column names 109 syn region daxTable start=+'+ms=s+1 end=+'+me=e-1 110 syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/ 111 112 " Operators 113 syn match daxOperator "+" 114 syn match daxOperator "-" 115 syn match daxOperator "*" 116 syn match daxOperator "/" 117 syn match daxOperator "\^" 118 syn match daxOperator "\ NOT(\s\|\\)" 119 syn match daxOperator "\ IN\ " 120 syn match daxOperator "&&" 121 syn match daxOperator "&" 122 syn match daxOperator "\\|\\|" 123 syn match daxOperator "[<>]=\=" 124 syn match daxOperator "<>" 125 syn match daxOperator "=" 126 syn match daxOperator ">" 127 syn match daxOperator "<" 128 129 " Comments 130 syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo 131 syn region daxComment start="/\*" end="\*/" contains=daxTodo 132 133 " Define highlighting 134 hi def link daxComment Comment 135 hi def link daxNumber Number 136 hi def link daxFloat Float 137 hi def link daxString String 138 hi def link daxStatement Keyword 139 hi def link daxOperator Operator 140 hi def link daxFunction Function 141 hi def link daxTable Number 142 hi def link daxColumn Statement 143 hi def link daxParen Delimiter 144 hi def link daxTodo Todo 145 146 let b:current_syntax = "dax" 147 148 let &cpo = s:keepcpo 149 unlet! s:keepcpo 150 151 " vim: ts=8