Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Function CalcStandardDeviationServiceLevel 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Calculate the standard deviation of this service level 
 | 
    achievedservicelevels := construct( Reals ); 
 | 
     
 | 
    // Traverse all Iterations' Simulations 
 | 
    traverse( this, Iteration.Simulation, simulation ) 
 | 
    { 
 | 
      totaldemand := 0.0; 
 | 
      totalunfulfilleddemand := 0.0; 
 | 
       
 | 
      // Traverse all SimulationPISPIP that belongs to the current Simulation 
 | 
      traverse( this, IterationPISPIP.SimulationPISPIP, simpispip, 
 | 
                simpispip.Simulation() = simulation ) 
 | 
      { 
 | 
        // Add the SalesDemandQty & UnfulfilledDemandQty of the current SimulationPISPIP to the total variable respectively 
 | 
        totaldemand := totaldemand + simpispip.SalesDemandQty(); 
 | 
        totalunfulfilleddemand := totalunfulfilleddemand + simpispip.UnfulfilledDemandQty(); 
 | 
      } 
 | 
       
 | 
      // Default simulation service level to 100 
 | 
      simservicelevel := 100.0; 
 | 
      // Check if the current simulation has total demand larger than zero 
 | 
      if( totaldemand > 0.0 ) 
 | 
      { 
 | 
        // Calculate the simulation service level 
 | 
        simservicelevel := 100 * ( 1.0 - totalunfulfilleddemand / totaldemand ); 
 | 
      } 
 | 
       
 | 
      // Add the simulation service level to the set 
 | 
      achievedservicelevels.Add( simservicelevel ); 
 | 
    } 
 | 
     
 | 
    // Calculate the standard deviation of this service level with the set of achieved service levels 
 | 
    averageservicelevel := average( achievedservicelevels, Elements, sl, sl ); 
 | 
    nrsimulations := achievedservicelevels.Size(); 
 | 
    standarddeviation := 0.0; 
 | 
    if( nrsimulations > 0 ) 
 | 
    { 
 | 
      standarddeviation := sqrt( sum( achievedservicelevels, Elements, sl, 
 | 
                                      pow( sl - averageservicelevel, 2.0 ) ) 
 | 
                                 / achievedservicelevels.Size() ); 
 | 
    } 
 | 
     
 | 
    this.StandardDeviationServiceLevel( standarddeviation ); 
 | 
  *] 
 | 
} 
 |