Subscribe to this thread
Home - General / All posts - ViewBots in M9
dchall8
578 post(s)
#11-Feb-19 23:21

A couple of my people asked if I could label the soils parcels in our office database system so they could type the values into a spreadsheet and calculate the potential livestock stocking rate.

Quick background: each type of soil from rubble to loamy clay can grow a certain amount of forage per acre. We have a soil map with those numbers, and we have acreage, and we know it takes 10,000 pounds of production to support 1 Animal Unit. 1 AU is defined elsewhere beyond the scope of this. By running the math we can determine how many AU a rancher should have on his property to justify a special appraisal. If he does not have that many AU, then he's not serious and will not get the special appraisal.

I decided that process was too mechanical and fraught with peril, so I included the calculations in M8 to use with ViewBots. It looks great in M8 and gives them a picture they can save, but they don't have M8 and aren't likely to get it. M9 Viewer would be perfect but no ViewBots yet.

This image shows all the soil types, production values, and AU potential for each type of soil in a 168-acre parcel. The ViewBot sums the values in the selected properties.

It turns out that taking this out of Manifold to our office GIS (emasculated ESRI), the process goes back to a manual one where they have to do the addition even though the calculations are done. I would like to hook the users up with M9 Viewer, but there is still no ViewBot ability. I don't think it's kosher to ask when something is going to happen in a beta development, but I'm walking the line between teaching them one way and then changing it or holding off teaching them how to do it while waiting for the really cool way to come about.

Is this something I should take up with the ESRI support folks, or is it possible that ViewBots are in the near future in M9? This is not urgent, but it has high level attention.

Attachments:
AU calculation in ViewBots.jpg

lionel

560 post(s)
#12-Feb-19 00:32

from manifold 8 documentation

ViewBot Operators

View - Panes - ViewBots

ViewBots


join image

"Because my dad promised me" ( interstellar ) but blackhole don't exist

best hardware with no ads focus on quality features price like manifold see xiaomi

Dimitri


5,359 post(s)
#12-Feb-19 08:28

Pretty much anything you can do in a Viewbot you can do in a query in 9, and you can also do a whole lot more. Keep in mind you can create tables and drawings from queries, which of course also means you can create labels from queries. See the Example: Create a Drawing from a Query topic.

So you could have a map where depending on what they enter into a table or what they select the resulting drawings change, and even where the resulting label layers change, for example, to print out as a label in the map window the result of some computed field expression. Can't do that in 8, where they have to look at the viewbot readout to see a result. The worst case is that after changing something they might have to click Refresh to have the display update. Create the project in 9 and all of that will work in Viewer too.

dchall8
578 post(s)
#13-Feb-19 17:34

As I show my people what I can do, they are evolving what they want. They really like the idea of a spreadsheet "to show the calculations." Never mind that the calculations don't show. They were skeptical of the calculations when I showed it to them in Manifold. Weird. So I did the calculations in M8 and copied the table to Excel. They seem happier with Excel. Here's what that looks like...

Excel works fine to filter down to the ID number level and use the SUBTOTAL function in row 1 to get the calculated numbers they need. They plan to screenshot that as I did and create a PDF file linked to the appropriate account in our office database. They also want an image of the parcels from the map. Google Earth does not lend itself to this imagery. They like the way the colors show through in M8, but they do not like the way the colors are entirely pinked out in M9 Viewer (ref images in this forum topic).

So you could have a map where depending on what they enter into a table or what they select the resulting drawings change, and even where the resulting label layers change, for example, to print out as a label in the map window the result of some computed field expression. Can't do that in 8, where they have to look at the viewbot readout to see a result.

Although they were skeptical of the computations at first, they did like seeing the results combined into the M8 Viewbots pane.

Attachments:
Spreadsheet showing Ag information.jpg

dchall8
578 post(s)
#14-Feb-19 22:46

I've taken this a little bit further, but I'm not where I want to be. What I want is totals and what I've settled for so far is subtotals in the table where the highest subtotal is also the total. But even the subtotal field is not populated the way I expected. Here's the image of the table...

Here's the Query

-- $manifold$

--

-- Auto-generated

-- Transform - Add - Update Field

--

PRAGMA ('progress.percentnext' = '100');

UPDATE (

  SELECT [mfd_id],

    [Subtotal],

    [AU] + [AU] AS [n_Subtotal]

  FROM CALL Selection([Soils Table]TRUE)

  THREADS SystemCpuCount()

SET [Subtotal] = [n_Subtotal];

The records are filtered by owner name and then sorted on PROP_ID first and AU second. Records are selected by the PROP_ID number. Then the query is run to add the value in AU to the previous sum of of AU values. Looking at the subtotal field as it is populated by the query, the numbers do not add up the way I expected. What I expected was to see the AU from each record added to the sum of all the previous records. A quick inspection shows that isn't the case. I don't see a way to sort the records that would make the list in the order shown in the subtotal field.

Also the query that Manifold writes performs the update on the records. How do I modify the query so as to not update and have those values disappear when different records are selected? I still like the way Viewbots work in M8, so I'm trying to replicate something like that.

And one last question, is it possible to rearrange the fields from left to right? I thought that feature would be in the Schema, but that supposedly only works for new fields...although I did not find it to work for new fields either.

Attachments:
M9 Subtotal Table.jpg

tjhb

8,657 post(s)
#14-Feb-19 23:40

Then the query is run to add the value in AU to the previous sum of of AU values.

Well, your query does not do that. There is no concept of "previous sum" in the query.

Consider the line

[AU] + [AU] AS [n_Subtotal]

What is the value of [AU] + [AU]? It is twice the value of [AU], for the current record. Exactly the same as 2 * [AU]. There is no reference to any other record.

But it is more complicated than adding a join to the previous record, as you could do in Manifold 8. In 9, records are not ordered. Their content is not evaluated (or updated) in any defined order, except by accident. Assume that they are accessed and updated randomly.

For Manifold 9, a running total needs a COLLECT construct. [Correction: "needs" is too strong. It can be done without that.]

If you post example data, I or someone else can show how to do it for Manifold 9.

tjhb

8,657 post(s)
#15-Feb-19 00:02

More succinctly:

Because there is no inherent order between records in Manifold 9, a running total needs to reference all preceding records, not just one.

(This is actually standard. The Manifold 8 approach worked in practice, but not in SQL theory.)

dchall8
578 post(s)
#15-Feb-19 16:47

Very helpful and motivating, thanks. That certainly explains why the numbers weren't coming out right.

After going back to the drawing board, I think I have exactly what I wanted with a Viewbot(ish) looking panes. By detaching all the elements and rearranging, I can make images like this.

The two queries are as follows...

SELECT

  [PROP_ID],

  RoundDecs(sum([Acreage]),2) as Acres, RoundDecs(sum([Acreage]*[Dry-Weight Production Lbs per Acre]),0) as DryPounds, RoundDecs(sum([AU]),2) as AnimalUnits

 

  FROM CALL Selection([Soils Table]TRUE)

GROUP BY [PROP_ID];

--and to make a grand total row

SELECT

  [file_as_name] as OwnerName,

  RoundDecs(sum([Acreage]),2) as Acres, RoundDecs(sum([Acreage]*[Dry-Weight Production Lbs per Acre]),0) as DryPounds, RoundDecs(sum([AU]),2) as AnimalUnits

 

  FROM CALL Selection([Soils Table]TRUE)

GROUP BY [file_as_name] ;

Is there a way to make the total values appear at the bottom of the subtotal tables all in one query?

Attachments:
M9 Subtotal and Total Table.jpg

KlausDE

6,300 post(s)
#15-Feb-19 17:13

Yes. I insert results into a table and insert the total in a next step. As I often analyse selected regions I can use the query repeatedly and export results for a propperly formated Excel sheet. If you link the export in a second and fixed Excel sheet you don't need to repeatedly set formats, number of decimals, frames, multilined headings again and again.

dchall8
578 post(s)
#15-Feb-19 19:28

That's good news. Can you please elaborate on how to make the total into a next step? Simply putting a space between one select and the other is not the answer.

Regarding Excel: There are 64,000 records in the Soils Table. I have tried running filters in Excel and it doesn't like that many records. It is possible to use, but I'm not the one using it. If my boss sees "Not all rows are showing" in red text, she's going to fold her arms and back away. Manifold doesn't care about 64,000 records. That's why I brought the entire db into Manifold. Plus I didn't want the appraisers to be able to break the file. Excel formulas are easy to break.

This is the perfect applet for Manifold Viewer. Plus it gets my people using Manifold Viewer, which is what I would like them to use on a daily basis instead of Google Earth. Ten minutes ago the ag appraiser was afraid of it. Now she's giddy with excitement over the prospect of never having to hand write the old calculations with the associated scanning scratch notes to jpg. Plus she has the bonus of a map of the property being analyzed.

tjhb

8,657 post(s)
#15-Feb-19 20:48

You can UNION the two results together.

--SQL9

SELECT

    [file_as_name] AS OwnerName,

    [PROP_ID],

    RoundDecs(SUM([Acreage]), 2) AS Acres, 

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0) AS DryPounds,

    RoundDecs(SUM([AU]), 2) AS AnimalUnits

FROM CALL Selection([Soils Table], TRUE)

GROUP BY [PROP_ID]

UNION ALL

SELECT

    [file_as_name]-- OwnerName

    CAST(NULL AS INT32), -- PROP_ID (NB match data type)

    RoundDecs(SUM([Acreage]), 2), -- Acres 

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0), -- DryPounds

    RoundDecs(SUM([AU]), 2) -- AnimalUnits

FROM CALL Selection([Soils Table], TRUE)

GROUP BY [file_as_name]

;

For UNION to work, the fields in the tables must match in number and in data type. That is the reason for including [file_as_name] above (you could substitute an empty string), and for including a NULL PROP_ID value below (you should check the required data type). Alternatively, you could combine these into one field, if you don't mind returning PROP_ID as a string.

Field aliases should only appear in the first table. They are ignored in subsequent tables, even if you make an error, so it is better to omit them (possibly with a comment to help readability).

Generally use UNION ALL rather than just UNION, unless you need to exclude duplicates. (It is faster not to check for duplicate records, just return everything.)

KlausDE

6,300 post(s)
#15-Feb-19 22:37

Here is another solution that outsources the final formating to Excel. It may be easier to copy results into documents this way.

Open the project.map in manifold32. There is a map to manually select what you need and a query [query] that stores results in a [Soils Group Table].

There is a little inconvenience in 9.0.168.8 in that the result table seems to be empty when you run the query from project pane or if you comment out the last SELECT statement in the query.

Yet everything is there as you can see if you just copy/paste the result table. It's only a missing refresh of the table window and I guess just the current state of development.

So simply export the [Soils Group Table] using the default name'Soils Group Table.xls'

Now you can open this file in Excel and additionally open 'Soils Group final.xlsx'. You will find the export in the a formating once and for ever prepared in this file and ready for delivery.

There is not much use in cutting off decimal places in manifold as long as you want numeric values to be numeric values. In the example I have used FLOAT32 data type because it is so sensitive but FLOAT64 is not much better for human readability. That's why I leave this to Excel completely.

Aliases are not necessary here. The serie of fields in the INSERT handels this.

A final note: the query starts dropping the previous result so that it can be recreated. If there is no result table than the query stops with a not very verbose error.

Attachments:
Soils Group final.xlsx
Soil_Totals_and_Subtotals.mxb

tjhb

8,657 post(s)
#15-Feb-19 22:50

There is a little inconvenience in 9.0.168.8 in that the result table seems to be empty when you run the query from project pane or if you comment out the last SELECT statement in the query.

Dan and I have reported this Klaus. (I've just forwarded you the report.)

It applies to any table or drawing that it is open when a query is used to drop then and recreate it. The window becomes orphaned, and does not find its new parent until it is closed then reopened.

(It applies whether the query is run from the Project pane or its own window. I don't think the last statement in your query is material, but could be wrong.)

adamw


8,447 post(s)
#19-Feb-19 07:41

We'll fix that. Thanks for the report, we agree it is annoying.

KlausDE

6,300 post(s)
#15-Feb-19 22:50

BTW you can see the System Data folder pinned as the first folder in alphabethic order. So it will not get lost in all the folders that you create.

This is done simply by prepending a non-printable character in the german UI file.

adamw


8,447 post(s)
#19-Feb-19 07:44

On a leading non-printable character - it might be better to change it to a printable character. What if someone wants to sort above System Data? The non-printable character makes it difficult to understand what's going on and what specifically one has to do to sort above it. Something like '# System Data' would both mostly sort on top without creating puzzles.

KlausDE

6,300 post(s)
#19-Feb-19 21:09

I agree. And you see whats going on and change it as you want to.

However I hope for some flexible sorting mechanims for the project pane, alphabetic or visualizing the relationship between components as outlined here. Then this little trick is only confusing.

dchall8
578 post(s)
#19-Feb-19 22:07

Thank you for the UNION ALL and CAST hints. I need to do some reading on those and watch my comma and semicolon syntax.

The working query needed a very slight change to run, as follows in bold underline...

SELECT

    [file_as_name] AS OwnerName,

    [PROP_ID],

    RoundDecs(SUM([Acreage]), 2) AS Acres, 

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0) AS DryPounds,

    RoundDecs(SUM([AU]), 2) AS AnimalUnits

FROM CALL Selection([Soils Table]TRUE)

GROUP BY [file_as_name], [PROP_ID]

UNION ALL

SELECT

    [file_as_name]-- OwnerName

    CAST(NULL AS INT32), -- PROP_ID (NB match data type)

    RoundDecs(SUM([Acreage]), 2), -- Acres 

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0), -- DryPounds

    RoundDecs(SUM([AU]), 2) -- AnimalUnits

FROM CALL Selection([Soils Table]TRUE)

GROUP BY [file_as_name]

;

So far the boss really likes this. THEN, she threw in something unexpected. Sometimes an owner will have a ranch under several names - meaning, say, three ranch names for adjacent property which they operate as one ranch. Silver Spring Ranch, Bob and Mary Jones Living Trust Ranch, Moon Raker Ranch, for example. We're supposed to know all three have the same owner. It turns out most of the time the mailing address for the ranches are the same. With that in mind I made a couple changes to the above query...

SELECT

    [file_as_name] AS OwnerName,

    [PROP_ID],

    RoundDecs(SUM([Acreage]), 2) AS Acres, 

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0) AS DryPounds,

    RoundDecs(SUM([AU]), 2) AS AnimalUnits ,

    [addr_line2] AS Address

FROM [Soils Table]

WHERE [addr_line2] = '1027 AUSTIN HWY SUITE 200'

--FROM CALL Selection([Soils Table], TRUE)

GROUP BY [file_as_name][PROP_ID][addr_line2]

UNION ALL

SELECT

    [file_as_name]-- OwnerName

    CAST(NULL AS INT32), -- PROP_ID (NB match data type)

    RoundDecs(SUM([Acreage]), 2), -- Acres

    RoundDecs(SUM([Acreage] 

        * [Dry-Weight Production Lbs per Acre]), 0), -- DryPounds

    RoundDecs(SUM([AU]), 2), -- AnimalUnits 

    [addr_line2] --AS Address

FROM [Soils Table]

WHERE [addr_line2] = '1027 AUSTIN HWY SUITE 200'

----FROM CALL Selection([Soils Table], TRUE)

GROUP BY [file_as_name][addr_line2] 

;

This selects all the properties with an address of 1027 AUSTIN HWY SUITE 200. The problem is it's a query and subject to the introduction of typos. I would rather keep the users out of the query especially when a change needs to happen twice. Is there query wording in Manifold to bring up a user input dialog box? I didn't see it in the Fine Manual, but I might not be searching for the correct lingo. Out in the wild I saw the use of the @ and & symbol prefixes to call for input. I tried using Select in the Contents Pane and got unexpected results. I searched for Text Starts with, selected the addr_line2 field, entered 1027 AUSTIN... and got what appeared to be 5 results in the table. The map; however, showed all the results. The table apparently shows only those selected records from the original view limited to 50,000 records. Is that a correct understanding?

adamw


8,447 post(s)
#20-Feb-19 06:56

I searched for Text Starts with, selected the addr_line2 field, entered 1027 AUSTIN... and got what appeared to be 5 results in the table. The map; however, showed all the results. The table apparently shows only those selected records from the original view limited to 50,000 records. Is that a correct understanding?

Yes.

If the table contains more than 50,000 records, the table window will show the first 50,000 and then an extra line with an icon on the left that indicates that there are more records. If you filter the table, eg, using the Select pane + View - Filter - Selected, the table window will show filtered records out of these first 50,000 *plus an extra line that indicates that there might be more records satisfying the filter*. To see all records satisfying the filter, invoke View - Filter - Filter using Query. This will a new window with the filter expressed as a query. Run the query by doing View - Run (or pressing F5) and you will see the first 50,000 records of its results. Alternatively, uncheck View - Filter - Filter Fetched Records Only (checked by default), this will apply the filter to the entire table as well.

This operates the way it does because some tables are super-large. This is not specific to Manifold either, all applications that work with tables limit the output in some way. That said, we agree we could improve things to make the limit get in the way less - we have been thinking about what we could do here and while we don't yet have a good all-around solution, we do have some ideas that should make it better.

Regarding typing the address into the query:

First, you can move the address into a variable (VALUE @addr NVARCHAR = ...; SELECT ... WHERE [addr_line2] = @addr ...). That way whenever you want to change it, you won't have to touch the main statements, it will be safer. Plus you'd only have to change it in a single place, not in two places like now.

More importantly, why provide the specific address? Why not rewrite the query to group by address rather than by owner name?

dchall8
578 post(s)
#20-Feb-19 17:07

Alternatively, uncheck View - Filter - Filter Fetched Records Only (checked by default), this will apply the filter to the entire table as well.

When I uncheck the Filter Fetched Records Only, I get no results. As soon as I uncheck it, the filtered table goes blank. I tried rerunning the filter after unchecking and still get no results.

If I switch to Filter Using Query, that works fine to find the records. It will require a little retraining for my users, but they can handle this. However, when I select the filtered records, they don't appear as selected on the drawing. How do you convert what is found/filtered from the table into selected records in the table and drawing?

What would be handy would be an addition to the dialog menu at the down icon (left edge of the table above the *) where it indicates more findings in the rest of the table. If you could right-click the down icon and have the option to show the first 50,000 results, then the user could select the found records directly in the table, and they would be selected on the drawing.

adamw


8,447 post(s)
#21-Feb-19 07:47

Could you post example data / steps for when checking Filter Fetched Records Only returns no results?

Selecting records in the result table of a query (eg, in a window opened by invoking Filter Using Query) does not select records in the producing table / drawing, because these are different records. Sometimes there's a 1 to 1 correspondence, but frequently not and we do not attempt to detect that for a number of reasons (partly because we don't want some queries selecting records in producing components and others not selecting - that'd create one more black box for users to get puzzled at). You can copy the selected records and you can edit them and the results will be visible in the parent component, but the selections are separate. Maybe we should extend the Select pane to allow taking the selection from a different window - we'll explore that.

dchall8
578 post(s)
#21-Feb-19 15:31

Okay now it's getting interesting. The file I'm using is 274GB. In an attempt to shrink it down to something I could attach here I deleted some tables and drawings and pared down the fields to be saved. Then I tried the filter again to make sure it did not work. But now it works. When I filter with the fetched records only turned off I get all the records which were not showing due to the 50,000 record limit.

Here's the process I used.

  • Open table
  • Click field header for owner name

  • Ctrl-f to find owner name and Close the Find dialog

  • Right-Click the targeted owner name and select Add Filter > file as name =
  • Select View > Filter > Filter Fetched Records Only

    On the full sized file I get no results. On the small file I get the full list of records which are expected. I'm going to work on this some more. Apparently something I did when paring this down fixed the issue. I'll go through that process again slowly and testing along the way to see when it changes and then report back.

  • dchall8
    578 post(s)
    #21-Feb-19 16:37

    It is working now, but.

    This file was originally a M8 file with labels. I opened the file in M9 which imported the labels in the schema. If you scroll back to the top of this topic you can read the way the labels came into M9. The text for the soils label appears in the table as a numeric value instead of text. There's probably a reason for that. When I hovered the pointer over the field name in the table it shows the expression used to make the label.

    And here is the expression if someone wants to go to the trouble of editing it.

    CAST ([PROP_ID] AS NVARCHAR) & '\u000D\u000A' & [Soil Name] & '\u000D\u000A' & CAST ([Dry-Weight Production Lbs per Acre] AS NVARCHAR) & ' Lbs/Acre\u000D\u000A' & CAST ([Acreage] AS NVARCHAR) & ' Acres\u000D\u000A' & CAST ([AU] AS NVARCHAR) & ' Animal Units'

    I did nothing but delete this field from the schema and the filter works. I have opened and closed this several times to be sure that's all I did.

    Next I recreated the label using the expression above. I retried the filter with fetched records only turned off, and the filter did not work. I deleted the new label from the schema and the filter worked properly. The point of this exercise was to see if the imported label acted differently from one created inside M9.

    Next I created a simpler label using CAST ([Dry-Weight Production Lbs per Acre] AS NVARCHAR) as the expression for the label. The label works but the filter with fetched records only turned off stops working.

    Next I created a simpler label using [Dry-Weight Production Lbs per Acre] as the expression for the label. The label works but the filter stops working.

    Next I created a simpler label using 'Label' as the expression for the label. The labels work but the filter stops working.

    It seems as long as there are no labels, the filter works with fetched records only turned off. I can make this work without the labels, but the users really want the labels to appear on the selected parcels.

    Attachments:
    Screenshot of M9 Label Expression.jpg

    adamw


    8,447 post(s)
    #21-Feb-19 17:04

    Very interesting.

    Thanks for taking the time to check and report, we'll investigate what's going on.

    dchall8
    578 post(s)
    #21-Feb-19 20:43

    It occurred to me that I did not run the trivial case. Just now I created a new field for labels and left it blank. Everything works. I created an nvarchar field which is called by the Soil Labels element. No problem filtering with the Filter Fetched Records Only toggled off.

    dchall8
    578 post(s)
    #08-Mar-19 18:39

    Now that 168.10 is out, I tried running the filter with non-null labels and Filter Fetched Records Only = off and got the same return of zero records. Were you able to duplicate the issue? If so, does this look like a longer term issue to repair?

    adamw


    8,447 post(s)
    #09-Mar-19 07:56

    We have been able to reproduce the issue. Turning off Filter Fetched Records Only produces an empty table if there are any computed fields. We will fix this.

    Dimitri


    5,359 post(s)
    #21-Feb-19 17:20

    The file I'm using is 274GB.

    Can't resist. I have nothing to add to the technical discussion, but I just think it's cool that here we are talking about a 274 GB file like that's just a normal thing that should be handled with zero issues. That sure wasn't the case with Release 8, and I seriously doubt that if we were talking about using ArcGIS Pro, which I think is pretty darned good software, that we'd be so casually discussing a 274 GB data set as a geodatabase or whatever. Talk about expectations moving up! :-)

    dchall8
    578 post(s)
    #21-Feb-19 19:14

    247GB. Oops! My bad. It's 247MB. Still can't email it around. And 64,000 parcels plus another table with 35,000 is nothing to scoff at. M9 is very speedy with it. I'm fairly certain that this labels thing will not be a permanent glitch.

    My user in the next room is very enthusiastic about using Manifold Viewer for this. Prior to this they used a Google Earth layer I created. It seemed great at the time simply because it was visual. They still had to do the calculations manually or in Excel. Documenting the result was hit or miss. They avoided doing this part of their job, because it was tedious. With M9 it is a simple process (opening the elements and rearranging the windows to make a collage of the map, table, and query results) - No manual calculations necessary. They make a Greenshot of the windows and attach that image to the owner's account. I like them using it because with Viewer they can't permanently damage the master file.

    The proof of this pudding is in the eating. The other guy who will use this is not that computer savvy, but he seems willing enough to figure it out when necessary.

    adamw


    8,447 post(s)
    #20-Feb-19 07:11

    ...Third, if you want to pop up a form and ask for an address, then run the query with the specified address, this has to be done using a script. The easiest is perhaps to use .NET and Windows Forms. The script can create a query which you can then run - we'll extend the API to allow opening a command window and putting the query text into it.

    adamw


    8,447 post(s)
    #19-Feb-19 07:40

    Tim pointed out the issue: the query, as written, does not do cumulative sum.

    My contribution: we are planning to bulk up the query engine with a couple of constructs that will make it much easier to do cumulative sums and similar things in the future. You can do cumulative sums now as well, but that's not very simple (I personally find it simpler to write a script function that takes a table and replaces values in a particular field with their cumulative sum or whatever - it's not terrible, but not perfect either).

    Manifold User Community Use Agreement Copyright (C) 2007-2017 Manifold Software Limited. All rights reserved.