[Canonical page](<https://docs.dhtmlx.com/planning-engine/net/api/core/project/analyze-options/>)
[Full documentation index](<https://docs.dhtmlx.com/planning-engine/llms.txt>)


# AnalyzeOptions

Options for [`Project.Analyze`](<https://docs.dhtmlx.com/planning-engine/net/api/project-analyze.md>). They select the analytics that fill [`ScheduleResult.Analytics`](<https://docs.dhtmlx.com/planning-engine/net/api/core/results/schedule-result.md>). `new AnalyzeOptions()` requests no analytics.

## Declaration

```csharp
public sealed class AnalyzeOptions : IDeepCloneable<AnalyzeOptions>
{
    public AnalyticsOptions Analytics { get; set; } = new();

    public AnalyzeOptions DeepClone();
}
```

Set the property with an object initializer: `new AnalyzeOptions { Analytics = new AnalyticsOptions { Slack = true } }`.

## Properties

| Property | Type | Default | Description |
|---|---|---|---|
| `Analytics` | [`AnalyticsOptions`](<https://docs.dhtmlx.com/planning-engine/net/api/core/project/analytics-options.md>) | `new()` (no analytics) | Requests critical path and slack. Fills [`ScheduleResult.Analytics`](<https://docs.dhtmlx.com/planning-engine/net/api/core/results/schedule-result.md>). |

### Analytics

```csharp
public AnalyticsOptions Analytics { get; set; } = new();
```

Turns on [`AnalyticsOptions.Slack`](<https://docs.dhtmlx.com/planning-engine/net/api/core/project/analytics-options.md>) and [`AnalyticsOptions.CriticalPath`](<https://docs.dhtmlx.com/planning-engine/net/api/core/project/analytics-options.md>). With both flags `false` (the default), `ScheduleResult.Analytics` is `null`. With either flag set, it holds an [`Analytics`](<https://docs.dhtmlx.com/planning-engine/net/api/core/results/analytics.md>) value; check its `Status` before reading the data.

## Methods

### DeepClone

```csharp
public AnalyzeOptions DeepClone()
```

Returns a copy that shares no nested object (`Analytics`) with this one.

## Example

```csharp
using Plen;

var monday = Moment.FromYmdHm(2026, 1, 5, 8, 0) ?? throw new InvalidOperationException("invalid date");

var data = new ProjectData
{
    Tasks =
    [
        new TaskData("design") { StartDate = monday, Duration = 2.0 },
        new TaskData("build") { StartDate = monday, Duration = 3.0 },
    ],
    Links = [new LinkData { Id = "l1", Source = "design", Target = "build" }],
};

var options = new AnalyzeOptions
{
    Analytics = new AnalyticsOptions { CriticalPath = true, Slack = true },
};

var project = new Project();
var result = project.Analyze(data, options);

if (result.Analytics is { Status: AnalyticsStatus.Available, Slack: { } slack })
{
    foreach (var s in slack)
        Console.WriteLine($"{s.Task}: total {s.Total}, free {s.Free}");
}
```

## Related

- [`Project.Analyze`](<https://docs.dhtmlx.com/planning-engine/net/api/project-analyze.md>) - the call these options configure
- [`AnalyticsOptions`](<https://docs.dhtmlx.com/planning-engine/net/api/core/project/analytics-options.md>) - the analytics flags
- [`Analytics`](<https://docs.dhtmlx.com/planning-engine/net/api/core/results/analytics.md>) - the analytics returned in the result
- [Critical path and slack](<https://docs.dhtmlx.com/planning-engine/net/scheduling/critical-path-and-slack.md#analyzing-without-scheduling>) - analyzing without scheduling
