Anarion Dunedain | 7f518e0 | 2025-04-02 19:44:58 +0200 | [diff] [blame] | 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 |