blob: 12e54ee1f529f6ff00c4de31b373c22509b6638d [file] [log] [blame]
Anarion Dunedain7f518e02025-04-02 19:44:58 +02001" 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
8if exists("b:current_syntax")
9 finish
10endif
11let s:keepcpo = &cpo
12set cpo&vim
13
14" There are DAX functions with dot in the name (like VARX.S)
15setlocal iskeyword+=.
16" DAX is case insensitive
17syn case ignore
18
19" DAX statements
20syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR
21syn match daxStatement "ORDER\ BY"
22syn match daxStatement "START\ AT"
23
24" TODO
25syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
26
27" DAX functions
28syn 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
93syn match daxFunction "CONTAINS"
94
95" Numbers
96" integer number, or floating point number without a dot.
97syn match daxNumber "\<\d\+\>"
98" floating point number, with dot
99syn match daxNumber "\<\d\+\.\d*\>"
100
101syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+"
102syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
103syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
104
105" String and Character constants
106syn region daxString start=+"+ end=+"+
107
108" DAX Table and Column names
109syn region daxTable start=+'+ms=s+1 end=+'+me=e-1
110syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/
111
112" Operators
113syn match daxOperator "+"
114syn match daxOperator "-"
115syn match daxOperator "*"
116syn match daxOperator "/"
117syn match daxOperator "\^"
118syn match daxOperator "\ NOT(\s\|\\)"
119syn match daxOperator "\ IN\ "
120syn match daxOperator "&&"
121syn match daxOperator "&"
122syn match daxOperator "\\|\\|"
123syn match daxOperator "[<>]=\="
124syn match daxOperator "<>"
125syn match daxOperator "="
126syn match daxOperator ">"
127syn match daxOperator "<"
128
129" Comments
130syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo
131syn region daxComment start="/\*" end="\*/" contains=daxTodo
132
133" Define highlighting
134hi def link daxComment Comment
135hi def link daxNumber Number
136hi def link daxFloat Float
137hi def link daxString String
138hi def link daxStatement Keyword
139hi def link daxOperator Operator
140hi def link daxFunction Function
141hi def link daxTable Number
142hi def link daxColumn Statement
143hi def link daxParen Delimiter
144hi def link daxTodo Todo
145
146let b:current_syntax = "dax"
147
148let &cpo = s:keepcpo
149unlet! s:keepcpo
150
151" vim: ts=8