[{"data":1,"prerenderedAt":6510},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fcapabilities\u002Freport-functions":3,"docs-nav":6289},{"id":4,"title":5,"body":6,"description":6280,"extension":6281,"meta":6282,"navigation":6284,"path":6285,"seo":6286,"stem":6287,"__hash__":6288},"docs\u002Fdocs\u002Fcapabilities\u002Freport-functions.md","Report functions",{"type":7,"value":8,"toc":6215},"minimark",[9,13,33,40,55,60,68,282,312,347,602,623,626,629,733,773,779,998,1003,1066,1207,1242,1245,1281,1284,1287,1293,1358,1361,1367,1425,1437,1441,1450,1524,1527,1540,1604,1607,1613,1652,1656,1670,1727,1731,1760,1883,1894,1897,1914,1935,2028,2037,2106,2109,2122,2185,2188,2208,2211,2214,2226,2339,2345,2452,2455,2500,2528,2548,2551,2560,2584,2591,2678,2692,2708,2727,2730,2771,2820,2823,2833,2902,2905,2911,2956,2959,2965,3018,3021,3027,3066,3069,3110,3113,3119,3191,3203,3207,3221,3293,3296,3302,3349,3352,3357,3404,3421,3666,3669,3675,3756,3759,3775,3778,3796,3846,3849,3855,3901,3905,3925,4007,4010,4035,4149,4152,4158,4251,4255,4272,4336,4339,4342,4361,4410,4412,4425,4429,4455,4458,4461,4482,4845,4870,4873,4877,4880,4887,4907,4911,4918,4924,4938,4952,4958,4974,4987,5079,5092,5099,5103,5117,5123,5145,5149,5166,5172,5283,5302,5307,5313,5337,5341,5347,5439,5447,5453,5547,5562,5566,5572,5605,5609,5612,5618,5633,5637,5655,5659,5672,5676,5702,5706,5712,5721,5724,5731,6181,6185,6211],[10,11,5],"h1",{"id":12},"report-functions",[14,15,16,17,22,23,27,28,32],"p",{},"Every function a ",[18,19,21],"a",{"href":20},"\u002Fdocs\u002Fcapabilities\u002Freports","report"," can write in its expressions, family by family:\nwhat it takes, what it gives, what it does with a missing value, and an example on the\nsample data with the result it prints. The language itself (fields in brackets, texts\nin double quotes, ",[24,25,26],"code",{},"&",", the operators) is in ",[18,29,31],{"href":30},"\u002Fdocs\u002Fcapabilities\u002Freports#expressions","Reports: expressions",".",[14,34,35],{},[36,37],"img",{"alt":38,"src":39},"In the designer a KPI is added; its value is written with the completion: SUM is chosen among the functions with its arguments and what it does, then the field margine among the fields; a wrong field ricavoo is underlined and the message under it suggests ricavo; one letter removed, the message goes away; the format 0.0% is written","\u002Fmedia\u002Fguide\u002Freports\u002Fdesigner-expression-editor.gif",[14,41,42],{},[43,44,45,46,50,51,54],"em",{},"The expression editor: the first letters, or ",[47,48,49],"strong",{},"Ctrl+Space",", list the functions with\ntheir arguments and what they do; ",[24,52,53],{},"["," lists the dataset's fields with their types; the\nline under the field shows the function the cursor is in, its current argument in bold.\nA mistake is underlined, and the message says what to write instead.",[56,57,59],"h2",{"id":58},"the-examples-data","The examples' data",[14,61,62,63,67],{},"Every example below was rendered on the sample data of a fresh installation\n(",[18,64,66],{"href":65},"\u002Fdocs\u002Fgetting-started-docker-compose#a-the-sample-data-already-there","the «Sample» folder","),\nin a report in English, with these datasets:",[69,70,71,238,255,268],"ul",{},[72,73,74,77,78,81,82,172,175,176,179,180],"li",{},[24,75,76],{},"margins",", ",[47,79,80],{},"SQL"," on the catalog with DuckDB: the first six months of 2025 of the\ndatasource «Margin by Category and Month», 30 rows, five categories by six months:",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-sql shiki shiki-themes github-dark-dimmed github-light","SELECT categoria, anno_mese, ricavo, costo, margine, margine_pct, ordini\nFROM \"Margin by Category and Month\"\nWHERE ({category} IS NULL OR categoria = {category})\n  AND anno_mese BETWEEN 202501 AND 202506\nORDER BY categoria, anno_mese\n","sql","",[24,90,91,104,114,141,163],{"__ignoreMap":88},[92,93,96,100],"span",{"class":94,"line":95},"line",1,[92,97,99],{"class":98},"s6PUj","SELECT",[92,101,103],{"class":102},"ssh_m"," categoria, anno_mese, ricavo, costo, margine, margine_pct, ordini\n",[92,105,107,110],{"class":94,"line":106},2,[92,108,109],{"class":98},"FROM",[92,111,113],{"class":112},"sXfbr"," \"Margin by Category and Month\"\n",[92,115,117,120,123,126,129,132,135,138],{"class":94,"line":116},3,[92,118,119],{"class":98},"WHERE",[92,121,122],{"class":102}," ({category} ",[92,124,125],{"class":98},"IS",[92,127,128],{"class":98}," NULL",[92,130,131],{"class":98}," OR",[92,133,134],{"class":102}," categoria ",[92,136,137],{"class":98},"=",[92,139,140],{"class":102}," {category})\n",[92,142,144,147,150,153,157,160],{"class":94,"line":143},4,[92,145,146],{"class":98},"  AND",[92,148,149],{"class":102}," anno_mese ",[92,151,152],{"class":98},"BETWEEN",[92,154,156],{"class":155},"swcJU"," 202501",[92,158,159],{"class":98}," AND",[92,161,162],{"class":155}," 202506\n",[92,164,166,169],{"class":94,"line":165},5,[92,167,168],{"class":98},"ORDER BY",[92,170,171],{"class":102}," categoria, anno_mese\n",[173,174],"br",{},"with two ",[47,177,178],{},"calculated fields",":",[181,182,183,198],"table",{},[184,185,186],"thead",{},[187,188,189,193,196],"tr",{},[190,191,192],"th",{},"Name",[190,194,195],{},"Expression",[190,197],{},[199,200,201,220],"tbody",{},[187,202,203,209,214],{},[204,205,206],"td",{},[24,207,208],{},"Month",[204,210,211],{},[24,212,213],{},"DATE(FLOOR([anno_mese] \u002F 100), [anno_mese] - FLOOR([anno_mese] \u002F 100) * 100, 1)",[204,215,216,219],{},[24,217,218],{},"202503"," becomes the date 1 March 2025",[187,221,222,227,232],{},[204,223,224],{},[24,225,226],{},"MarginPct",[204,228,229],{},[24,230,231],{},"IF([ricavo] = 0, NULL, [margine] \u002F [ricavo])",[204,233,234,235],{},"the margin as a fraction, ",[24,236,237],{},"0.307",[72,239,240,243,244,246,247,251,252,32],{},[24,241,242],{},"history",", the same datasource with every month it has, from January 2024, in the same\norder, with the calculated field ",[24,245,208],{},": what the comparisons with\n",[18,248,250],{"href":249},"#the-year-before","the year before"," read:\n",[24,253,254],{},"SELECT categoria, anno_mese, ricavo FROM \"Margin by Category and Month\" ORDER BY categoria, anno_mese",[72,256,257,260,261,264,265,32],{},[24,258,259],{},"order",", one order of the datasource ",[24,262,263],{},"orders",", placed on Saturday 1 July 2023:\n",[24,266,267],{},"SELECT numero, data_ordine, canale, stato, deposito FROM orders WHERE numero = 'ORD-12902'",[72,269,270,273,274,277,278,32],{},[24,271,272],{},"top"," and ",[24,275,276],{},"prices",", the twenty best products and the price list, for\n",[18,279,281],{"href":280},"#a-value-from-a-price-list","a value from a price list",[14,283,284,285,288,289,292,293,296,297,300,301,304,305,307,308,311],{},"The report has two parameters: ",[24,286,287],{},"category",", a text, optional, its choices the categories\n(none chosen unless an example says so), and ",[24,290,291],{},"since",", a date, ",[24,294,295],{},"2025-01-01",".\n",[24,298,299],{},"margine_pct"," is a percentage as the sample flow writes it (",[24,302,303],{},"30.75","), ",[24,306,226],{}," a\nfraction (",[24,309,310],{},"0.3075",").",[14,313,314,315,318,319,321,322,273,325,328,329,331,332,335,336,339,340,273,343,346],{},"An expression goes in a ",[47,316,317],{},"Text"," that starts with ",[24,320,137],{},", or in any expression property (a\ncolumn's ",[47,323,324],{},"Value",[47,326,327],{},"Total",", a KPI's ",[47,330,324],{},"…). In the tables, ",[47,333,334],{},"Gives"," is what\nthe report prints when the expression has no format of its own: a whole number with no\nseparators, other numbers with separators and up to two decimals, a date as ",[24,337,338],{},"d MMM yyyy",",\ntrue and false as ",[47,341,342],{},"Yes",[47,344,345],{},"No",", NULL as nothing.",[181,348,349,359],{},[184,350,351],{},[187,352,353,356],{},[190,354,355],{},"Family",[190,357,358],{},"Functions",[199,360,361,411,427,459,484,529,566,588],{},[187,362,363,369],{},[204,364,365],{},[18,366,368],{"href":367},"#aggregates-and-scope","Aggregates and scope",[204,370,371,374,375,374,378,374,381,374,384,374,387,374,390,374,393,374,396,374,399,374,402,374,405,374,408],{},[24,372,373],{},"SUM"," ",[24,376,377],{},"AVG",[24,379,380],{},"MIN",[24,382,383],{},"MAX",[24,385,386],{},"COUNT",[24,388,389],{},"COUNTDISTINCT",[24,391,392],{},"FIRST",[24,394,395],{},"LAST",[24,397,398],{},"SUMIF",[24,400,401],{},"COUNTIF",[24,403,404],{},"PERCENT",[24,406,407],{},"RUNNING",[24,409,410],{},"ROWNUMBER",[187,412,413,419],{},[204,414,415],{},[18,416,418],{"href":417},"#other-rows","Other rows",[204,420,421,374,424],{},[24,422,423],{},"PREVIOUS",[24,425,426],{},"LOOKUP",[187,428,429,435],{},[204,430,431],{},[18,432,434],{"href":433},"#logic","Logic",[204,436,437,374,440,374,443,374,446,449,450,374,453,374,456],{},[24,438,439],{},"IF",[24,441,442],{},"IFS",[24,444,445],{},"ISNULL",[24,447,448],{},"COALESCE",", and ",[24,451,452],{},"AND",[24,454,455],{},"OR",[24,457,458],{},"NOT",[187,460,461,467],{},[204,462,463],{},[18,464,466],{"href":465},"#maths","Maths",[204,468,469,374,472,374,475,374,478,374,481],{},[24,470,471],{},"ROUND",[24,473,474],{},"ABS",[24,476,477],{},"FLOOR",[24,479,480],{},"CEILING",[24,482,483],{},"POWER",[187,485,486,491],{},[204,487,488],{},[18,489,317],{"href":490},"#text",[204,492,493,374,496,374,499,374,502,374,505,374,508,374,511,374,514,374,517,374,520,374,523,374,526],{},[24,494,495],{},"UPPER",[24,497,498],{},"LOWER",[24,500,501],{},"TRIM",[24,503,504],{},"LEN",[24,506,507],{},"LEFT",[24,509,510],{},"RIGHT",[24,512,513],{},"MID",[24,515,516],{},"REPLACE",[24,518,519],{},"CONTAINS",[24,521,522],{},"STARTSWITH",[24,524,525],{},"TEXT",[24,527,528],{},"CONCAT",[187,530,531,537],{},[204,532,533],{},[18,534,536],{"href":535},"#dates","Dates",[204,538,539,374,542,374,545,374,548,374,551,374,554,374,557,374,560,374,563],{},[24,540,541],{},"DATE",[24,543,544],{},"YEAR",[24,546,547],{},"MONTH",[24,549,550],{},"DAY",[24,552,553],{},"WEEKDAY",[24,555,556],{},"DATEADD",[24,558,559],{},"DATEDIFF",[24,561,562],{},"TODAY",[24,564,565],{},"NOW",[187,567,568,574],{},[204,569,570],{},[18,571,573],{"href":572},"#report-and-page","Report and page",[204,575,576,374,579,374,582,374,585],{},[24,577,578],{},"PARAM",[24,580,581],{},"REPORT",[24,583,584],{},"PAGE",[24,586,587],{},"PAGES",[187,589,590,596],{},[204,591,592],{},[18,593,595],{"href":594},"#formats","Formats",[204,597,598,601],{},[24,599,600],{},"FORMAT"," and its patterns",[14,603,604,605,608,609,612,613,617,618,622],{},"Names are written in capitals or not: ",[24,606,607],{},"sum([ricavo])"," is ",[24,610,611],{},"SUM([ricavo])",". Arguments in\nbrackets in the signatures are optional. ",[18,614,616],{"href":615},"#recipes","Recipes"," put them together for a\nreal report, and ",[18,619,621],{"href":620},"#when-an-expression-is-wrong","When an expression is wrong"," lists what\nthe checks say.",[56,624,368],{"id":625},"aggregates-and-scope",[14,627,628],{},"An aggregate works on a set of rows, and which rows depends on where it is written:",[181,630,631,641],{},[184,632,633],{},[187,634,635,638],{},[190,636,637],{},"Written in",[190,639,640],{},"Works on",[199,642,643,661,672,686,696,707,718],{},[187,644,645,658],{},[204,646,647,648,650,651,650,654,657],{},"a ",[47,649,317],{},", a ",[47,652,653],{},"KPI",[47,655,656],{},"Chart","'s series in the body",[204,659,660],{},"the rows of the item's dataset (a chart: those of each category along its axis)",[187,662,663,669],{},[204,664,665,666,668],{},"a column's ",[47,667,327],{},", in a group's total row",[204,670,671],{},"the rows of that group",[187,673,674,679],{},[204,675,665,676,678],{},[47,677,327],{},", in the grand total",[204,680,681,682,685],{},"all the table's rows (after ",[47,683,684],{},"Rows where",")",[187,687,688,694],{},[204,689,690,691],{},"a group's ",[47,692,693],{},"Label",[204,695,671],{},[187,697,698,704],{},[204,699,700,701],{},"a matrix's ",[47,702,703],{},"Value of the cells",[204,705,706],{},"the rows that meet in the cell",[187,708,709,715],{},[204,710,711,712],{},"anywhere, with a dataset named last: ",[24,713,714],{},"SUM([ricavo], \"margins\")",[204,716,717],{},"the whole dataset; the only way in the page header and footer",[187,719,720,726],{},[204,721,722,723],{},"in a table, with a group named last: ",[24,724,725],{},"SUM([ricavo], \"categoria\")",[204,727,728,729,685],{},"the rows of that group, around the row or the total it is written in (",[18,730,732],{"href":731},"#a-group-by-name","a group by name",[14,734,735,736,739,740,743,744,747,748,751,752,755,756,759,760,763,764,77,766,769,770,32],{},"An aggregate cannot be written where the value of each row is wanted: a group's ",[47,737,738],{},"Group\nby",", the ",[47,741,742],{},"Order of the rows",", a matrix's ",[47,745,746],{},"One column per value of",", a chart's axis\nand ",[47,749,750],{},"One series per value of",", a sparkline's ",[47,753,754],{},"Along",", the choices of a parameter.\nAn aggregate takes no other inside it: ",[24,757,758],{},"SUM([margine]) \u002F SUM([ricavo])",", not\n",[24,761,762],{},"SUM(SUM(...))",". A field written where there is no current row (a group's total row, a\ntext) is the value of the first of its rows: in a text on ",[24,765,76],{},[24,767,768],{},"[categoria]"," gives\n",[24,771,772],{},"Insaccati cotti",[14,774,775,776,778],{},"All aggregates leave NULLs out. On no rows, or only NULLs, ",[24,777,386],{}," gives 0 and the\nothers NULL.",[181,780,781,805],{},[184,782,783],{},[187,784,785,787,794,797,801],{},[190,786,637],{},[190,788,789,790,77,792],{},"Aggregates, ",[24,791,398],{},[24,793,401],{},[190,795,796],{},"With a group named",[190,798,799],{},[24,800,423],{},[190,802,803],{},[24,804,426],{},[199,806,807,830,846,861,880,899,921,937,955,971,985],{},[187,808,809,816,819,822,828],{},[204,810,665,811,650,813],{},[47,812,324],{},[47,814,815],{},"Rule",[204,817,818],{},"yes",[204,820,821],{},"every group of the table",[204,823,824,825],{},"yes, of a field: ",[24,826,827],{},"PREVIOUS([ricavo])",[204,829,818],{},[187,831,832,836,838,841,844],{},[204,833,665,834],{},[47,835,327],{},[204,837,818],{},[204,839,840],{},"the group it closes, and those around it",[204,842,843],{},"yes, with an aggregate, if the table has groups",[204,845,818],{},[187,847,848,852,854,857,859],{},[204,849,690,850],{},[47,851,693],{},[204,853,818],{},[204,855,856],{},"that group, and those around it",[204,858,818],{},[204,860,818],{},[187,862,863,867,869,875,878],{},[204,864,700,865],{},[47,866,703],{},[204,868,818],{},[204,870,871,872,874],{},"as in a ",[47,873,327],{},": its total rows are cells too",[204,876,877],{},"no",[204,879,818],{},[187,881,882,891,893,895,897],{},[204,883,647,884,650,886,77,888],{},[47,885,317],{},[47,887,653],{},[47,889,890],{},"Shown when",[204,892,818],{},[204,894,877],{},[204,896,877],{},[204,898,818],{},[187,900,901,906,908,910,919],{},[204,902,647,903,905],{},[47,904,656],{},"'s series",[204,907,818],{},[204,909,877],{},[204,911,912,913,273,916],{},"yes, along the axis, without ",[47,914,915],{},"Sort",[47,917,918],{},"Top",[204,920,818],{},[187,922,923,927,930,933,935],{},[204,924,925],{},[47,926,684],{},[204,928,929],{},"yes, on all the rows",[204,931,932],{},"no: the groups do not exist yet",[204,934,877],{},[204,936,818],{},[187,938,939,947,949,951,953],{},[204,940,941,77,944,946],{},[47,942,943],{},"Group by",[47,945,742],{},", a chart's axis",[204,948,877],{},[204,950,877],{},[204,952,877],{},[204,954,818],{},[187,956,957,962,965,967,969],{},[204,958,647,959],{},[47,960,961],{},"calculated field",[204,963,964],{},"yes, on the whole dataset",[204,966,877],{},[204,968,877],{},[204,970,818],{},[187,972,973,976,979,981,983],{},[204,974,975],{},"the page header and footer",[204,977,978],{},"with a dataset named",[204,980,877],{},[204,982,877],{},[204,984,978],{},[187,986,987,990,992,994,996],{},[204,988,989],{},"the choices of a parameter",[204,991,877],{},[204,993,877],{},[204,995,877],{},[204,997,877],{},[999,1000,1002],"h3",{"id":1001},"a-group-by-name","A group by name",[14,1004,1005,1006,77,1008,77,1010,77,1012,77,1014,77,1016,77,1018,77,1020,1022,1023,273,1025,1027,1028,1031,1032,1034,1035,1038,1039,1042,1043,1046,1047,77,1050,1053,1054,1056,1057,1059,1060,1063,1064,179],{},"The last argument of ",[24,1007,373],{},[24,1009,377],{},[24,1011,380],{},[24,1013,383],{},[24,1015,386],{},[24,1017,389],{},[24,1019,392],{},[24,1021,395],{},",\n",[24,1024,398],{},[24,1026,401],{}," can name a ",[47,1029,1030],{},"group of the table",", with the name of what it groups\nby: a table grouped by ",[24,1033,768],{}," has the group ",[24,1036,1037],{},"categoria",". A group by an expression\nhas no name until it is given one, in the group's ",[47,1040,1041],{},"Name in expressions",": with\n",[24,1044,1045],{},"\"Q\" & CEILING(MONTH([Month]) \u002F 3)"," named ",[24,1048,1049],{},"quarter",[24,1051,1052],{},"SUM([ricavo], \"quarter\")"," is the\nquarter's total. On ",[24,1055,76],{},", grouped by ",[24,1058,768],{}," and by that quarter, sorted by\n",[24,1061,1062],{},"[anno_mese]",", on the row of March 2025 of ",[43,1065,772],{},[181,1067,1068,1076],{},[184,1069,1070],{},[187,1071,1072,1074],{},[190,1073,195],{},[190,1075,334],{},[199,1077,1078,1094,1110,1124,1139,1154,1166,1178,1193],{},[187,1079,1080,1088],{},[204,1081,1082,1084,1085],{},[24,1083,725],{},", format ",[24,1086,1087],{},"#,##0",[204,1089,1090,1093],{},[24,1091,1092],{},"491,426",", the six months of the category",[187,1095,1096,1104],{},[204,1097,1098,1084,1101],{},[24,1099,1100],{},"[ricavo] \u002F SUM([ricavo], \"categoria\")",[24,1102,1103],{},"0.0%",[204,1105,1106,1109],{},[24,1107,1108],{},"18.4%",", the month's share of the category",[187,1111,1112,1119],{},[204,1113,1114,1084,1117],{},[24,1115,1116],{},"AVG([ricavo], \"categoria\")",[24,1118,1087],{},[204,1120,1121],{},[24,1122,1123],{},"81,904",[187,1125,1126,1133],{},[204,1127,1128,1084,1131],{},[24,1129,1130],{},"MAX([ricavo], \"categoria\")",[24,1132,1087],{},[204,1134,1135,1138],{},[24,1136,1137],{},"96,939",", April",[187,1140,1141,1148],{},[204,1142,1143,1084,1146],{},[24,1144,1145],{},"MIN([ricavo], \"quarter\")",[24,1147,1087],{},[204,1149,1150,1153],{},[24,1151,1152],{},"64,693",", February, the smallest of the quarter",[187,1155,1156,1161],{},[204,1157,1158],{},[24,1159,1160],{},"COUNT(\"categoria\")",[204,1162,1163],{},[24,1164,1165],{},"6",[187,1167,1168,1173],{},[204,1169,1170],{},[24,1171,1172],{},"COUNTDISTINCT([categoria], \"categoria\")",[204,1174,1175],{},[24,1176,1177],{},"1",[187,1179,1180,1188],{},[204,1181,1182,1084,1185],{},[24,1183,1184],{},"FIRST([Month], \"categoria\")",[24,1186,1187],{},"MMM yyyy",[204,1189,1190],{},[24,1191,1192],{},"Jan 2025",[187,1194,1195,1202],{},[204,1196,1197,1084,1200],{},[24,1198,1199],{},"LAST([Month], \"categoria\")",[24,1201,1187],{},[204,1203,1204],{},[24,1205,1206],{},"Jun 2025",[14,1208,1209,1210,1212,1213,1215,1216,1219,1220,1223,1224,1227,1228,1231,1232,77,1234,1237,1238,1241],{},"On a row, ",[24,1211,611],{}," with no name is the innermost group's total, not the row's: the\nrow's share is ",[24,1214,1100],{},", or\n",[24,1217,1218],{},"PERCENT(SUM([ricavo]), \"categoria\")"," (",[18,1221,404],{"href":1222},"#percent","). In a total,\n",[24,1225,1226],{},"SUM([ricavo]) \u002F SUM([ricavo], \"categoria\")"," is that total's share: in the table above,\n",[24,1229,1230],{},"45.1%"," for the first quarter of ",[43,1233,772],{},[24,1235,1236],{},"54.9%"," for the second, ",[24,1239,1240],{},"100.0%"," for the\ncategory.",[14,1243,1244],{},"A group has to hold the place the expression is in, or the check says so:",[69,1246,1247,1250,1258,1265,1270,1276],{},[72,1248,1249],{},"a row is inside all the table's groups;",[72,1251,647,1252,1254,1255,1257],{},[47,1253,327],{}," is repeated at every level with a total row: it can name the group of the\noutermost one and the groups around it. ",[24,1256,1052],{}," in a Total is refused\nwhile the category has a total row, since that row is outside the quarter;",[72,1259,1260,1261,1264],{},"the ",[47,1262,1263],{},"grand total"," is in no group: there a total that names one prints nothing, so a\nshare of the category can stand beside the sums in a table with a grand total. If the\ngrand total is the table's only total, the check refuses the name;",[72,1266,690,1267,1269],{},[47,1268,693],{}," sees that group and those around it;",[72,1271,1272,1273,1275],{},"a matrix's cell reads the whole group, on every column: ",[24,1274,1226],{},"\nis the cell's share of its row;",[72,1277,1278,1280],{},[47,1279,684],{}," comes before the groups: it cannot name any.",[14,1282,1283],{},"If a dataset of the report has the same name as the group, the check says that too: rename\none of them, or give the group a name of its own. Two groups with the same name are told\napart the same way.",[999,1285,373],{"id":1286},"sum",[14,1288,1289,1292],{},[24,1290,1291],{},"SUM(value, [dataset or group])",": the sum of a number over the rows. A text is refused when the\nreport is checked: «SUM adds numbers: a field of type text is here».",[181,1294,1295,1303],{},[184,1296,1297],{},[187,1298,1299,1301],{},[190,1300,195],{},[190,1302,334],{},[199,1304,1305,1316,1328,1341],{},[187,1306,1307,1311],{},[204,1308,1309],{},[24,1310,611],{},[204,1312,1313],{},[24,1314,1315],{},"2,921,909.2",[187,1317,1318,1323],{},[204,1319,1320],{},[24,1321,1322],{},"FORMAT(SUM([ricavo]), \"€ #,##0\")",[204,1324,1325],{},[24,1326,1327],{},"€ 2,921,909",[187,1329,1330,1336],{},[204,1331,1332,1335],{},[24,1333,1334],{},"FORMAT(SUM([ricavo], \"margins\"), \"#,##0\")"," in the page header",[204,1337,1338],{},[24,1339,1340],{},"2,921,909",[187,1342,1343,1348],{},[204,1344,1345],{},[24,1346,1347],{},"FORMAT(SUM(IF([categoria] = \"Salami\", [ricavo], 0)), \"#,##0\")",[204,1349,1350,1353,1354,1357],{},[24,1351,1352],{},"883,922",": a sum with a condition, which ",[18,1355,398],{"href":1356},"#sumif-countif"," says in fewer words",[999,1359,377],{"id":1360},"avg",[14,1362,1363,1366],{},[24,1364,1365],{},"AVG(value, [dataset or group])",": the average of a number; NULLs are left out of the count as well.",[181,1368,1369,1377],{},[184,1370,1371],{},[187,1372,1373,1375],{},[190,1374,195],{},[190,1376,334],{},[199,1378,1379,1391,1403],{},[187,1380,1381,1386],{},[204,1382,1383],{},[24,1384,1385],{},"AVG([margine_pct])",[204,1387,1388],{},[24,1389,1390],{},"26.62",[187,1392,1393,1398],{},[204,1394,1395],{},[24,1396,1397],{},"ROUND(AVG([margine_pct]), 1)",[204,1399,1400],{},[24,1401,1402],{},"26.6",[187,1404,1405,1417],{},[204,1406,1407,1410,1411,1413,1414],{},[24,1408,1409],{},"AVG([ordini])"," as the ",[47,1412,327],{}," of a column, format ",[24,1415,1416],{},"#,##0.0",[204,1418,1419,1422,1423],{},[24,1420,1421],{},"422.2"," in the total of ",[43,1424,772],{},[14,1426,1427,1428,77,1430,1219,1433,311],{},"The average of the percentages is not the margin percentage of the whole, which is\n",[24,1429,758],{},[24,1431,1432],{},"24.5%",[18,1434,1436],{"href":1435},"#margin-percentage","margin percentage",[999,1438,1440],{"id":1439},"min-max","MIN, MAX",[14,1442,1443,77,1446,1449],{},[24,1444,1445],{},"MIN(value, [dataset or group])",[24,1447,1448],{},"MAX(value, [dataset or group])",": the smallest and the largest value.\nThey compare numbers, texts or dates, one type per column.",[181,1451,1452,1460],{},[184,1453,1454],{},[187,1455,1456,1458],{},[190,1457,195],{},[190,1459,334],{},[199,1461,1462,1475,1488,1500,1512],{},[187,1463,1464,1469],{},[204,1465,1466],{},[24,1467,1468],{},"MIN([ricavo])",[204,1470,1471,1474],{},[24,1472,1473],{},"64.72"," (Insaccati da cuocere, June 2025)",[187,1476,1477,1482],{},[204,1478,1479],{},[24,1480,1481],{},"MAX([ricavo])",[204,1483,1484,1487],{},[24,1485,1486],{},"215,195.65"," (Prosciutti, April 2025)",[187,1489,1490,1495],{},[204,1491,1492],{},[24,1493,1494],{},"FORMAT(MIN([Month]), \"MMMM yyyy\")",[204,1496,1497],{},[24,1498,1499],{},"January 2025",[187,1501,1502,1507],{},[204,1503,1504],{},[24,1505,1506],{},"FORMAT(MAX([Month]), \"MMMM yyyy\")",[204,1508,1509],{},[24,1510,1511],{},"June 2025",[187,1513,1514,1519],{},[204,1515,1516],{},[24,1517,1518],{},"FORMAT(MAX([margine_pct]) \u002F 100, \"0.0%\")",[204,1520,1521],{},[24,1522,1523],{},"34.2%",[999,1525,386],{"id":1526},"count",[14,1528,1529,1532,1533,1536,1537,1539],{},[24,1530,1531],{},"COUNT([value], [dataset or group])",": with no argument, how many rows; with a value, how\nmany rows where it is not NULL. ",[24,1534,1535],{},"COUNT(\"margins\")"," counts the rows of a named dataset, and\n",[24,1538,1160],{}," those of a group.",[181,1541,1542,1550],{},[184,1543,1544],{},[187,1545,1546,1548],{},[190,1547,195],{},[190,1549,334],{},[199,1551,1552,1564,1579,1589],{},[187,1553,1554,1559],{},[204,1555,1556],{},[24,1557,1558],{},"COUNT()",[204,1560,1561],{},[24,1562,1563],{},"30",[187,1565,1566,1571],{},[204,1567,1568],{},[24,1569,1570],{},"COUNT(IF([categoria] = \"Salami\", [ricavo]))",[204,1572,1573,1575,1576,1578],{},[24,1574,1165],{},": ",[24,1577,439],{}," with no third argument is NULL on the other rows",[187,1580,1581,1585],{},[204,1582,1583,1335],{},[24,1584,1535],{},[204,1586,1587],{},[24,1588,1563],{},[187,1590,1591,1599],{},[204,1592,1593,1596,1597],{},[24,1594,1595],{},"[categoria] & \" · \" & COUNT() & \" months\""," as a group's ",[47,1598,693],{},[204,1600,1601],{},[24,1602,1603],{},"Insaccati cotti · 6 months",[999,1605,389],{"id":1606},"countdistinct",[14,1608,1609,1612],{},[24,1610,1611],{},"COUNTDISTINCT(value, [dataset or group])",": how many different values, NULL not counted.",[181,1614,1615,1623],{},[184,1616,1617],{},[187,1618,1619,1621],{},[190,1620,195],{},[190,1622,334],{},[199,1624,1625,1637],{},[187,1626,1627,1632],{},[204,1628,1629],{},[24,1630,1631],{},"COUNTDISTINCT([categoria])",[204,1633,1634],{},[24,1635,1636],{},"5",[187,1638,1639,1648],{},[204,1640,1641,1642,374,1645],{},"the same with ",[47,1643,1644],{},"Category",[24,1646,1647],{},"Prosciutti",[204,1649,1650],{},[24,1651,1177],{},[999,1653,1655],{"id":1654},"first-last","FIRST, LAST",[14,1657,1658,77,1661,1664,1665,1667,1668,32],{},[24,1659,1660],{},"FIRST(value, [dataset or group])",[24,1662,1663],{},"LAST(value, [dataset or group])",": the value of the first and of the\nlast row that has one, in the order of the rows: the dataset's ",[24,1666,168],{},", or in a table\nits ",[47,1669,742],{},[181,1671,1672,1680],{},[184,1673,1674],{},[187,1675,1676,1678],{},[190,1677,195],{},[190,1679,334],{},[199,1681,1682,1693,1705],{},[187,1683,1684,1689],{},[204,1685,1686],{},[24,1687,1688],{},"FIRST([categoria])",[204,1690,1691],{},[24,1692,772],{},[187,1694,1695,1700],{},[204,1696,1697],{},[24,1698,1699],{},"LAST([categoria])",[204,1701,1702],{},[24,1703,1704],{},"Salumi stagionati",[187,1706,1707,1721],{},[204,1708,1709,1712,1713,1084,1715,1718,1719],{},[24,1710,1711],{},"FIRST([Month])"," as a column's ",[47,1714,327],{},[24,1716,1717],{},"MMM",", rows sorted by ",[24,1720,1062],{},[204,1722,1723,1726],{},[24,1724,1725],{},"Jan"," in every group's total",[999,1728,1730],{"id":1729},"sumif-countif","SUMIF, COUNTIF",[14,1732,1733,1736,1737,1740,1741,273,1744,1747,1748,1750,1751,1753,1754,1757,1758,179],{},[24,1734,1735],{},"SUMIF(condition, value, [dataset or group])",": the sum of the value over the rows where\nthe condition is true. ",[24,1738,1739],{},"COUNTIF(condition, [dataset or group])",": how many rows those are.\nA condition that is NULL does not count, like a false one, and neither does a NULL value.\nThey are ",[24,1742,1743],{},"SUM(IF(condition, value))",[24,1745,1746],{},"COUNT(IF(condition, 1))",", in fewer words and with\nthe same numbers. With no row that counts, ",[24,1749,401],{}," gives 0 and ",[24,1752,398],{}," gives NULL, which\nprints nothing: ",[24,1755,1756],{},"COALESCE(SUMIF(…), 0)"," for a zero. On ",[24,1759,76],{},[181,1761,1762,1770],{},[184,1763,1764],{},[187,1765,1766,1768],{},[190,1767,195],{},[190,1769,334],{},[199,1771,1772,1785,1797,1809,1821,1833,1846,1858],{},[187,1773,1774,1779],{},[204,1775,1776],{},[24,1777,1778],{},"SUMIF([anno_mese] \u003C= 202503, [ricavo])",[204,1780,1781,1784],{},[24,1782,1783],{},"1,399,328.82",", the first quarter",[187,1786,1787,1792],{},[204,1788,1789],{},[24,1790,1791],{},"SUMIF([categoria] = \"Salami\", [ricavo])",[204,1793,1794],{},[24,1795,1796],{},"883,922.45",[187,1798,1799,1804],{},[204,1800,1801],{},[24,1802,1803],{},"COUNTIF([ricavo] > 100000)",[204,1805,1806],{},[24,1807,1808],{},"16",[187,1810,1811,1816],{},[204,1812,1813],{},[24,1814,1815],{},"COUNTIF([MarginPct] \u003C 0.22)",[204,1817,1818,1820],{},[24,1819,1165],{},", the months of Prosciutti",[187,1822,1823,1828],{},[204,1824,1825],{},[24,1826,1827],{},"COUNTIF([ricavo] > 1000000)",[204,1829,1830],{},[24,1831,1832],{},"0",[187,1834,1835,1840],{},[204,1836,1837],{},[24,1838,1839],{},"SUMIF(YEAR([Month]) = 2024, [ricavo], \"history\")",[204,1841,1842,1845],{},[24,1843,1844],{},"5,702,681.05",", all of 2024 from another dataset",[187,1847,1848,1853],{},[204,1849,1850],{},[24,1851,1852],{},"COUNTIF(YEAR([Month]) = 2024, \"history\")",[204,1854,1855],{},[24,1856,1857],{},"59",[187,1859,1860,1870],{},[204,1861,1862,1865,1866,1084,1868],{},[24,1863,1864],{},"SUMIF([anno_mese] \u003C= 202503, [ricavo]) \u002F SUM([ricavo])"," as a ",[47,1867,327],{},[24,1869,1103],{},[204,1871,1872,1422,1874,77,1876,1879,1880],{},[24,1873,1230],{},[43,1875,772],{},[24,1877,1878],{},"51.3%"," of ",[43,1881,1882],{},"Salami",[14,1884,1885,1886,1889,1890,1893],{},"The condition is written on each row, in the dataset the aggregate reads. ",[24,1887,1888],{},"SUMIF([ricavo], [ricavo])","\nis refused, «SUMIF: the first argument is a condition», and so is ",[24,1891,1892],{},"SUMIF([ricavo] > 0, [categoria])",",\n«SUMIF adds numbers».",[999,1895,404],{"id":1896},"percent",[14,1898,1899,1902,1903,1905,1906,1909,1910,1913],{},[24,1900,1901],{},"PERCENT(aggregate, [group])",": the aggregate as a share of the same aggregate one level up.\nIn a row of a table, the row's share of its group (of the whole table when it has no\ngroups); in a group's total row, the group's share of the whole table; in the grand total,\n100%. With a group named, the share of that group, whatever is between: ",[24,1904,1218],{},". It takes an aggregate: ",[24,1907,1908],{},"PERCENT([ricavo])"," is refused, «PERCENT takes an\naggregate, as PERCENT(SUM(",[92,1911,1912],{},"amount","))». NULL when the level above adds up to zero.",[14,1915,1916,1917,1919,1920,1922,1923,1925,1926,1712,1929,273,1931,1084,1933,179],{},"On ",[24,1918,76],{},", a table grouped by ",[24,1921,768],{},", sorted by ",[24,1924,1062],{},", with\n",[24,1927,1928],{},"PERCENT(SUM([ricavo]))",[47,1930,324],{},[47,1932,327],{},[24,1934,1103],{},[181,1936,1937,1951],{},[184,1938,1939],{},[187,1940,1941,1944,1947],{},[190,1942,1943],{},"Row",[190,1945,1946],{},"Revenue",[190,1948,1949],{},[24,1950,1928],{},[199,1952,1953,1967,1979,1992,2005,2017],{},[187,1954,1955,1958,1961],{},[204,1956,1957],{},"Insaccati cotti, January 2025",[204,1959,1960],{},"66,648",[204,1962,1963,1966],{},[24,1964,1965],{},"13.6%"," of the category's six months",[187,1968,1969,1972,1975],{},[204,1970,1971],{},"Insaccati cotti, March 2025",[204,1973,1974],{},"90,211",[204,1976,1977],{},[24,1978,1108],{},[187,1980,1981,1984,1986],{},[204,1982,1983],{},"Total Insaccati cotti",[204,1985,1092],{},[204,1987,1988,1991],{},[24,1989,1990],{},"16.8%"," of the whole",[187,1993,1994,1997,2000],{},[204,1995,1996],{},"Total Prosciutti",[204,1998,1999],{},"863,136",[204,2001,2002],{},[24,2003,2004],{},"29.5%",[187,2006,2007,2010,2012],{},[204,2008,2009],{},"Total Salami",[204,2011,1352],{},[204,2013,2014],{},[24,2015,2016],{},"30.3%",[187,2018,2019,2022,2024],{},[204,2020,2021],{},"Grand total",[204,2023,1340],{},[204,2025,2026],{},[24,2027,1240],{},[14,2029,2030,2031,2033,2034,2036],{},"With two levels, by ",[24,2032,768],{}," and by the quarter named ",[24,2035,1049],{},", the same column\nwithout a name is the share of the level above, and with one the share of the category:",[181,2038,2039,2053],{},[184,2040,2041],{},[187,2042,2043,2045,2049],{},[190,2044,1943],{},[190,2046,2047],{},[24,2048,1928],{},[190,2050,2051],{},[24,2052,1218],{},[199,2054,2055,2070,2083,2095],{},[187,2056,2057,2059,2065],{},[204,2058,1957],{},[204,2060,2061,2064],{},[24,2062,2063],{},"30.1%"," of the quarter",[204,2066,2067,2069],{},[24,2068,1965],{}," of the category",[187,2071,2072,2075,2079],{},[204,2073,2074],{},"Total Q1",[204,2076,2077,2069],{},[24,2078,1230],{},[204,2080,2081],{},[24,2082,1230],{},[187,2084,2085,2087,2091],{},[204,2086,1983],{},[204,2088,2089,1991],{},[24,2090,1990],{},[204,2092,2093],{},[24,2094,1240],{},[187,2096,2097,2099,2103],{},[204,2098,2021],{},[204,2100,2101],{},[24,2102,1240],{},[204,2104,2105],{},"nothing: it is in no group",[999,2107,407],{"id":2108},"running",[14,2110,2111,2114,2115,2118,2119,2121],{},[24,2112,2113],{},"RUNNING(aggregate)",": the aggregate from the first row of the group to the current one,\nin the order the rows are shown: a running total that starts again with every group, or\nruns over the whole table when it has none. It takes an aggregate of the group,\n",[24,2116,2117],{},"RUNNING(SUM([ricavo]))","; one of a named dataset is refused, and so is ",[24,2120,407],{}," in a\ncalculated field, which has no rows shown to run over: write it in a column. When a reader\nsorts the table by another column in the viewer, the running total follows the new order.",[181,2123,2124,2137],{},[184,2125,2126],{},[187,2127,2128,2131,2133],{},[190,2129,2130],{},"Month (Insaccati cotti)",[190,2132,1946],{},[190,2134,2135],{},[24,2136,2117],{},[199,2138,2139,2149,2161,2173],{},[187,2140,2141,2143,2145],{},[204,2142,1499],{},[204,2144,1960],{},[204,2146,2147],{},[24,2148,1960],{},[187,2150,2151,2154,2156],{},[204,2152,2153],{},"February 2025",[204,2155,1152],{},[204,2157,2158],{},[24,2159,2160],{},"131,341",[187,2162,2163,2166,2168],{},[204,2164,2165],{},"March 2025",[204,2167,1974],{},[204,2169,2170],{},[24,2171,2172],{},"221,552",[187,2174,2175,2177,2180],{},[204,2176,1511],{},[204,2178,2179],{},"86,809",[204,2181,2182,2184],{},[24,2183,1092],{},", the group's total",[999,2186,410],{"id":2187},"rownumber",[14,2189,2190,2193,2194,2197,2198,1022,2200,739,2202,2204,2205,2207],{},[24,2191,2192],{},"ROWNUMBER()",": the number of the row within its group, from 1. In the first group of the\ntable above it goes from 1 to 6, and starts from 1 again in ",[43,2195,2196],{},"Insaccati da cuocere",". The\npage header and footer have no rows: there it is refused. So it is in ",[47,2199,684],{},[47,2201,943],{},[47,2203,742],{}," and a matrix's ",[47,2206,746],{},": there\nthe rows are being chosen and put in their order, and none has its number yet.",[56,2209,418],{"id":2210},"other-rows",[999,2212,423],{"id":2213},"previous",[14,2215,2216,2219,2220,1056,2222,1922,2224,179],{},[24,2217,2218],{},"PREVIOUS(value)",": the value on the row before, in what the table shows. It starts again\nwith every group: the first row of a group gives NULL, so January of a category is not\ncompared with December of the one before, and a NULL in a calculation prints nothing,\nwith no error. On ",[24,2221,76],{},[24,2223,768],{},[24,2225,1062],{},[181,2227,2228,2248],{},[184,2229,2230],{},[187,2231,2232,2234,2236,2240],{},[190,2233,2130],{},[190,2235,1946],{},[190,2237,2238],{},[24,2239,827],{},[190,2241,2242,1084,2245],{},[24,2243,2244],{},"[ricavo] \u002F PREVIOUS([ricavo]) - 1",[24,2246,2247],{},"+0.0%;-0.0%;0.0%",[199,2249,2250,2261,2276,2291,2307,2324],{},[187,2251,2252,2254,2256,2259],{},[204,2253,1499],{},[204,2255,1960],{},[204,2257,2258],{},"nothing",[204,2260,2258],{},[187,2262,2263,2265,2267,2271],{},[204,2264,2153],{},[204,2266,1152],{},[204,2268,2269],{},[24,2270,1960],{},[204,2272,2273],{},[24,2274,2275],{},"-2.9%",[187,2277,2278,2280,2282,2286],{},[204,2279,2165],{},[204,2281,1974],{},[204,2283,2284],{},[24,2285,1152],{},[204,2287,2288],{},[24,2289,2290],{},"+39.4%",[187,2292,2293,2296,2298,2302],{},[204,2294,2295],{},"April 2025",[204,2297,1137],{},[204,2299,2300],{},[24,2301,1974],{},[204,2303,2304],{},[24,2305,2306],{},"+7.5%",[187,2308,2309,2312,2315,2319],{},[204,2310,2311],{},"May 2025",[204,2313,2314],{},"86,127",[204,2316,2317],{},[24,2318,1137],{},[204,2320,2321],{},[24,2322,2323],{},"-11.2%",[187,2325,2326,2328,2330,2334],{},[204,2327,1511],{},[204,2329,2179],{},[204,2331,2332],{},[24,2333,2314],{},[204,2335,2336],{},[24,2337,2338],{},"+0.8%",[14,2340,2341,2342,2344],{},"In a column's ",[47,2343,327],{}," it takes an aggregate, and is the total of the group before at the\nsame level, under the same parent: with the groups by month inside a category, the first\nmonth of each category has none. In the grand total it gives NULL.",[181,2346,2347,2368],{},[184,2348,2349],{},[187,2350,2351,2354,2358,2363],{},[190,2352,2353],{},"Total row",[190,2355,2356],{},[24,2357,611],{},[190,2359,2360],{},[24,2361,2362],{},"PREVIOUS(SUM([ricavo]))",[190,2364,2365],{},[24,2366,2367],{},"SUM([ricavo]) \u002F PREVIOUS(SUM([ricavo])) - 1",[199,2369,2370,2380,2396,2411,2426,2442],{},[187,2371,2372,2374,2376,2378],{},[204,2373,772],{},[204,2375,1092],{},[204,2377,2258],{},[204,2379,2258],{},[187,2381,2382,2384,2387,2391],{},[204,2383,2196],{},[204,2385,2386],{},"9,218",[204,2388,2389],{},[24,2390,1092],{},[204,2392,2393],{},[24,2394,2395],{},"-98.1%",[187,2397,2398,2400,2402,2406],{},[204,2399,1647],{},[204,2401,1999],{},[204,2403,2404],{},[24,2405,2386],{},[204,2407,2408],{},[24,2409,2410],{},"+9263.9%",[187,2412,2413,2415,2417,2421],{},[204,2414,1882],{},[204,2416,1352],{},[204,2418,2419],{},[24,2420,1999],{},[204,2422,2423],{},[24,2424,2425],{},"+2.4%",[187,2427,2428,2430,2433,2437],{},[204,2429,1704],{},[204,2431,2432],{},"674,207",[204,2434,2435],{},[24,2436,1352],{},[204,2438,2439],{},[24,2440,2441],{},"-23.7%",[187,2443,2444,2446,2448,2450],{},[204,2445,2021],{},[204,2447,1340],{},[204,2449,2258],{},[204,2451,2258],{},[14,2453,2454],{},"What «before» means, in every case:",[69,2456,2457,2466,2475,2484,2487,2497],{},[72,2458,2459,2461,2462,32],{},[47,2460,684],{}," applies first: a row the filter leaves out is not there, and the first row\nkept has nothing before it. For a January that compares with December all the same, see\n",[18,2463,2465],{"href":2464},"#growth-on-the-month-before","the month before the first",[72,2467,2468,2470,2471,2474],{},[47,2469,742],{}," and the group's ",[47,2472,2473],{},"Order",": the row above is the row above, and a\ngroup sorted from Z to A has the later group before it.",[72,2476,2477,2478,2480,2481,2483],{},"A reader who sorts the table by a column in the viewer changes the order, and ",[24,2479,423],{},"\nfollows it. A column that holds ",[24,2482,423],{}," or names a group cannot itself be used to sort:\nits value depends on the order, so its header offers no click.",[72,2485,2486],{},"A closed group keeps its total and hides its rows: closing it changes no number. The\ntotal of the group after it still compares with it, and a row is only compared inside its\nown group.",[72,2488,2489,2490,2493,2494,2496],{},"A table without ",[47,2491,2492],{},"Detail rows"," has its totals, and ",[24,2495,423],{}," works on them as above.",[72,2498,2499],{},"The PDF, the screen, Excel and the email are one calculation: they show the same numbers.\nIn Excel the cell holds the value, not a formula.",[14,2501,2502,2505,2506,2509,2510,77,2512,2515,2516,2518,2519,2521,2522,2524,2525,2527],{},[24,2503,2504],{},"PREVIOUS(PREVIOUS([ricavo]))"," goes two rows back, and ",[24,2507,2508],{},"PREVIOUS(RUNNING(SUM([ricavo])))","\nreads the running total on the row above. In a ",[47,2511,815],{},[24,2513,2514],{},"[ricavo] \u003C PREVIOUS([ricavo])","\ncolours the months that fall. Along a ",[47,2517,656],{},"'s axis, ",[24,2520,2362],{}," is the\nvalue of the category before it in the data's order, in each series; the options ",[47,2523,915],{},"\nand ",[47,2526,918],{}," choose the categories by their values, so with them it is refused.",[14,2529,2530,2531,77,2533,739,2535,2537,2538,2540,2541,2544,2545,2547],{},"It is refused where there is no row before: «PREVIOUS reads the row above among those a\ntable shows» in ",[47,2532,684],{},[47,2534,943],{},[47,2536,742],{},", a calculated field,\na text, a KPI, and in a matrix, whose rows are groups across columns. An aggregate takes no\n",[24,2539,423],{}," inside it, ",[24,2542,2543],{},"SUM(PREVIOUS([ricavo]))","; on a row an aggregate inside it is refused\ntoo, since ",[24,2546,2362],{}," would be the same number on every row of the group.",[999,2549,426],{"id":2550},"lookup",[14,2552,2553,2556,2557,2559],{},[24,2554,2555],{},"LOOKUP(key, key field, result, [dataset])",": the result on the rows whose key field equals\nthe key. Without a dataset it reads the item's own. The key is an expression where\n",[24,2558,426],{}," is written; the key field and the result are read on the rows of the dataset:",[69,2561,2562,2571,2581],{},[72,2563,647,2564,2567,2568,2570],{},[47,2565,2566],{},"field"," in the result is the one of the first row with that key, in the dataset's\norder, that is its SQL's ",[24,2569,168],{},". Write one when the keys can repeat;",[72,2572,2573,2574,2577,2578,2580],{},"an ",[47,2575,2576],{},"aggregate"," in the result is worked out over all the rows with that key, or an\nexpression of them: ",[24,2579,758],{},";",[72,2582,2583],{},"no row with the key, or a NULL key, gives NULL. A row whose key field is NULL equals\nnothing.",[14,2585,1916,2586,2588,2589,179],{},[24,2587,76],{},", in a ",[47,2590,653],{},[181,2592,2593,2601],{},[184,2594,2595],{},[187,2596,2597,2599],{},[190,2598,195],{},[190,2600,334],{},[199,2602,2603,2616,2629,2641,2654,2666],{},[187,2604,2605,2610],{},[204,2606,2607],{},[24,2608,2609],{},"LOOKUP(MAX([anno_mese]), [anno_mese], SUM([ricavo]))",[204,2611,2612,2615],{},[24,2613,2614],{},"416,174.4",", June 2025, the latest month",[187,2617,2618,2623],{},[204,2619,2620],{},[24,2621,2622],{},"LOOKUP(MAX([anno_mese]) - 100, [anno_mese], SUM([ricavo]), \"history\")",[204,2624,2625,2628],{},[24,2626,2627],{},"382,666.83",", June 2024",[187,2630,2631,2636],{},[204,2632,2633],{},[24,2634,2635],{},"LOOKUP(202503, [anno_mese], COUNT())",[204,2637,2638,2640],{},[24,2639,1636],{},": five rows, one per category",[187,2642,2643,2648],{},[204,2644,2645],{},[24,2646,2647],{},"LOOKUP(\"Salami\", [categoria], [ricavo])",[204,2649,2650,2653],{},[24,2651,2652],{},"150,824.34",", the first row of Salami, January",[187,2655,2656,2661],{},[204,2657,2658],{},[24,2659,2660],{},"LOOKUP(\"Salami\", [categoria], SUM([margine]) \u002F SUM([ricavo]))",[204,2662,2663],{},[24,2664,2665],{},"0.25",[187,2667,2668,2673],{},[204,2669,2670],{},[24,2671,2672],{},"ISNULL(LOOKUP(\"Speck\", [categoria], [ricavo]))",[204,2674,2675,2677],{},[24,2676,342],{},": no such category",[14,2679,2680,2681,2684,2685,2687,2688,2691],{},"It reads the ",[47,2682,2683],{},"whole dataset",": the ",[47,2686,684],{}," of the table it is written in do not\napply, so a table of 2025 finds its 2024, as ",[24,2689,2690],{},"SUM([ricavo], \"history\")"," would.",[14,2693,2694,2695,2697,2698,273,2700,2703,2704,2707],{},"Two values are equal when ",[24,2696,137],{}," says they are. A number equals a number of the same value,\n",[24,2699,1177],{},[24,2701,2702],{},"1.0","; a date equals a date-time at its midnight; texts are compared as written,\ncapitals and accents included. A text never equals a number: when the types of both are\nknown the check says so, «LOOKUP compares a number with a text», and the answer is to make\nthem one type, ",[24,2705,2706],{},"LOOKUP(TEXT([code]), [sku], [price], \"prices\")","; when they are not yet\nknown, a key of another type finds nothing.",[14,2709,2710,2712,2713,2715,2716,2718,2719,2722,2723,2726],{},[24,2711,426],{}," can go in a calculated field, in ",[47,2714,684],{},", in ",[47,2717,943],{},", in the ",[47,2720,2721],{},"Order of\nthe rows"," and inside an aggregate, ",[24,2724,2725],{},"SUM([quantita] * LOOKUP([codice], [codice], [prezzo_listino], \"prices\"))",":\nthe results are worked out once per key and joined to the rows, never row by row. What it\nreads is a dataset like any other: it counts towards what the report reads, it is read with\nthe rights of the person looking at the report, and over the rows a report reads it stops\nthe report and names the dataset.",[56,2728,434],{"id":2729},"logic",[14,2731,2732,2733,374,2735,374,2738,374,2741,374,2744,374,2747,2750,2751,2754,2755,77,2757,273,2759,2761,2762,77,2764,2767,2768,2770],{},"A comparison (",[24,2734,137],{},[24,2736,2737],{},"\u003C>",[24,2739,2740],{},"\u003C",[24,2742,2743],{},">",[24,2745,2746],{},"\u003C=",[24,2748,2749],{},">=",") gives true, false, or NULL when either side is\nNULL. Values of different types are not compared: ",[24,2752,2753],{},"[categoria] = 2025"," is refused,\n«Compares a text with a number: they are of different types». ",[24,2756,452],{},[24,2758,455],{},[24,2760,458],{}," join\nconditions, one comparison at a time. Wherever a condition decides (",[24,2763,439],{},[47,2765,2766],{},"Rows\nwhere",", a rule, ",[47,2769,890],{},"), NULL counts as false.",[181,2772,2773,2781],{},[184,2774,2775],{},[187,2776,2777,2779],{},[190,2778,195],{},[190,2780,334],{},[199,2782,2783,2794,2806],{},[187,2784,2785,2790],{},[204,2786,2787],{},[24,2788,2789],{},"3 > 1 AND NOT (2 > 5)",[204,2791,2792],{},[24,2793,342],{},[187,2795,2796,2801],{},[204,2797,2798],{},[24,2799,2800],{},"IF(NULL > 1, \"true\", \"false or NULL\")",[204,2802,2803],{},[24,2804,2805],{},"false or NULL",[187,2807,2808,2813],{},[204,2809,2810],{},[24,2811,2812],{},"[ricavo] > 1 AND [ricavo] \u003C 9",[204,2814,2815,2816,2819],{},"a range, two comparisons joined; ",[24,2817,2818],{},"[ricavo] > 1 \u003C 9"," is refused",[999,2821,439],{"id":2822},"if",[14,2824,2825,2828,2829,2832],{},[24,2826,2827],{},"IF(condition, value if true, [value if false])",": one value or the other; without the\nthird argument, NULL when the condition is not true. The first argument must be a\ncondition: ",[24,2830,2831],{},"IF([ricavo], 1, 0)"," is refused.",[181,2834,2835,2843],{},[184,2836,2837],{},[187,2838,2839,2841],{},[190,2840,195],{},[190,2842,334],{},[199,2844,2845,2858,2876,2886],{},[187,2846,2847,2852],{},[204,2848,2849],{},[24,2850,2851],{},"IF(SUM([margine]) \u002F SUM([ricavo]) \u003C 0.25, \"Below target\", \"On target\")",[204,2853,2854,2857],{},[24,2855,2856],{},"Below target"," (24.5%)",[187,2859,2860,2866],{},[204,2861,2862,2865],{},[24,2863,2864],{},"IF([MarginPct] \u003C 0.22, \"Below\", \"OK\")"," in a column",[204,2867,2868,2871,2872,2875],{},[24,2869,2870],{},"Below"," in the six months of Prosciutti (20.1% to 21.9%), ",[24,2873,2874],{},"OK"," in the others",[187,2877,2878,2883],{},[204,2879,2880],{},[24,2881,2882],{},"IF(1 > 2, \"yes\")",[204,2884,2885],{},"nothing (NULL)",[187,2887,2888,2893],{},[204,2889,2890,2865],{},[24,2891,2892],{},"IF(ISNULL(PREVIOUS([ricavo])), \"first month\", FORMAT([ricavo] \u002F PREVIOUS([ricavo]) - 1, \"+0.0%;-0.0%\"))",[204,2894,2895,2898,2899,2901],{},[24,2896,2897],{},"first month"," in January, ",[24,2900,2275],{}," in February for Insaccati cotti",[999,2903,442],{"id":2904},"ifs",[14,2906,2907,2910],{},[24,2908,2909],{},"IFS(condition1, value1, condition2, value2, …, [else])",": the value of the first true\ncondition. With an odd number of arguments the last is the value when none is true;\notherwise that is NULL. Thresholds read from the highest down:",[181,2912,2913,2921],{},[184,2914,2915],{},[187,2916,2917,2919],{},[190,2918,195],{},[190,2920,334],{},[199,2922,2923,2936],{},[187,2924,2925,2930],{},[204,2926,2927],{},[24,2928,2929],{},"IFS(AVG([margine_pct]) >= 30, \"High\", AVG([margine_pct]) >= 22, \"Medium\", \"Low\")",[204,2931,2932,2935],{},[24,2933,2934],{},"Medium"," (26.62)",[187,2937,2938,2943],{},[204,2939,2940,2865],{},[24,2941,2942],{},"IFS([margine_pct] >= 30, \"High\", [margine_pct] >= 22, \"Medium\", \"Low\")",[204,2944,2945,2948,2949,2951,2952,2955],{},[24,2946,2947],{},"High"," for Insaccati cotti, ",[24,2950,2934],{}," for Salami, ",[24,2953,2954],{},"Low"," for Prosciutti",[999,2957,445],{"id":2958},"isnull",[14,2960,2961,2964],{},[24,2962,2963],{},"ISNULL(value)",": true when the value is missing.",[181,2966,2967,2975],{},[184,2968,2969],{},[187,2970,2971,2973],{},[190,2972,195],{},[190,2974,334],{},[199,2976,2977,2994,3006],{},[187,2978,2979,2984],{},[204,2980,2981],{},[24,2982,2983],{},"ISNULL(PARAM(\"category\"))",[204,2985,2986,2988,2989,2991,2992],{},[24,2987,342],{}," with no category chosen, ",[24,2990,345],{}," with ",[24,2993,1647],{},[187,2995,2996,3001],{},[204,2997,2998,2865],{},[24,2999,3000],{},"ISNULL(PREVIOUS([ricavo]))",[204,3002,3003,3005],{},[24,3004,342],{}," in January",[187,3007,3008,3013],{},[204,3009,3010],{},[24,3011,3012],{},"ISNULL(10 \u002F 0)",[204,3014,3015,3017],{},[24,3016,342],{},": a division by zero is NULL, never an error",[999,3019,448],{"id":3020},"coalesce",[14,3022,3023,3026],{},[24,3024,3025],{},"COALESCE(value1, value2, …)",": the first value that is not missing; NULL when none is.",[181,3028,3029,3037],{},[184,3030,3031],{},[187,3032,3033,3035],{},[190,3034,195],{},[190,3036,334],{},[199,3038,3039,3055],{},[187,3040,3041,3046],{},[204,3042,3043],{},[24,3044,3045],{},"COALESCE(PARAM(\"category\"), \"All categories\")",[204,3047,3048,3051,3052,3054],{},[24,3049,3050],{},"All categories",", or ",[24,3053,1647],{}," when it is chosen",[187,3056,3057,3062],{},[204,3058,3059,2865],{},[24,3060,3061],{},"COALESCE(PREVIOUS([ricavo]), 0)",[204,3063,3064,3005],{},[24,3065,1832],{},[56,3067,466],{"id":3068},"maths",[14,3070,3071,374,3074,374,3077,374,3080,3083,3084,3087,3088,3090,3091,3094,3095,3098,3099,3102,3103,3106,3107,32],{},[24,3072,3073],{},"+",[24,3075,3076],{},"-",[24,3078,3079],{},"*",[24,3081,3082],{},"\u002F"," work on numbers. NULL on either side gives NULL (",[24,3085,3086],{},"ISNULL(NULL + 1)"," is\n",[24,3089,342],{},"), and a division by zero gives NULL. A text is refused: ",[24,3092,3093],{},"\"Total: \" + [ricavo]","\nsays ««+» works on numbers, and this is a text: join texts with &». There is no ",[24,3096,3097],{},"^"," and\nno ",[24,3100,3101],{},"%",": write ",[24,3104,3105],{},"POWER(x, y)",", and a format such as ",[24,3108,3109],{},"0%",[999,3111,471],{"id":3112},"round",[14,3114,3115,3118],{},[24,3116,3117],{},"ROUND(number, [decimals])",": rounded half away from zero, to 0 decimals by default;\nnegative decimals round to tens, hundreds…",[181,3120,3121,3129],{},[184,3122,3123],{},[187,3124,3125,3127],{},[190,3126,195],{},[190,3128,334],{},[199,3130,3131,3143,3155,3167,3179],{},[187,3132,3133,3138],{},[204,3134,3135],{},[24,3136,3137],{},"ROUND(2.5)",[204,3139,3140],{},[24,3141,3142],{},"3",[187,3144,3145,3150],{},[204,3146,3147],{},[24,3148,3149],{},"ROUND(-2.5)",[204,3151,3152],{},[24,3153,3154],{},"-3",[187,3156,3157,3162],{},[204,3158,3159],{},[24,3160,3161],{},"ROUND(1234.5678, 2)",[204,3163,3164],{},[24,3165,3166],{},"1,234.57",[187,3168,3169,3174],{},[204,3170,3171],{},[24,3172,3173],{},"ROUND(1234.5678, -2)",[204,3175,3176],{},[24,3177,3178],{},"1200",[187,3180,3181,3186],{},[204,3182,3183],{},[24,3184,3185],{},"ROUND(SUM([margine]) \u002F SUM([ricavo]) * 100, 1)",[204,3187,3188],{},[24,3189,3190],{},"24.5",[14,3192,3193,3194,3196,3197,3199,3200,32],{},"Round to compute; to print, a format is enough: ",[24,3195,1103],{}," writes ",[24,3198,1432],{}," from ",[24,3201,3202],{},"0.2453",[999,3204,3206],{"id":3205},"abs-floor-ceiling","ABS, FLOOR, CEILING",[14,3208,3209,3212,3213,3216,3217,3220],{},[24,3210,3211],{},"ABS(number)",": the number without its sign. ",[24,3214,3215],{},"FLOOR(number)",": the whole number at or\nbelow it. ",[24,3218,3219],{},"CEILING(number)",": the whole number at or above it.",[181,3222,3223,3231],{},[184,3224,3225],{},[187,3226,3227,3229],{},[190,3228,195],{},[190,3230,334],{},[199,3232,3233,3245,3258,3269,3281],{},[187,3234,3235,3240],{},[204,3236,3237],{},[24,3238,3239],{},"ABS(-1500)",[204,3241,3242],{},[24,3243,3244],{},"1500",[187,3246,3247,3252],{},[204,3248,3249],{},[24,3250,3251],{},"FLOOR(202503 \u002F 100)",[204,3253,3254,3257],{},[24,3255,3256],{},"2025",": the year of a month code",[187,3259,3260,3265],{},[204,3261,3262],{},[24,3263,3264],{},"FLOOR(-2.5)",[204,3266,3267],{},[24,3268,3154],{},[187,3270,3271,3276],{},[204,3272,3273],{},[24,3274,3275],{},"CEILING(5 \u002F 3)",[204,3277,3278],{},[24,3279,3280],{},"2",[187,3282,3283,3288],{},[204,3284,3285],{},[24,3286,3287],{},"\"Q\" & CEILING(MONTH([Month]) \u002F 3) & \" \" & YEAR([Month])",[204,3289,3290],{},[24,3291,3292],{},"Q1 2025",[999,3294,483],{"id":3295},"power",[14,3297,3298,3301],{},[24,3299,3300],{},"POWER(number, exponent)",": the number raised to the exponent; NULL when the result is not\na real number, or past what a number holds (about 10 to the 308th).",[181,3303,3304,3312],{},[184,3305,3306],{},[187,3307,3308,3310],{},[190,3309,195],{},[190,3311,334],{},[199,3313,3314,3327,3338],{},[187,3315,3316,3321],{},[204,3317,3318],{},[24,3319,3320],{},"POWER(1.05, 3)",[204,3322,3323,3326],{},[24,3324,3325],{},"1.16"," (1.157625, printed with two decimals)",[187,3328,3329,3334],{},[204,3330,3331],{},[24,3332,3333],{},"POWER(9, 0.5)",[204,3335,3336],{},[24,3337,3142],{},[187,3339,3340,3345],{},[204,3341,3342],{},[24,3343,3344],{},"ISNULL(POWER(-8, 0.5))",[204,3346,3347],{},[24,3348,342],{},[56,3350,317],{"id":3351},"text",[14,3353,3354,3356],{},[24,3355,26],{}," joins values into a text, each written as the report writes it, NULL as nothing:",[181,3358,3359,3367],{},[184,3360,3361],{},[187,3362,3363,3365],{},[190,3364,195],{},[190,3366,334],{},[199,3368,3369,3380,3392],{},[187,3370,3371,3376],{},[204,3372,3373],{},[24,3374,3375],{},"\"Total \" & \"Salami\"",[204,3377,3378],{},[24,3379,2009],{},[187,3381,3382,3387],{},[204,3383,3384],{},[24,3385,3386],{},"\"Revenue: \" & 1234567.891",[204,3388,3389],{},[24,3390,3391],{},"Revenue: 1,234,567.89",[187,3393,3394,3399],{},[204,3395,3396],{},[24,3397,3398],{},"\"[\" & NULL & \"]\"",[204,3400,3401],{},[24,3402,3403],{},"[]",[14,3405,3406,3407,3410,3411,3414,3415,608,3418,3420],{},"The text functions take a text: a number goes through ",[24,3408,3409],{},"TEXT()"," first (",[24,3412,3413],{},"LEFT(202503, 4)","\nis refused, ",[24,3416,3417],{},"LEFT(TEXT(202503), 4)",[24,3419,3256],{},"). A NULL argument gives NULL. Texts are\ncompared as written: capitals count.",[181,3422,3423,3437],{},[184,3424,3425],{},[187,3426,3427,3430,3432,3435],{},[190,3428,3429],{},"Function",[190,3431,334],{},[190,3433,3434],{},"Example",[190,3436,334],{},[199,3438,3439,3459,3479,3499,3519,3539,3559,3585,3613,3632,3647],{},[187,3440,3441,3446,3449,3454],{},[204,3442,3443],{},[24,3444,3445],{},"UPPER(text)",[204,3447,3448],{},"the text in capitals",[204,3450,3451],{},[24,3452,3453],{},"UPPER(\"Prosciutti\")",[204,3455,3456],{},[24,3457,3458],{},"PROSCIUTTI",[187,3460,3461,3466,3469,3474],{},[204,3462,3463],{},[24,3464,3465],{},"LOWER(text)",[204,3467,3468],{},"the text in lower case",[204,3470,3471],{},[24,3472,3473],{},"LOWER(\"Salumi STAGIONATI\")",[204,3475,3476],{},[24,3477,3478],{},"salumi stagionati",[187,3480,3481,3486,3489,3494],{},[204,3482,3483],{},[24,3484,3485],{},"TRIM(text)",[204,3487,3488],{},"the text without spaces at its ends",[204,3490,3491],{},[24,3492,3493],{},"\"[\" & TRIM(\"  Salami  \") & \"]\"",[204,3495,3496],{},[24,3497,3498],{},"[Salami]",[187,3500,3501,3506,3509,3514],{},[204,3502,3503],{},[24,3504,3505],{},"LEN(text)",[204,3507,3508],{},"how many characters",[204,3510,3511],{},[24,3512,3513],{},"LEN(\"Prosciutti\")",[204,3515,3516],{},[24,3517,3518],{},"10",[187,3520,3521,3526,3529,3534],{},[204,3522,3523],{},[24,3524,3525],{},"LEFT(text, count)",[204,3527,3528],{},"the first characters",[204,3530,3531],{},[24,3532,3533],{},"LEFT(\"Insaccati cotti\", 9)",[204,3535,3536],{},[24,3537,3538],{},"Insaccati",[187,3540,3541,3546,3549,3554],{},[204,3542,3543],{},[24,3544,3545],{},"RIGHT(text, count)",[204,3547,3548],{},"the last characters",[204,3550,3551],{},[24,3552,3553],{},"RIGHT(TEXT(202503), 2)",[204,3555,3556],{},[24,3557,3558],{},"03",[187,3560,3561,3566,3575,3580],{},[204,3562,3563],{},[24,3564,3565],{},"MID(text, start, count)",[204,3567,3568,3570,3571,3574],{},[24,3569,1526],{}," characters from ",[24,3572,3573],{},"start",", 1 the first",[204,3576,3577],{},[24,3578,3579],{},"MID(\"ORD-12902\", 5, 5)",[204,3581,3582],{},[24,3583,3584],{},"12902",[187,3586,3587,3592,3603,3608],{},[204,3588,3589],{},[24,3590,3591],{},"REPLACE(text, old, new)",[204,3593,3594,3595,3598,3599,3602],{},"every ",[24,3596,3597],{},"old"," replaced by ",[24,3600,3601],{},"new","; a result over a million characters stops the render",[204,3604,3605],{},[24,3606,3607],{},"REPLACE(\"Insaccati cotti\", \"Insaccati\", \"Sausages,\")",[204,3609,3610],{},[24,3611,3612],{},"Sausages, cotti",[187,3614,3615,3620,3623,3628],{},[204,3616,3617],{},[24,3618,3619],{},"CONTAINS(text, part)",[204,3621,3622],{},"true when the text contains the part",[204,3624,3625],{},[24,3626,3627],{},"CONTAINS(\"Insaccati da cuocere\", \"cuocere\")",[204,3629,3630],{},[24,3631,342],{},[187,3633,3634,3636,3638,3643],{},[204,3635],{},[204,3637],{},[204,3639,3640],{},[24,3641,3642],{},"CONTAINS(\"Prosciutti\", \"PROSC\")",[204,3644,3645],{},[24,3646,345],{},[187,3648,3649,3654,3657,3662],{},[204,3650,3651],{},[24,3652,3653],{},"STARTSWITH(text, start)",[204,3655,3656],{},"true when the text starts with it",[204,3658,3659],{},[24,3660,3661],{},"STARTSWITH(\"Insaccati cotti\", \"Insaccati\")",[204,3663,3664],{},[24,3665,342],{},[999,3667,525],{"id":3668},"text-1",[14,3670,3671,3674],{},[24,3672,3673],{},"TEXT(value)",": the value as text, as the report prints it without a format, in the\nreport's language; NULL gives an empty text.",[181,3676,3677,3689],{},[184,3678,3679],{},[187,3680,3681,3683,3686],{},[190,3682,195],{},[190,3684,3685],{},"In English",[190,3687,3688],{},"In Italian",[199,3690,3691,3708,3723,3740],{},[187,3692,3693,3698,3703],{},[204,3694,3695],{},[24,3696,3697],{},"TEXT(1234.5)",[204,3699,3700],{},[24,3701,3702],{},"1,234.5",[204,3704,3705],{},[24,3706,3707],{},"1.234,5",[187,3709,3710,3715,3719],{},[204,3711,3712],{},[24,3713,3714],{},"TEXT(202503)",[204,3716,3717],{},[24,3718,218],{},[204,3720,3721],{},[24,3722,218],{},[187,3724,3725,3730,3735],{},[204,3726,3727],{},[24,3728,3729],{},"TEXT(DATE(2026, 3, 5))",[204,3731,3732],{},[24,3733,3734],{},"5 Mar 2026",[204,3736,3737],{},[24,3738,3739],{},"05\u002F03\u002F2026",[187,3741,3742,3747,3751],{},[204,3743,3744],{},[24,3745,3746],{},"TEXT(2 > 1)",[204,3748,3749],{},[24,3750,342],{},[204,3752,3753],{},[24,3754,3755],{},"Sì",[999,3757,528],{"id":3758},"concat",[14,3760,3761,3764,3765,3767,3768,3771,3772,32],{},[24,3762,3763],{},"CONCAT(value1, value2, …)",": the values joined, as ",[24,3766,26],{}," joins them:\n",[24,3769,3770],{},"CONCAT(\"Q\", CEILING(5 \u002F 3), \" \", 2025)"," gives ",[24,3773,3774],{},"Q2 2025",[56,3776,536],{"id":3777},"dates",[14,3779,3780,3781,77,3783,3785,3786,3789,3790,3792,3793,3795],{},"A date plus or minus a number moves it by days; a date minus a date is the days between\nthem. ",[24,3782,3079],{},[24,3784,3082],{}," and a date plus a date are refused («use DATEADD and DATEDIFF»). A field\nof type number is not a date: ",[24,3787,3788],{},"YEAR([anno_mese])"," is refused; a month code becomes a date\nwith ",[24,3791,541],{},", as the calculated field ",[24,3794,208],{}," above does.",[181,3797,3798,3806],{},[184,3799,3800],{},[187,3801,3802,3804],{},[190,3803,195],{},[190,3805,334],{},[199,3807,3808,3820,3831],{},[187,3809,3810,3815],{},[204,3811,3812],{},[24,3813,3814],{},"DATE(2025, 3, 1) + 30",[204,3816,3817],{},[24,3818,3819],{},"31 Mar 2025",[187,3821,3822,3827],{},[204,3823,3824],{},[24,3825,3826],{},"DATE(2025, 3, 1) - DATE(2025, 1, 1)",[204,3828,3829],{},[24,3830,1857],{},[187,3832,3833,3838],{},[204,3834,3835],{},[24,3836,3837],{},"{start_of_month}",[204,3839,3840,3841,3845],{},"the first day of this month: a date ",[18,3842,3844],{"href":3843},"\u002Fdocs\u002Fplaceholders","placeholder",", in the report's time zone",[999,3847,541],{"id":3848},"date",[14,3850,3851,3854],{},[24,3852,3853],{},"DATE(year, month, day)",": a date; NULL when it does not exist.",[181,3856,3857,3865],{},[184,3858,3859],{},[187,3860,3861,3863],{},[190,3862,195],{},[190,3864,334],{},[199,3866,3867,3879,3890],{},[187,3868,3869,3874],{},[204,3870,3871],{},[24,3872,3873],{},"DATE(2025, 3, 1)",[204,3875,3876],{},[24,3877,3878],{},"1 Mar 2025",[187,3880,3881,3886],{},[204,3882,3883],{},[24,3884,3885],{},"ISNULL(DATE(2025, 2, 30))",[204,3887,3888],{},[24,3889,342],{},[187,3891,3892,3897],{},[204,3893,3894],{},[24,3895,3896],{},"DATE(FLOOR(202503 \u002F 100), 202503 - FLOOR(202503 \u002F 100) * 100, 1)",[204,3898,3899],{},[24,3900,3878],{},[999,3902,3904],{"id":3903},"year-month-day-weekday","YEAR, MONTH, DAY, WEEKDAY",[14,3906,3907,77,3910,3913,3914,3917,3918,3921,3922,3924],{},[24,3908,3909],{},"YEAR(date)",[24,3911,3912],{},"MONTH(date)"," from 1 to 12, ",[24,3915,3916],{},"DAY(date)"," of the month, ",[24,3919,3920],{},"WEEKDAY(date)"," from\n1 (Monday) to 7 (Sunday). On the dataset ",[24,3923,259],{},", placed on Saturday 1 July 2023:",[181,3926,3927,3935],{},[184,3928,3929],{},[187,3930,3931,3933],{},[190,3932,195],{},[190,3934,334],{},[199,3936,3937,3949,3961,3972,3983,3995],{},[187,3938,3939,3944],{},[204,3940,3941],{},[24,3942,3943],{},"YEAR([data_ordine])",[204,3945,3946],{},[24,3947,3948],{},"2023",[187,3950,3951,3956],{},[204,3952,3953],{},[24,3954,3955],{},"MONTH([data_ordine])",[204,3957,3958],{},[24,3959,3960],{},"7",[187,3962,3963,3968],{},[204,3964,3965],{},[24,3966,3967],{},"DAY([data_ordine])",[204,3969,3970],{},[24,3971,1177],{},[187,3973,3974,3979],{},[204,3975,3976],{},[24,3977,3978],{},"WEEKDAY([data_ordine])",[204,3980,3981],{},[24,3982,1165],{},[187,3984,3985,3990],{},[204,3986,3987],{},[24,3988,3989],{},"WEEKDAY([data_ordine]) >= 6",[204,3991,3992,3994],{},[24,3993,342],{},": a weekend",[187,3996,3997,4002],{},[204,3998,3999],{},[24,4000,4001],{},"[numero] & \" · \" & FORMAT([data_ordine], \"EEEE d MMMM yyyy\")",[204,4003,4004],{},[24,4005,4006],{},"ORD-12902 · Saturday 1 July 2023",[999,4008,556],{"id":4009},"dateadd",[14,4011,4012,4015,4016,4018,4019,4022,4023,4026,4027,4030,4031,4034],{},[24,4013,4014],{},"DATEADD(unit, count, date)",": the date moved by ",[24,4017,1526],{}," units, ",[24,4020,4021],{},"\"d\""," days, ",[24,4024,4025],{},"\"w\""," weeks,\n",[24,4028,4029],{},"\"m\""," months or ",[24,4032,4033],{},"\"y\""," years; a negative count goes back. A month or a year that lands on\na day its month does not have ends on the month's last day. NULL when the count or the\ndate is.",[181,4036,4037,4045],{},[184,4038,4039],{},[187,4040,4041,4043],{},[190,4042,195],{},[190,4044,334],{},[199,4046,4047,4059,4070,4082,4093,4105,4117,4130],{},[187,4048,4049,4054],{},[204,4050,4051],{},[24,4052,4053],{},"DATEADD(\"m\", 1, DATE(2025, 1, 31))",[204,4055,4056],{},[24,4057,4058],{},"28 Feb 2025",[187,4060,4061,4066],{},[204,4062,4063],{},[24,4064,4065],{},"DATEADD(\"y\", 1, DATE(2024, 2, 29))",[204,4067,4068],{},[24,4069,4058],{},[187,4071,4072,4077],{},[204,4073,4074],{},[24,4075,4076],{},"DATEADD(\"w\", 2, DATE(2025, 3, 1))",[204,4078,4079],{},[24,4080,4081],{},"15 Mar 2025",[187,4083,4084,4089],{},[204,4085,4086],{},[24,4087,4088],{},"DATEADD(\"d\", -1, DATE(2025, 3, 1))",[204,4090,4091],{},[24,4092,4058],{},[187,4094,4095,4100],{},[204,4096,4097],{},[24,4098,4099],{},"DATEADD(\"d\", -1, DATEADD(\"m\", 1, DATE(2025, 2, 1)))",[204,4101,4102,4104],{},[24,4103,4058],{},": the last day of a month",[187,4106,4107,4112],{},[204,4108,4109],{},[24,4110,4111],{},"\"vs \" & FORMAT(DATEADD(\"m\", -1, DATE(2025, 3, 1)), \"MMMM yyyy\")",[204,4113,4114],{},[24,4115,4116],{},"vs February 2025",[187,4118,4119,4124],{},[204,4120,4121,2865],{},[24,4122,4123],{},"FORMAT(DATEADD(\"m\", -1, [Month]), \"MMM yy\")",[204,4125,4126,4129],{},[24,4127,4128],{},"Dec 24"," in the January row",[187,4131,4132,4137],{},[204,4133,4134],{},[24,4135,4136],{},"DATEADD(\"month\", 1, [Month])",[204,4138,4139,4140,77,4142,77,4144,4146,4147],{},"refused: the unit is ",[24,4141,4021],{},[24,4143,4025],{},[24,4145,4029],{}," or ",[24,4148,4033],{},[999,4150,559],{"id":4151},"datediff",[14,4153,4154,4157],{},[24,4155,4156],{},"DATEDIFF(unit, start, end)",": how many whole units from start to end, negative when the\nend comes first. A month counts once the same day of the month is reached.",[181,4159,4160,4168],{},[184,4161,4162],{},[187,4163,4164,4166],{},[190,4165,195],{},[190,4167,334],{},[199,4169,4170,4181,4193,4204,4215,4226,4238],{},[187,4171,4172,4177],{},[204,4173,4174],{},[24,4175,4176],{},"DATEDIFF(\"d\", DATE(2025, 1, 1), DATE(2025, 3, 1))",[204,4178,4179],{},[24,4180,1857],{},[187,4182,4183,4188],{},[204,4184,4185],{},[24,4186,4187],{},"DATEDIFF(\"w\", DATE(2025, 1, 1), DATE(2025, 3, 1))",[204,4189,4190],{},[24,4191,4192],{},"8",[187,4194,4195,4200],{},[204,4196,4197],{},[24,4198,4199],{},"DATEDIFF(\"m\", DATE(2025, 1, 31), DATE(2025, 3, 30))",[204,4201,4202],{},[24,4203,1177],{},[187,4205,4206,4211],{},[204,4207,4208],{},[24,4209,4210],{},"DATEDIFF(\"m\", DATE(2025, 1, 31), DATE(2025, 3, 31))",[204,4212,4213],{},[24,4214,3280],{},[187,4216,4217,4222],{},[204,4218,4219],{},[24,4220,4221],{},"DATEDIFF(\"y\", DATE(2023, 7, 1), DATE(2026, 6, 30))",[204,4223,4224],{},[24,4225,3280],{},[187,4227,4228,4233],{},[204,4229,4230],{},[24,4231,4232],{},"DATEDIFF(\"d\", DATE(2025, 3, 1), DATE(2025, 1, 1))",[204,4234,4235],{},[24,4236,4237],{},"-59",[187,4239,4240,4245],{},[204,4241,4242],{},[24,4243,4244],{},"DATEDIFF(\"m\", [data_ordine], DATE(2025, 12, 31))",[204,4246,4247,4250],{},[24,4248,4249],{},"29",", on the order of 1 July 2023",[999,4252,4254],{"id":4253},"today-now","TODAY, NOW",[14,4256,4257,4260,4261,4264,4265,4268,4269,179],{},[24,4258,4259],{},"TODAY()",": today's date; ",[24,4262,4263],{},"NOW()",": the date and time of the render; both in the report's\n",[47,4266,4267],{},"time zone"," (Page setup). Rendered on 28 October 2026 at 22:03, ",[24,4270,4271],{},"Europe\u002FRome",[181,4273,4274,4282],{},[184,4275,4276],{},[187,4277,4278,4280],{},[190,4279,195],{},[190,4281,334],{},[199,4283,4284,4296,4308,4323],{},[187,4285,4286,4291],{},[204,4287,4288],{},[24,4289,4290],{},"FORMAT(TODAY(), \"yyyy-MM-dd\")",[204,4292,4293],{},[24,4294,4295],{},"2026-10-28",[187,4297,4298,4303],{},[204,4299,4300],{},[24,4301,4302],{},"\"Printed \" & FORMAT(NOW(), \"d MMM yyyy HH:mm\")",[204,4304,4305],{},[24,4306,4307],{},"Printed 28 Oct 2026 22:03",[187,4309,4310,4315],{},[204,4311,4312],{},[24,4313,4314],{},"DATEDIFF(\"d\", {today}, TODAY())",[204,4316,4317,1575,4319,4322],{},[24,4318,1832],{},[24,4320,4321],{},"{today}"," is the same day",[187,4324,4325,4330],{},[204,4326,4327],{},[24,4328,4329],{},"DATEADD(\"d\", -1, {start_of_month})",[204,4331,4332,4335],{},[24,4333,4334],{},"30 Sep 2026",", the last day of the month before",[56,4337,573],{"id":4338},"report-and-page",[999,4340,578],{"id":4341},"param",[14,4343,4344,4347,4348,4351,4352,273,4354,4356,4357,4360],{},[24,4345,4346],{},"PARAM(\"name\")",": the value of a parameter, its name in quotes; NULL when an optional one\nhas no value. A parameter with ",[47,4349,4350],{},"Several values"," gives a list, and ",[24,4353,137],{},[24,4355,2737],{}," compare\na value with each of them. In an expression ",[24,4358,4359],{},"{category}"," is refused: that is how the SQL\nwrites a parameter.",[181,4362,4363,4371],{},[184,4364,4365],{},[187,4366,4367,4369],{},[190,4368,195],{},[190,4370,334],{},[199,4372,4373,4388,4400],{},[187,4374,4375,4380],{},[204,4376,4377],{},[24,4378,4379],{},"\"Monthly margin\" & IF(ISNULL(PARAM(\"category\")), \"\", \" — \" & PARAM(\"category\"))",[204,4381,4382,3051,4385],{},[24,4383,4384],{},"Monthly margin",[24,4386,4387],{},"Monthly margin — Prosciutti",[187,4389,4390,4395],{},[204,4391,4392],{},[24,4393,4394],{},"\"From \" & FORMAT(PARAM(\"since\"), \"MMMM yyyy\")",[204,4396,4397],{},[24,4398,4399],{},"From January 2025",[187,4401,4402,4407],{},[204,4403,4404],{},[24,4405,4406],{},"PARAM(\"categry\")",[204,4408,4409],{},"refused: «There is no parameter «categry»: did you mean \"category\"?»",[999,4411,581],{"id":21},[14,4413,4414,4417,4418,4421,4422,32],{},[24,4415,4416],{},"REPORT()",": the report's name as it is now, so a rename changes it on every page:\n",[24,4419,4420],{},"UPPER(REPORT())"," on «Monthly margin» gives ",[24,4423,4424],{},"MONTHLY MARGIN",[999,4426,4428],{"id":4427},"page-pages","PAGE, PAGES",[14,4430,4431,273,4434,4437,4438,4440,4441,4443,4444,4447,4448,4451,4452,311],{},[24,4432,4433],{},"PAGE()",[24,4435,4436],{},"PAGES()",": the number of the page and how many pages there are. They are\nknown only when the pages are laid out, so they go only in a ",[47,4439,317],{},", joined with ",[24,4442,26],{},":\n",[24,4445,4446],{},"=\"Page \" & PAGE() & \" of \" & PAGES()"," prints ",[24,4449,4450],{},"Page 1 of 4"," on the first of four pages.\nIn a column, a KPI or an aggregate they are refused, and so is arithmetic on them\n(",[24,4453,4454],{},"PAGE() + 1",[56,4456,595],{"id":4457},"formats",[999,4459,600],{"id":4460},"format",[14,4462,4463,4466,4467,273,4470,4473,4474,4477,4478,4481],{},[24,4464,4465],{},"FORMAT(value, pattern)",": a number or a date as text. NULL gives an empty text; a value\nthe pattern does not fit (a text, a date with a number's pattern) is written as with no\nformat. The pattern is checked with the report: ",[24,4468,4469],{},"\"[Red]#,##0\"",[24,4471,4472],{},"\"abc\""," are refused,\nsaying why. The same patterns go in the ",[47,4475,4476],{},"Format"," of a text, a column, a chart or a KPI,\nwhich keeps the value a number (in Excel too); ",[24,4479,4480],{},"FORMAT()"," is for a value inside a text.",[181,4483,4484,4505],{},[184,4485,4486],{},[187,4487,4488,4490,4493,4496,4499,4502],{},[190,4489,195],{},[190,4491,4492],{},"English",[190,4494,4495],{},"Italian",[190,4497,4498],{},"German",[190,4500,4501],{},"Spanish",[190,4503,4504],{},"French",[199,4506,4507,4525,4545,4566,4584,4604,4625,4646,4663,4682,4700,4720,4741,4763,4785,4806,4824],{},[187,4508,4509,4514,4517,4519,4521,4523],{},[204,4510,4511],{},[24,4512,4513],{},"FORMAT(202401, \"0\")",[204,4515,4516],{},"202401",[204,4518,4516],{},[204,4520,4516],{},[204,4522,4516],{},[204,4524,4516],{},[187,4526,4527,4532,4535,4538,4540,4542],{},[204,4528,4529],{},[24,4530,4531],{},"FORMAT(10478825.4, \"#,##0\")",[204,4533,4534],{},"10,478,825",[204,4536,4537],{},"10.478.825",[204,4539,4537],{},[204,4541,4537],{},[204,4543,4544],{},"10 478 825",[187,4546,4547,4552,4555,4558,4560,4563],{},[204,4548,4549],{},[24,4550,4551],{},"FORMAT(1234.5, \"#,##0.00\")",[204,4553,4554],{},"1,234.50",[204,4556,4557],{},"1.234,50",[204,4559,4557],{},[204,4561,4562],{},"1234,50",[204,4564,4565],{},"1 234,50",[187,4567,4568,4573,4575,4578,4580,4582],{},[204,4569,4570],{},[24,4571,4572],{},"FORMAT(0.2453, \"0.0%\")",[204,4574,1432],{},[204,4576,4577],{},"24,5%",[204,4579,4577],{},[204,4581,4577],{},[204,4583,4577],{},[187,4585,4586,4591,4594,4597,4599,4601],{},[204,4587,4588],{},[24,4589,4590],{},"FORMAT(2569181, \"€ #,##0\")",[204,4592,4593],{},"€ 2,569,181",[204,4595,4596],{},"€ 2.569.181",[204,4598,4596],{},[204,4600,4596],{},[204,4602,4603],{},"€ 2 569 181",[187,4605,4606,4611,4614,4617,4619,4622],{},[204,4607,4608],{},[24,4609,4610],{},"FORMAT(1200, \"#,##0 pcs\")",[204,4612,4613],{},"1,200 pcs",[204,4615,4616],{},"1.200 pcs",[204,4618,4616],{},[204,4620,4621],{},"1200 pcs",[204,4623,4624],{},"1 200 pcs",[187,4626,4627,4632,4635,4638,4640,4643],{},[204,4628,4629],{},[24,4630,4631],{},"FORMAT(-1500, \"#,##0;(#,##0)\")",[204,4633,4634],{},"(1,500)",[204,4636,4637],{},"(1.500)",[204,4639,4637],{},[204,4641,4642],{},"(1500)",[204,4644,4645],{},"(1 500)",[187,4647,4648,4653,4655,4657,4659,4661],{},[204,4649,4650],{},[24,4651,4652],{},"FORMAT(0, \"#,##0;-#,##0;-\")",[204,4654,3076],{},[204,4656,3076],{},[204,4658,3076],{},[204,4660,3076],{},[204,4662,3076],{},[187,4664,4665,4670,4673,4676,4678,4680],{},[204,4666,4667],{},[24,4668,4669],{},"FORMAT(0.0512, \"+0.0%;-0.0%;0%\")",[204,4671,4672],{},"+5.1%",[204,4674,4675],{},"+5,1%",[204,4677,4675],{},[204,4679,4675],{},[204,4681,4675],{},[187,4683,4684,4689,4692,4694,4696,4698],{},[204,4685,4686],{},[24,4687,4688],{},"FORMAT(7, \"000\")",[204,4690,4691],{},"007",[204,4693,4691],{},[204,4695,4691],{},[204,4697,4691],{},[204,4699,4691],{},[187,4701,4702,4707,4709,4712,4715,4717],{},[204,4703,4704],{},[24,4705,4706],{},"FORMAT(DATE(2026, 3, 5), \"d MMM yyyy\")",[204,4708,3734],{},[204,4710,4711],{},"5 mar 2026",[204,4713,4714],{},"5 März 2026",[204,4716,4711],{},[204,4718,4719],{},"5 mars 2026",[187,4721,4722,4727,4730,4733,4736,4738],{},[204,4723,4724],{},[24,4725,4726],{},"FORMAT(DATE(2026, 3, 5), \"MMMM yyyy\")",[204,4728,4729],{},"March 2026",[204,4731,4732],{},"marzo 2026",[204,4734,4735],{},"März 2026",[204,4737,4732],{},[204,4739,4740],{},"mars 2026",[187,4742,4743,4748,4751,4754,4757,4760],{},[204,4744,4745],{},[24,4746,4747],{},"FORMAT(DATE(2026, 3, 5), \"EEEE d MMMM\")",[204,4749,4750],{},"Thursday 5 March",[204,4752,4753],{},"giovedì 5 marzo",[204,4755,4756],{},"Donnerstag 5 März",[204,4758,4759],{},"jueves 5 marzo",[204,4761,4762],{},"jeudi 5 mars",[187,4764,4765,4770,4773,4776,4779,4782],{},[204,4766,4767],{},[24,4768,4769],{},"FORMAT(DATE(2026, 3, 5), \"EEE d\")",[204,4771,4772],{},"Thu 5",[204,4774,4775],{},"gio 5",[204,4777,4778],{},"Do. 5",[204,4780,4781],{},"jue 5",[204,4783,4784],{},"jeu. 5",[187,4786,4787,4792,4795,4798,4801,4803],{},[204,4788,4789],{},[24,4790,4791],{},"FORMAT(DATE(2026, 3, 5), \"MMM yy\")",[204,4793,4794],{},"Mar 26",[204,4796,4797],{},"mar 26",[204,4799,4800],{},"März 26",[204,4802,4797],{},[204,4804,4805],{},"mars 26",[187,4807,4808,4813,4816,4818,4820,4822],{},[204,4809,4810],{},[24,4811,4812],{},"FORMAT(DATE(2026, 3, 5), \"yyyy-MM\")",[204,4814,4815],{},"2026-03",[204,4817,4815],{},[204,4819,4815],{},[204,4821,4815],{},[204,4823,4815],{},[187,4825,4826,4831,4834,4837,4840,4842],{},[204,4827,4828],{},[24,4829,4830],{},"FORMAT(DATE(2026, 3, 5), \"'Week of' d MMM\")",[204,4832,4833],{},"Week of 5 Mar",[204,4835,4836],{},"Week of 5 mar",[204,4838,4839],{},"Week of 5 März",[204,4841,4836],{},[204,4843,4844],{},"Week of 5 mars",[14,4846,4847,4848,4851,4852,3771,4855,4858,4859,3771,4862,4865,4866,32],{},"The language is the report's (",[47,4849,4850],{},"Page setup","), not the reader's. Rounding is half away\nfrom zero, on the decimal value as written: ",[24,4853,4854],{},"FORMAT(1.005, \"0.00\")",[24,4856,4857],{},"1.01",", and\n",[24,4860,4861],{},"FORMAT(-0.004, \"0.00\")",[24,4863,4864],{},"0.00",", without a minus. Every symbol of the patterns is\nin ",[18,4867,4869],{"href":4868},"\u002Fdocs\u002Fcapabilities\u002Freports#formats","Reports: formats",[56,4871,616],{"id":4872},"recipes",[999,4874,4876],{"id":4875},"margin-percentage","Margin percentage",[14,4878,4879],{},"As a total, the ratio of the sums, never the sum or the average of the ratios:",[83,4881,4885],{"className":4882,"code":4884,"language":3351,"meta":88},[4883],"language-text","SUM([margine]) \u002F SUM([ricavo])        format 0.0%\n",[24,4886,4884],{"__ignoreMap":88},[14,4888,4889,4891,4892,1422,4895,4897,4898,1575,4900,4903,4904,4906],{},[24,4890,1432],{}," over the six months, ",[24,4893,4894],{},"21.2%",[43,4896,1647],{},". Row by row, the\ncalculated field ",[24,4899,226],{},[24,4901,4902],{},"[margine] \u002F [ricavo]"," alone would also give NULL on a\nmonth with no revenue, since a division by zero is NULL; the ",[24,4905,439],{}," says it on purpose.",[999,4908,4910],{"id":4909},"growth-on-the-month-before","Growth on the month before",[14,4912,4913,4914,1922,4916,179],{},"A column in a table grouped by ",[24,4915,768],{},[24,4917,1062],{},[83,4919,4922],{"className":4920,"code":4921,"language":3351,"meta":88},[4883],"[ricavo] \u002F PREVIOUS([ricavo]) - 1          format +0.0%;-0.0%;0.0%\n",[24,4923,4921],{"__ignoreMap":88},[14,4925,4926,4927,4929,4930,4932,4933,4935,4936,32],{},"It gives nothing in January, ",[24,4928,2275],{}," in February and ",[24,4931,2290],{}," in March for Insaccati cotti:\nthe first row of each category has no month before, and the NULL prints as nothing, with\nno error. For the change between totals, as the ",[47,4934,327],{}," of the column:\n",[24,4937,2367],{},[14,4939,4940,4942,4943,4945,4946,374,4948,4951],{},[47,4941,684],{}," comes first, so the first month the table keeps has no month before. When it\nshould compare with the month the filter leaves out, ask the whole dataset: on ",[24,4944,242],{},",\nwith ",[47,4947,684],{},[24,4949,4950],{},"YEAR([Month]) = 2025 AND MONTH([Month]) \u003C= 6",", the month before is found\nby its key, here with the category inside it, since a month has one row per category:",[83,4953,4956],{"className":4954,"code":4955,"language":3351,"meta":88},[4883],"[ricavo] \u002F LOOKUP([categoria] & [Before], [categoria] & [anno_mese], [ricavo]) - 1\n",[24,4957,4955],{"__ignoreMap":88},[14,4959,4960,4961,77,4964,4967,4968,3771,4970,4973],{},"with the calculated field ",[24,4962,4963],{},"Before",[24,4965,4966],{},"YEAR(DATEADD(\"m\", -1, [Month])) * 100 + MONTH(DATEADD(\"m\", -1, [Month]))",":\nJanuary of ",[43,4969,772],{},[24,4971,4972],{},"-44.1%"," on the 119,264 of December 2024.",[14,4975,4976,4977,4980,4981,4983,4984,4986],{},"With SQL, ",[24,4978,4979],{},"LAG"," does the same in the dataset, and the growth is then a field of the row like\nany other, which is the way when it has to be sorted by, filtered on or charted with a\n",[47,4982,915],{},", as ",[24,4985,423],{}," cannot be:",[83,4988,4990],{"className":85,"code":4989,"language":87,"meta":88,"style":88},"SELECT * FROM (\n  SELECT categoria, anno_mese, ricavo, costo, margine,\n         LAG(ricavo) OVER (PARTITION BY categoria ORDER BY anno_mese) AS ricavo_prev\n  FROM \"Margin by Category and Month\") AS m\nWHERE anno_mese >= 202501\nORDER BY categoria, anno_mese\n",[24,4991,4992,5005,5013,5045,5061,5072],{"__ignoreMap":88},[92,4993,4994,4996,4999,5002],{"class":94,"line":95},[92,4995,99],{"class":98},[92,4997,4998],{"class":98}," *",[92,5000,5001],{"class":98}," FROM",[92,5003,5004],{"class":102}," (\n",[92,5006,5007,5010],{"class":94,"line":106},[92,5008,5009],{"class":98},"  SELECT",[92,5011,5012],{"class":102}," categoria, anno_mese, ricavo, costo, margine,\n",[92,5014,5015,5018,5021,5024,5026,5029,5032,5034,5036,5039,5042],{"class":94,"line":116},[92,5016,5017],{"class":155},"         LAG",[92,5019,5020],{"class":102},"(ricavo) ",[92,5022,5023],{"class":98},"OVER",[92,5025,1219],{"class":102},[92,5027,5028],{"class":98},"PARTITION",[92,5030,5031],{"class":98}," BY",[92,5033,134],{"class":102},[92,5035,168],{"class":98},[92,5037,5038],{"class":102}," anno_mese) ",[92,5040,5041],{"class":98},"AS",[92,5043,5044],{"class":102}," ricavo_prev\n",[92,5046,5047,5050,5053,5056,5058],{"class":94,"line":143},[92,5048,5049],{"class":98},"  FROM",[92,5051,5052],{"class":112}," \"Margin by Category and Month\"",[92,5054,5055],{"class":102},") ",[92,5057,5041],{"class":98},[92,5059,5060],{"class":102}," m\n",[92,5062,5063,5065,5067,5069],{"class":94,"line":165},[92,5064,119],{"class":98},[92,5066,149],{"class":102},[92,5068,2749],{"class":98},[92,5070,5071],{"class":155}," 202501\n",[92,5073,5075,5077],{"class":94,"line":5074},6,[92,5076,168],{"class":98},[92,5078,171],{"class":102},[14,5080,5081,5082,5085,5086,5088,5089,5091],{},"and ",[24,5083,5084],{},"[ricavo] \u002F [ricavo_prev] - 1"," in a calculated field. ",[24,5087,4979],{}," written outside the subquery\nruns after the ",[24,5090,119],{},", and the first month of the range has no month before.",[14,5093,5094,5095,5098],{},"For one number against another period, a KPI's ",[47,5096,5097],{},"Compared with"," needs neither: the card\nshows the change in percent with its arrow.",[999,5100,5102],{"id":5101},"the-share-of-a-level-you-choose","The share of a level you choose",[14,5104,5105,5106,5108,5109,5111,5112,1922,5114,5116],{},"A table grouped by ",[24,5107,768],{}," and by the quarter, ",[24,5110,1045],{},"\nnamed ",[24,5113,1049],{},[24,5115,1062],{},", with the column:",[83,5118,5121],{"className":5119,"code":5120,"language":3351,"meta":88},[4883],"Value   PERCENT(SUM([ricavo]), \"categoria\")       format 0.0%\nTotal   PERCENT(SUM([ricavo]), \"categoria\")\n",[24,5122,5120],{"__ignoreMap":88},[14,5124,5125,5126,5128,5129,5131,5132,5134,5135,5137,5138,5140,5141,32],{},"Each month and each quarter is a share of its category, not of the quarter: January\n",[24,5127,1965],{},", the first quarter ",[24,5130,1230],{},", the category ",[24,5133,1240],{},", and nothing in the grand total.\nIn the total rows ",[24,5136,1226],{}," is the same number\n(",[18,5139,732],{"href":731},"). The share of the level just above is\n",[18,5142,5144],{"href":5143},"#the-share-of-the-category","plain PERCENT",[999,5146,5148],{"id":5147},"the-year-before","The year before",[14,5150,5151,5152,5154,5155,5157,1056,5159,5162,5163,5165],{},"The same month one year earlier, on ",[24,5153,242],{},", with ",[47,5156,684],{},[24,5158,4950],{},[24,5160,5161],{},"[Month]",", without detail rows, as\nthe ",[47,5164,327],{}," of two columns:",[83,5167,5170],{"className":5168,"code":5169,"language":3351,"meta":88},[4883],"LOOKUP(DATEADD(\"y\", -1, [Month]), [Month], SUM([ricavo]))\nSUM([ricavo]) \u002F LOOKUP(DATEADD(\"y\", -1, [Month]), [Month], SUM([ricavo])) - 1\n",[24,5171,5169],{"__ignoreMap":88},[181,5173,5174,5188],{},[184,5175,5176],{},[187,5177,5178,5180,5182,5185],{},[190,5179,208],{},[190,5181,1946],{},[190,5183,5184],{},"Year before",[190,5186,5187],{},"Change",[199,5189,5190,5205,5221,5237,5253,5268],{},[187,5191,5192,5194,5197,5200],{},[204,5193,1192],{},[204,5195,5196],{},"454,816",[204,5198,5199],{},"429,437",[204,5201,5202],{},[24,5203,5204],{},"+5.9%",[187,5206,5207,5210,5213,5216],{},[204,5208,5209],{},"Feb 2025",[204,5211,5212],{},"392,970",[204,5214,5215],{},"315,245",[204,5217,5218],{},[24,5219,5220],{},"+24.7%",[187,5222,5223,5226,5229,5232],{},[204,5224,5225],{},"Mar 2025",[204,5227,5228],{},"551,543",[204,5230,5231],{},"406,810",[204,5233,5234],{},[24,5235,5236],{},"+35.6%",[187,5238,5239,5242,5245,5248],{},[204,5240,5241],{},"Apr 2025",[204,5243,5244],{},"627,418",[204,5246,5247],{},"511,886",[204,5249,5250],{},[24,5251,5252],{},"+22.6%",[187,5254,5255,5257,5260,5263],{},[204,5256,2311],{},[204,5258,5259],{},"478,988",[204,5261,5262],{},"470,593",[204,5264,5265],{},[24,5266,5267],{},"+1.8%",[187,5269,5270,5272,5275,5278],{},[204,5271,1206],{},[204,5273,5274],{},"416,174",[204,5276,5277],{},"382,667",[204,5279,5280],{},[24,5281,5282],{},"+8.8%",[14,5284,5285,5286,5288,5289,5291,5292,5294,5295,5297,5298,5301],{},"The filter does not hide 2024 from ",[24,5287,426],{},", which reads the whole dataset. A month has one\nkey here, so ",[24,5290,373],{}," adds its five categories. ",[24,5293,556],{}," keeps the end of the month: 29\nFebruary 2024 and one year is 28 February 2025, and the months of a code such as ",[24,5296,218],{},"\nneed no date at all, ",[24,5299,5300],{},"[anno_mese] - 100"," is the same month a year earlier.",[14,5303,5304,5305,179],{},"Category by category the key holds both, in a table grouped by ",[24,5306,768],{},[83,5308,5311],{"className":5309,"code":5310,"language":3351,"meta":88},[4883],"LOOKUP([categoria] & ([anno_mese] - 100), [categoria] & [anno_mese], [ricavo])\n",[24,5312,5310],{"__ignoreMap":88},[14,5314,5315,5316,3771,5318,5321,5322,5324,5325,5328,5329,5332,5333,5336],{},"which for ",[43,5317,772],{},[24,5319,5320],{},"62,408"," in January 2025 (the row has ",[24,5323,1960],{},", so ",[24,5326,5327],{},"+6.8%",")\nand ",[24,5330,5331],{},"54,765"," in February (",[24,5334,5335],{},"+18.1%","). Without the category in the key the first row of that\nmonth in the dataset would answer for all of them, the one of another category.",[999,5338,5340],{"id":5339},"a-value-from-a-price-list","A value from a price list",[14,5342,5343,5344,5346],{},"The dataset ",[24,5345,276],{}," has one row per product and date, the latest first, so that the first\nrow with a key is the price in force:",[83,5348,5350],{"className":85,"code":5349,"language":87,"meta":88,"style":88},"SELECT p.codice, l.prezzo_listino, l.valido_dal\nFROM price_list l JOIN products p ON p.id = l.prodotto_id\nORDER BY p.codice, l.valido_dal DESC\n",[24,5351,5352,5383,5417],{"__ignoreMap":88},[92,5353,5354,5356,5359,5361,5364,5366,5369,5371,5374,5376,5378,5380],{"class":94,"line":95},[92,5355,99],{"class":98},[92,5357,5358],{"class":155}," p",[92,5360,32],{"class":102},[92,5362,5363],{"class":155},"codice",[92,5365,77],{"class":102},[92,5367,5368],{"class":155},"l",[92,5370,32],{"class":102},[92,5372,5373],{"class":155},"prezzo_listino",[92,5375,77],{"class":102},[92,5377,5368],{"class":155},[92,5379,32],{"class":102},[92,5381,5382],{"class":155},"valido_dal\n",[92,5384,5385,5387,5390,5393,5396,5399,5401,5403,5406,5409,5412,5414],{"class":94,"line":106},[92,5386,109],{"class":98},[92,5388,5389],{"class":102}," price_list l ",[92,5391,5392],{"class":98},"JOIN",[92,5394,5395],{"class":102}," products p ",[92,5397,5398],{"class":98},"ON",[92,5400,5358],{"class":155},[92,5402,32],{"class":102},[92,5404,5405],{"class":155},"id",[92,5407,5408],{"class":98}," =",[92,5410,5411],{"class":155}," l",[92,5413,32],{"class":102},[92,5415,5416],{"class":155},"prodotto_id\n",[92,5418,5419,5421,5423,5425,5427,5429,5431,5433,5436],{"class":94,"line":116},[92,5420,168],{"class":98},[92,5422,5358],{"class":155},[92,5424,32],{"class":102},[92,5426,5363],{"class":155},[92,5428,77],{"class":102},[92,5430,5368],{"class":155},[92,5432,32],{"class":102},[92,5434,5435],{"class":155},"valido_dal",[92,5437,5438],{"class":98}," DESC\n",[14,5440,5441,5442,77,5444,179],{},"In a table on ",[24,5443,272],{},[24,5445,5446],{},"SELECT codice, nome, ricavo, quantita FROM \"Top 20 Products by Revenue\"",[83,5448,5451],{"className":5449,"code":5450,"language":3351,"meta":88},[4883],"LOOKUP([codice], [codice], [prezzo_listino], \"prices\")     the list price\n[ricavo] \u002F [quantita]                                      the price it was really sold at\n",[24,5452,5450],{"__ignoreMap":88},[181,5454,5455,5476],{},[184,5456,5457],{},[187,5458,5459,5462,5464,5467,5470],{},[190,5460,5461],{},"Product",[190,5463,1946],{},[190,5465,5466],{},"List price",[190,5468,5469],{},"Sold at",[190,5471,5472,5473],{},"Against the list, ",[24,5474,5475],{},"[ricavo] \u002F [quantita] \u002F LOOKUP(…) - 1",[199,5477,5478,5501,5524],{},[187,5479,5480,5483,5486,5491,5496],{},[204,5481,5482],{},"SKU0019 Culatello di Zibello DOP, counter cut",[204,5484,5485],{},"750,618",[204,5487,5488],{},[24,5489,5490],{},"53.42",[204,5492,5493],{},[24,5494,5495],{},"45.77",[204,5497,5498],{},[24,5499,5500],{},"-14.3%",[187,5502,5503,5506,5509,5514,5519],{},[204,5504,5505],{},"SKU0018 Culatello di Zibello DOP, half vacuum-packed",[204,5507,5508],{},"745,775",[204,5510,5511],{},[24,5512,5513],{},"51.90",[204,5515,5516],{},[24,5517,5518],{},"44.45",[204,5520,5521],{},[24,5522,5523],{},"-14.4%",[187,5525,5526,5529,5532,5537,5542],{},[204,5527,5528],{},"SKU0017",[204,5530,5531],{},"709,590",[204,5533,5534],{},[24,5535,5536],{},"50.88",[204,5538,5539],{},[24,5540,5541],{},"43.64",[204,5543,5544],{},[24,5545,5546],{},"-14.2%",[14,5548,5549,5550,5552,5553,3771,5555,5558,5559,32],{},"And the whole of it, inside an aggregate, as the ",[47,5551,327],{}," of a column:\n",[24,5554,2725],{},[24,5556,5557],{},"10,113,886",",\nwhat the twenty products would have made at their list price, against ",[24,5560,5561],{},"8,656,855",[999,5563,5565],{"id":5564},"the-sum-of-a-period","The sum of a period",[83,5567,5570],{"className":5568,"code":5569,"language":3351,"meta":88},[4883],"SUMIF([anno_mese] \u003C= 202503, [ricavo])              format #,##0\nSUMIF([anno_mese] \u003C= 202503, [ricavo]) \u002F SUM([ricavo])    format 0.0%\n",[24,5571,5569],{"__ignoreMap":88},[14,5573,5574,5575,77,5577,5580,5581,5583,5584,77,5586,273,5588,5590,5591,1022,5593,273,5596,5590,5598,5600,5601,5604],{},"In a KPI on ",[24,5576,76],{},[24,5578,5579],{},"1,399,329",", the first quarter of the six months. As the ",[47,5582,327],{}," of\ntwo columns of a table grouped by ",[24,5585,768],{},[24,5587,2172],{},[24,5589,1230],{}," for ",[43,5592,772],{},[24,5594,5595],{},"453,337",[24,5597,1878],{},[43,5599,1882],{},". ",[24,5602,5603],{},"SUM(IF([anno_mese] \u003C= 202503, [ricavo]))"," gives the very\nsame numbers.",[999,5606,5608],{"id":5607},"labels-with-format","Labels with FORMAT",[14,5610,5611],{},"A text that mixes words and numbers formats each number:",[83,5613,5616],{"className":5614,"code":5615,"language":3351,"meta":88},[4883],"=\"Revenue \" & FORMAT(SUM([ricavo]), \"€ #,##0\") & \" · margin \" & FORMAT(SUM([margine]) \u002F SUM([ricavo]), \"0.0%\")\n",[24,5617,5615],{"__ignoreMap":88},[14,5619,5620,5621,5624,5625,5627,5628,5630,5631,311],{},"gives ",[24,5622,5623],{},"Revenue € 2,921,909 · margin 24.5%",". A number joined with ",[24,5626,26],{}," and no ",[24,5629,600],{},"\nkeeps up to two decimals (",[24,5632,3391],{},[999,5634,5636],{"id":5635},"the-share-of-the-category","The share of the category",[14,5638,5639,5640,5642,5643,273,5645,1084,5647,5649,5650,5652,5653,311],{},"A column with ",[24,5641,1928],{}," as ",[47,5644,324],{},[47,5646,327],{},[24,5648,1103],{},", in a\ntable grouped by ",[24,5651,768],{},": each month's share of its category, and in the total row\nthe category's share of the whole (",[18,5654,404],{"href":1222},[999,5656,5658],{"id":5657},"a-running-total","A running total",[14,5660,5661,5662,5664,5665,5667,5668,5671],{},"A column ",[24,5663,2117],{}," in a table sorted by ",[24,5666,1062],{}," and grouped by\ncategory: the revenue from the first month of the category to this one\n(",[18,5669,407],{"href":5670},"#running","). With no group, it runs over the whole table.",[999,5673,5675],{"id":5674},"thresholds","Thresholds",[14,5677,5678,5679,5681,5682,5685,5686,5689,5690,5693,5694,77,5696,374,5698,5701],{},"A ",[47,5680,815],{}," colours cells: on the column ",[24,5683,5684],{},"Margin %",", when ",[24,5687,5688],{},"[MarginPct] \u003C 0.22",", red and\nbold. A column with a word: ",[24,5691,5692],{},"IFS([MarginPct] >= 0.3, \"High\", [MarginPct] >= 0.22, \"On target\", \"Below target\")",". A text that appears only when it matters: on the dataset\n",[24,5695,76],{},[47,5697,890],{},[24,5699,5700],{},"SUM([margine]) \u002F SUM([ricavo]) \u003C 0.25","; at 24.5% it is shown.",[999,5703,5705],{"id":5704},"dates-in-titles","Dates in titles",[83,5707,5710],{"className":5708,"code":5709,"language":3351,"meta":88},[4883],"=\"Monthly margin\" & IF(ISNULL(PARAM(\"category\")), \"\", \" — \" & PARAM(\"category\"))\n=\"From \" & FORMAT(PARAM(\"since\"), \"MMMM yyyy\") & \" to \" & FORMAT(DATEADD(\"d\", -1, {start_of_month}), \"d MMMM yyyy\")\n",[24,5711,5709],{"__ignoreMap":88},[14,5713,5714,5715,5717,5718,32],{},"The first gives ",[24,5716,4387],{}," when a category is chosen; the second, on\n28 October 2026, ",[24,5719,5720],{},"From January 2025 to 30 September 2026",[56,5722,621],{"id":5723},"when-an-expression-is-wrong",[14,5725,5726,5727,5730],{},"The editor checks while you type and underlines the part that is wrong; the server\nchecks the whole report against the datasets' fields (",[47,5728,5729],{},"Refresh fields",") after a pause\nand at every save, which lists what it refuses with the character where the mistake is.\nSome of the messages:",[181,5732,5733,5743],{},[184,5734,5735],{},[187,5736,5737,5740],{},[190,5738,5739],{},"Written",[190,5741,5742],{},"The message",[199,5744,5745,5763,5776,5786,5796,5806,5816,5825,5835,5845,5857,5867,5880,5893,5911,5922,5932,5946,5957,5972,5982,5995,6007,6021,6031,6040,6052,6062,6072,6082,6092,6102,6112,6121,6130,6144,6156,6171],{},[187,5746,5747,5752],{},[204,5748,5749],{},[24,5750,5751],{},"SUM([ricavo]) \u002F SUM([ricavoo])",[204,5753,5754,5755,5758,5759,5762],{},"There is no field ",[92,5756,5757],{},"ricavoo"," of the dataset «margins»: did you mean ",[92,5760,5761],{},"ricavo","?",[187,5764,5765,5770],{},[204,5766,5767],{},[24,5768,5769],{},"ricavo * 2",[204,5771,5772,5773,5775],{},"Unknown name «ricavo»: fields are written in brackets, ",[92,5774,5761],{},", and functions with their parentheses, RICAVO(…)",[187,5777,5778,5783],{},[204,5779,5780],{},[24,5781,5782],{},"ROUNDD([ricavo], 2)",[204,5784,5785],{},"Unknown function ROUNDD: did you mean ROUND?",[187,5787,5788,5793],{},[204,5789,5790],{},[24,5791,5792],{},"[ricavo] != 0",[204,5794,5795],{},"«!=» is not part of the language: write \u003C> for «not equal»",[187,5797,5798,5803],{},[204,5799,5800],{},[24,5801,5802],{},"'Salami'",[204,5804,5805],{},"«'» is not part of the language: texts go in double quotes: \"text\"",[187,5807,5808,5813],{},[204,5809,5810],{},[24,5811,5812],{},"[ricavo] ^ 2",[204,5814,5815],{},"«^» is not part of the language: use POWER(x, y)",[187,5817,5818,5822],{},[204,5819,5820],{},[24,5821,3093],{},[204,5823,5824],{},"«+» works on numbers, and this is a text: join texts with &",[187,5826,5827,5832],{},[204,5828,5829],{},[24,5830,5831],{},"SUM([categoria])",[204,5833,5834],{},"SUM adds numbers: a field of type text is here",[187,5836,5837,5842],{},[204,5838,5839],{},[24,5840,5841],{},"SUM(SUM([ricavo]))",[204,5843,5844],{},"SUM inside another aggregate: write one at a time",[187,5846,5847,5854],{},[204,5848,5849,5642,5852],{},[24,5850,5851],{},"ROWNUMBER() \u003C= 10",[47,5853,684],{},[204,5855,5856],{},"ROWNUMBER() is the row's place among those the table shows: it is not known yet where they are chosen, sorted or grouped",[187,5858,5859,5864],{},[204,5860,5861,5863],{},[24,5862,2117],{}," in a calculated field",[204,5865,5866],{},"RUNNING goes over the rows a table shows: write it in a column of the table, not in a calculated field",[187,5868,5869,5874],{},[204,5870,5871],{},[24,5872,5873],{},"RUNNING([ricavo])",[204,5875,5876,5877,5879],{},"RUNNING takes an aggregate of the group, as RUNNING(SUM(",[92,5878,1912],{},"))",[187,5881,5882,5890],{},[204,5883,5884,5886,5887,5889],{},[24,5885,827],{}," in a calculated field, ",[47,5888,684],{},", a text or a KPI",[204,5891,5892],{},"PREVIOUS reads the row above among those a table shows: write it in a column of the table or in its total",[187,5894,5895,5902],{},[204,5896,5897,5899,5900],{},[24,5898,2362],{}," in a column's ",[47,5901,324],{},[204,5903,5904,5905,5907,5908,5910],{},"On a row an aggregate is the same for every row of the group: write PREVIOUS(",[92,5906,1912],{},") here, and PREVIOUS(SUM(",[92,5909,1912],{},")) in the column's total",[187,5912,5913,5917],{},[204,5914,5915],{},[24,5916,2543],{},[204,5918,5919,5920,5879],{},"PREVIOUS inside an aggregate: an aggregate works on its rows in no order; write the aggregate inside it, as PREVIOUS(SUM(",[92,5921,1912],{},[187,5923,5924,5929],{},[204,5925,5926,5928],{},[24,5927,2362],{}," in a matrix",[204,5930,5931],{},"A matrix has no row above in the rows it reads: PREVIOUS goes in the columns of a table",[187,5933,5934,5943],{},[204,5935,5936,5938,5939,4146,5941],{},[24,5937,2362],{}," in a chart with ",[47,5940,915],{},[47,5942,918],{},[204,5944,5945],{},"PREVIOUS follows a chart's axis in the order of the data: not with its option «sort» or «top»",[187,5947,5948,5954],{},[204,5949,5950,5953],{},[24,5951,5952],{},"SUM([ricavo], \"mese\")"," where there is no such group",[204,5955,5956],{},"There is no dataset or group «mese»",[187,5958,5959,5969],{},[204,5960,5961,5964,5965,5968],{},[24,5962,5963],{},"SUM([ricavo], \"year\")"," on a group by ",[24,5966,5967],{},"YEAR([Month])"," with no name",[204,5970,5971],{},"There is no dataset or group «year». A group by an expression has no name until you give it one",[187,5973,5974,5979],{},[204,5975,5976,5978],{},[24,5977,725],{}," with a dataset of that name",[204,5980,5981],{},"«categoria» is both a dataset and a group of this table: rename the dataset, or give the group a name of its own",[187,5983,5984,5992],{},[204,5985,5986,5988,5989,5991],{},[24,5987,1052],{}," in a ",[47,5990,327],{}," with a total row for the category",[204,5993,5994],{},"The total of the group «categoria» is outside the group «quarter»: a total reads the group it closes and those around it. Name one of those, or switch that total off",[187,5996,5997,6004],{},[204,5998,5999,5642,6002],{},[24,6000,6001],{},"[ricavo] > SUM([ricavo], \"categoria\")",[47,6003,684],{},[204,6005,6006],{},"The rows are chosen before the groups are made: the group «categoria» has no rows yet in «Rows where»",[187,6008,6009,6014],{},[204,6010,6011],{},[24,6012,6013],{},"PERCENT(SUM([ricavo], \"categoria\"))",[204,6015,6016,6017,6020],{},"Write the group after the aggregate: PERCENT(SUM(",[92,6018,6019],{},"x","), \"categoria\")",[187,6022,6023,6028],{},[204,6024,6025],{},[24,6026,6027],{},"PERCENT(SUM([ricavo]), \"margins\")",[204,6029,6030],{},"PERCENT takes a group of the table, and «margins» is none",[187,6032,6033,6037],{},[204,6034,6035],{},[24,6036,1888],{},[204,6038,6039],{},"SUMIF: the first argument is a condition — SUMIF(condition, value): a field of type number is here",[187,6041,6042,6047],{},[204,6043,6044],{},[24,6045,6046],{},"LOOKUP([ricavo], [categoria], [costo])",[204,6048,6049,6050,685],{},"LOOKUP compares a number with a text: they are of different types, and would never be equal. Make them one type, as TEXT(",[92,6051,24],{},[187,6053,6054,6059],{},[204,6055,6056],{},[24,6057,6058],{},"LOOKUP([categoria], [categoria], [ricavo], \"margin\")",[204,6060,6061],{},"There is no dataset «margin»: did you mean \"margins\"?",[187,6063,6064,6069],{},[204,6065,6066],{},[24,6067,6068],{},"LOOKUP([a], SUM([b]), [c])",[204,6070,6071],{},"SUM: an aggregate cannot be written here (the value of each row is wanted)",[187,6073,6074,6079],{},[204,6075,6076],{},[24,6077,6078],{},"LOOKUP([a], [b], SUM([c], \"margins\"))",[204,6080,6081],{},"An aggregate in LOOKUP works on the rows with the key: it names no dataset or group",[187,6083,6084,6089],{},[204,6085,6086,1335],{},[24,6087,6088],{},"LOOKUP(1, [a], [b])",[204,6090,6091],{},"LOOKUP here names its dataset: LOOKUP(key, key field, result, \"dataset\")",[187,6093,6094,6099],{},[204,6095,6096],{},[24,6097,6098],{},"MID(\"abc\", 1)",[204,6100,6101],{},"MID takes 3 arguments, 2 given: MID(text, start, count)",[187,6103,6104,6109],{},[204,6105,6106],{},[24,6107,6108],{},"IF([ricavo] > 0, \"yes\"",[204,6110,6111],{},"IF( is not closed: add «)» after its arguments, separated by commas",[187,6113,6114,6119],{},[204,6115,6116],{},[24,6117,6118],{},"SUM([ricavo], \"margin\")",[204,6120,6061],{},[187,6122,6123,6127],{},[204,6124,6125],{},[24,6126,4359],{},[204,6128,6129],{},"{category} is a parameter: in an expression write PARAM(\"category\")",[187,6131,6132,6137],{},[204,6133,6134],{},[24,6135,6136],{},"FORMAT([ricavo], \"[Red]#,##0\")",[204,6138,6139,6140,6143],{},"«",[92,6141,6142],{},"Red","» is not part of a format: a colour goes in a column's rule (Excel writes negatives in red by itself), and text in double quotes",[187,6145,6146,6150],{},[204,6147,6148,1335],{},[24,6149,611],{},[204,6151,6152,6153,6155],{},"SUM in the page header or footer names its dataset: SUM(",[92,6154,6019],{},", \"orders\")",[187,6157,6158,6165],{},[204,6159,6160,5642,6163],{},[24,6161,6162],{},"[ricavo]",[47,6164,684],{},[204,6166,6167,6168,6170],{},"A condition is wanted here (true or false), as ",[92,6169,1912],{}," > 0: this is a number",[187,6172,6173,6179],{},[204,6174,6175,5642,6177],{},[24,6176,611],{},[47,6178,943],{},[204,6180,6071],{},[56,6182,6184],{"id":6183},"related","Related",[69,6186,6187,6193,6204],{},[72,6188,6189,6192],{},[18,6190,6191],{"href":20},"Pixel-perfect reports",": the designer, datasets and parameters, tables,\ncharts, the viewer and the Reports tab",[72,6194,6195,1575,6198,77,6200,6203],{},[18,6196,6197],{"href":3843},"Date placeholders",[24,6199,4321],{},[24,6201,6202],{},"{start_of_month-1m}"," and the others",[72,6205,6206,6210],{},[18,6207,6209],{"href":6208},"\u002Fdocs\u002Fsql-scripts","SQL scripts",": the SQL a dataset can read",[6212,6213,6214],"style",{},"html pre.shiki code .s6PUj, html code.shiki .s6PUj{--shiki-default:#F47067;--shiki-light:#D73A49}html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}html pre.shiki code .swcJU, html code.shiki .swcJU{--shiki-default:#6CB6FF;--shiki-light:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":88,"searchDepth":106,"depth":116,"links":6216},[6217,6218,6231,6235,6241,6246,6250,6257,6262,6265,6278,6279],{"id":58,"depth":106,"text":59},{"id":625,"depth":106,"text":368,"children":6219},[6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230],{"id":1001,"depth":116,"text":1002},{"id":1286,"depth":116,"text":373},{"id":1360,"depth":116,"text":377},{"id":1439,"depth":116,"text":1440},{"id":1526,"depth":116,"text":386},{"id":1606,"depth":116,"text":389},{"id":1654,"depth":116,"text":1655},{"id":1729,"depth":116,"text":1730},{"id":1896,"depth":116,"text":404},{"id":2108,"depth":116,"text":407},{"id":2187,"depth":116,"text":410},{"id":2210,"depth":106,"text":418,"children":6232},[6233,6234],{"id":2213,"depth":116,"text":423},{"id":2550,"depth":116,"text":426},{"id":2729,"depth":106,"text":434,"children":6236},[6237,6238,6239,6240],{"id":2822,"depth":116,"text":439},{"id":2904,"depth":116,"text":442},{"id":2958,"depth":116,"text":445},{"id":3020,"depth":116,"text":448},{"id":3068,"depth":106,"text":466,"children":6242},[6243,6244,6245],{"id":3112,"depth":116,"text":471},{"id":3205,"depth":116,"text":3206},{"id":3295,"depth":116,"text":483},{"id":3351,"depth":106,"text":317,"children":6247},[6248,6249],{"id":3668,"depth":116,"text":525},{"id":3758,"depth":116,"text":528},{"id":3777,"depth":106,"text":536,"children":6251},[6252,6253,6254,6255,6256],{"id":3848,"depth":116,"text":541},{"id":3903,"depth":116,"text":3904},{"id":4009,"depth":116,"text":556},{"id":4151,"depth":116,"text":559},{"id":4253,"depth":116,"text":4254},{"id":4338,"depth":106,"text":573,"children":6258},[6259,6260,6261],{"id":4341,"depth":116,"text":578},{"id":21,"depth":116,"text":581},{"id":4427,"depth":116,"text":4428},{"id":4457,"depth":106,"text":595,"children":6263},[6264],{"id":4460,"depth":116,"text":600},{"id":4872,"depth":106,"text":616,"children":6266},[6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277],{"id":4875,"depth":116,"text":4876},{"id":4909,"depth":116,"text":4910},{"id":5101,"depth":116,"text":5102},{"id":5147,"depth":116,"text":5148},{"id":5339,"depth":116,"text":5340},{"id":5564,"depth":116,"text":5565},{"id":5607,"depth":116,"text":5608},{"id":5635,"depth":116,"text":5636},{"id":5657,"depth":116,"text":5658},{"id":5674,"depth":116,"text":5675},{"id":5704,"depth":116,"text":5705},{"id":5723,"depth":106,"text":621},{"id":6183,"depth":106,"text":6184},"Every function a report can write in its expressions, family by family:\nwhat it takes, what it gives, what it does with a missing value, and an example on the\nsample data with the result it prints. The language itself (fields in brackets, texts\nin double quotes, &, the operators) is in Reports: expressions.","md",{"source":6283},"docs\u002Fcapabilities\u002Freport-functions.md",true,"\u002Fdocs\u002Fcapabilities\u002Freport-functions",{"title":5,"description":6280},"docs\u002Fcapabilities\u002Freport-functions","GX2YxXIvmmXX9T3qfI718CbcZOjwtW2PuRLzQBCmXsE",[6290,6308,6357,6389,6421,6450,6476,6502],{"title":6291,"icon":3573,"intro":6292,"items":6293},"Getting started","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[6294,6296,6299,6302,6305],{"path":6295,"title":6291},"\u002Fdocs\u002Fgetting-started",{"path":6297,"title":6298},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":6300,"title":6301},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":6303,"title":6304},"\u002Fdocs\u002Fconcepts","Concepts",{"path":6306,"title":6307},"\u002Fdocs\u002Foverview","Overview (README)",{"title":6309,"icon":6310,"intro":6311,"items":6312},"Capabilities","capabilities","What you can build: visual flows, analysis on any step, AI questions, pixel-perfect reports, dashboards, Python, R and SQL scripts, containers and the orchestration that ties them together.",[6313,6316,6319,6322,6325,6326,6327,6330,6333,6334,6337,6340,6343,6346,6349,6351,6354],{"path":6314,"title":6315},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":6317,"title":6318},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":6320,"title":6321},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":6323,"title":6324},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":20,"title":6191},{"path":6285,"title":5},{"path":6328,"title":6329},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":6331,"title":6332},"\u002Fdocs\u002Fscripting","Python and R",{"path":6208,"title":6209},{"path":6335,"title":6336},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":6338,"title":6339},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":6341,"title":6342},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups: orchestration",{"path":6344,"title":6345},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":6347,"title":6348},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":3843,"title":6350},"Dynamic dates",{"path":6352,"title":6353},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":6355,"title":6356},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":6358,"icon":6359,"intro":6360,"items":6361},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[6362,6365,6368,6371,6374,6377,6380,6383,6386],{"path":6363,"title":6364},"\u002Fdocs\u002Fsources","All sources",{"path":6366,"title":6367},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":6369,"title":6370},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":6372,"title":6373},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":6375,"title":6376},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":6378,"title":6379},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":6381,"title":6382},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":6384,"title":6385},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":6387,"title":6388},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":6390,"icon":6391,"intro":6392,"items":6393},"Connections","connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[6394,6397,6400,6403,6406,6408,6409,6411,6412,6415,6418],{"path":6395,"title":6396},"\u002Fdocs\u002Fconnections","All connections",{"path":6398,"title":6399},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":6401,"title":6402},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":6404,"title":6405},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":6375,"title":6407},"SFTP servers",{"path":6378,"title":6379},{"path":6381,"title":6410},"SharePoint",{"path":6384,"title":6385},{"path":6413,"title":6414},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":6416,"title":6417},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":6419,"title":6420},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":6422,"icon":6423,"intro":6424,"items":6425},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[6426,6429,6432,6435,6438,6441,6444,6447],{"path":6427,"title":6428},"\u002Fdocs\u002Fintegrations","All integrations",{"path":6430,"title":6431},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":6433,"title":6434},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":6436,"title":6437},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":6439,"title":6440},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":6442,"title":6443},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":6445,"title":6446},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":6448,"title":6449},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":6451,"icon":6452,"intro":6453,"items":6454},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[6455,6458,6461,6464,6467,6470,6473],{"path":6456,"title":6457},"\u002Fdocs\u002Fgovernance","Overview",{"path":6459,"title":6460},"\u002Fdocs\u002Fgovernance\u002Fpermissions","Permissions",{"path":6462,"title":6463},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":6465,"title":6466},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":6468,"title":6469},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":6471,"title":6472},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":6474,"title":6475},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":6477,"icon":6478,"intro":6479,"items":6480},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[6481,6484,6487,6490,6493,6496,6499],{"path":6482,"title":6483},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":6485,"title":6486},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":6488,"title":6489},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":6491,"title":6492},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":6494,"title":6495},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":6497,"title":6498},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":6500,"title":6501},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":6503,"icon":6504,"intro":6505,"items":6506},"Reference","reference","Release process and the remaining reference pages.",[6507],{"path":6508,"title":6509},"\u002Fdocs\u002Frelease-process","Release process",1793656371567]