@loubym , You can force ordering by projecting out individual customDimentions fields as separate columns in the query by adding 'project' or 'extend' clause in the query pane (in upper part of the log query screen your are viewing). The reason default view of customDimesions field shows random order because it's a json type created out of the dictionary at lower level which does not guaranty ordering.
In this case, the query would be like:
customEvents
| project timestamp, Title = tostring(customDimensions.Title), UserName = tostring(customDimensions.UserFullName) // add any other fields you want
| order by timestamp desc, Title // just an example of result order, adjust as per your need
Below is a query result in my case:
If you want to maintain the columns in default result, and want to appends columns for the customDimensions fields, you can use 'extend'.
customEvents
| extend Title = tostring(customDimensions.Title), UserName = tostring(customDimensions.UserFullName) // add any other fields you want
| order by timestamp desc, Title // just an example of result order, adjust as per your need
Refer Overview of log queries in Azure Monitor for 'Kusto Query Language'.
NOTE: In all the above queries, we are ordering on a 'custom' dynamic fields in customDimesions which requires to specify datatype conversion like in this case since these are string fields, I had to use 'tostring'. If it were some other types like int, double etc. we need to use respective function. But for any other fixed field in the log like for example timestamp, we won't need any conversion function.
customEvents
| project timestamp, name
| order by timestamp desc