# wire.data.DataModel

Using a data model is a convenient way to share meta data about the structures in a data services across all queries. &#x20;

## Field Properties

| Name   | Description                                                                                                                                                                                                                      |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Alias  | Used to register a friendly name for the field used in components and other UI containers                                                                                                                                        |
| Calc   | Creates a new calculated column on the [datatable](https://docs.wirebootstrap.com/wirebootstrap/reference/wire.data/wire.data.datatable) returned by the data source.  See [Calculated Columns](#calculated-fields) for details. |
| Entity | Identifies the entity or table in the data service                                                                                                                                                                               |
| Name   | Identifies the field name in the data service                                                                                                                                                                                    |
| Format | The [formatting](/wirebootstrap/utilities/untitled.md) specification for the field                                                                                                                                               |

The example below sets up a data model on a data source.  Alias names for labels and formatting are set up for fields in the data service.  This meta data will automatically be applied to all fields in result sets for any query executed using the data source.  As such they can automatically be leveraged by any components or other UI elements displaying the result sets.

```javascript
const model = new wire.data.DataModel({
    Fields: [
        { Entity: "Metrics", Name: "cost_amt", Alias: "Cost", Format: "C2" },     
        { Entity: "Product", Name: "line_no", Alias: "Line" },
        { Entity: "Time", Name: "week_start_date", Alias: "Week", Format: ((value) => {
                return moment(value).format("MM/DD");
            })
        }
    ]
});

const source = new wire.data.DataSource("table", {
    ...
    Model: model
});
```

### Entity Wildcards

Wildcards (`*`) can be used with a field's `Entity` property to apply the field model data to any field in any entity containing the field `Name`.

The example below will result in any field called `Sales` in any entity to be formatted as currency and with two decimal places.

```javascript
const model = new wire.data.DataModel({
    Fields: [
        { Entity: "*", Name: "Sales", Format: "C2" }
    ]
});
```

## Calculated Columns

The example below creates a new calculated column called `ProfitMargin` on the resulting datatable that is returned from any query that contains the entity `Metrics`.  The calculation uses the existing `Sales` and `Cost` columns on the table to return the value for the new calculated column.

```javascript
const model = new wire.data.DataModel({
    Fields: [
        { Entity: "Metrics", Name: "ProfitMargin", Format: "P0", Calc: (row) => {        
            return ((row.Sales-row.Cost)/row.Sales);
        }}             
    ]
});

const source = new wire.data.DataSource("table", {
    ...
    Model: model
});

const query = wire.data.select("Sales", "Cost").from("Metrics");

const table = await source.execAsync(query);
```

For more examples, visit [DataSource DataModels](/wirebootstrap/connecting-to-data/data-sources.md#data-models).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wirebootstrap.com/wirebootstrap/reference/wire.data/wire.data.datamodel.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
