IMPROVEKIT
Scripting API
IHDSL Commands
average
fieldName | unaryMessage
Returns the average value of the given numeric field. If you want to access the scalar value using averageValue
Examples
data average effort
buckets
buckets
fieldName | unaryMessage
Class intervals (frequency) given field (numeric)
Examples
| filtro proyecto |
filtro := data omitExtremes insumido.
proyecto := filtro distinct proyecto anyOne proyecto.
(filtro where proyecto: proyecto) buckets insumido
centiles
centiles
fieldName | unaryMessage
Returns ten percentile values for the given field
Examples
| centiles ds |
ds := data omit insumido.
centiles := ds centiles insumido.
ds select
defaults: [:row | row centil: #insumido on: centiles]
as: 'centil'
chiSquare
chiSquare
fieldName | unaryMessage
Returns chi squared frequencies (theoretical) of the given field (numeric)
Examples
| filtro proyecto |
filtro := data omitExtremes insumido.
proyecto := filtro distinct proyecto anyOne proyecto.
(filtro where proyecto: proyecto) chiSquare insumido
cumAverage
cumAverage
fieldName | unaryMessage
Returns the cumulative average of the given numeric field
Examples
data cumAverage items
cumSum
cumSum
fieldName | unaryMessage
Returns the accumulated sum of the numeric field given
Examples
data cumSum items
distinct
distinct
fieldName | unaryMessage
It returns the data as a single assembly as given field
Examples
data distinct proyecto
fuzzy
fuzzy
fieldName | unaryMessage
Returns fuzzy values domino considering a real between 0 .. 1, and a default triangular function {0 0.5 1}
Examples
(data kpi: 'RequirementsChangesRatio')
data fuzzy value where isHigh
gini
gini
fieldName | unaryMessage
The Gini coefficient measures inequality between the values of a frequency distribution. A Gini coefficient of zero expresses perfect equality where all values are the same. A Gini coefficient of one (or 100%) expressed high inequality between values. Especially useful in distributions with skewness runs normal
Examples
data gini insumido
groupBy
groupBy
fieldName | unaryMessage
| defaults
| field: fieldNameN [as: 'aliasN']..., N = 1..6
| field: aBlockN [as: 'aliasN']..., N = 1..6
Returns the data grouped by a series of fields and expressions. Each row of the result is a result group.
There are several ways, the first allows grouping by a single field.
The reserved word defaults refers to a specific set of predefined fields (project, nameRelease, dateRelease).
The last form (field: as :) allows grouping by up to 6 different fields, with optional aliases. Optionally, select: as: an additional field resulting from an expression with alias
Examples
data groupBy proyecto.
data groupBy defaults.
data groupBy field: 'proyecto' as: 'p'.
data groupBy field: 'proyecto' as: 'p' field: 'nombreRelease' as: 'r'.
data groupBy field: 'proyecto' as: 'p' field: 'nombreRelease' as: 'r' select:[:e|e count] as: 'items'.
data groupBy defaults select defaults: [:group| group count] as: 'items'.
data groupBy periodo.
data groupBy
field: #tipoProyecto as: 'tipo'
field: [:row| self aggregatedPeriodDateOf: row] as: 'fecha'.
data groupBy
field:#proyecto as: 'proyecto'
select: [:r| r count] as: 'items'.
((data where proyecto: 'NAME')
and tipo: 'TYPE')
groupBy defaults select defaults: [:g | g count] as: 'items'
hurst
hurst
fieldName | unaryMessage
Hurst exponent is used as a measure of long term memory time series. Refers to the autocorrelations of the time series, and the speed at which this decrease as the gap between pairs of values increases. Returns the Hurst exponent slope of the line as a linear series of rescaled range (10 logarithmic scale).
The persistence (positive correlation) allows modeling phenomena that tend to cluster first one way and then the average across while antipersistence (negative correlation) allows modeling phenomena that strongly fluctuate around the mean. Persistence is associated with stable structures with high probability of fulfilling specific functions, while antipersistence relates to unstable structures that seek functionality
Examples
data hurst duracionEstimada
kurtosis
kurtosis
fieldName | unaryMessage
Kurtosis is a measure of whether the data are peak or flat relative to a normal distribution. That is, data sets with high kurtosis tend to have a distinct peak near the mean, decline rather rapidly, and have heavy tails. Data sets with low kurtosis tend to have a flat top near the mean rather than a sharp peak. A uniform distribution would be the extreme case. The kurtosis of a standard normal distribution is three. The histogram is an effective way to show both the skewness and kurtosis of a dataset graphical technique.
Examples
| ds centiles |
ds := data omit insumido.
centiles := ds centiles insumido.
(ds where
each: [:row | (row centil: #insumido on: centiles)
= 3]) kurtosis insumido
limits
limits
fieldName | unaryMessage
In statistical quality control, the X / moving range chart is a type of control chart used to monitor the data variables of a business or industrial process for which it is impractical to use rational subgroups.
The "graphic" actually consists of a couple of them: one shows the individual measured values; secondly, the moving range chart shows the difference from one point to another. As with other control charts, these two graphs allow the user to control a process for process changes that alter the mean or variance
Examples
|kpi project panelData shewhart |
kpi := data kpi: 'ReleaseEffortMeasurement'.
project := data project: 'LAS MAJAGUAS'.
panelData := (((kpi data where tipoProyecto: project type) groupBy
field: #tipoProyecto
as: 'proyecto'
field: [:row | row weekly]
as: 'periodo'
field: [:row | row firstDateOfWeek]
as: 'fecha') select
defaults: [:group | kpi isRatio
ifTrue: [group average value]
ifFalse: [group sum value]]
as: 'value')
sortedBy: #fecha.
shewhart := panelData limits value.
shewhart parameters.
Ver también #signals (en el ejemplo se observará la forma de obtener los mismos datos utilizando protocolo de KPI)
log
log
fieldName | unaryMessage
Logarithmic log-lin series (x values are linear, logarithmic and y values).
There are two main reasons for using logarithmic scales in graphs. The first is to manage the asymmetry (skewness) towards graneds values; That is, cases where one or more points are much larger than most of the data. The second is to show the percent change or multiplicative factors.
Examples
data log valor plot.
data log valor y limits plot
max
max
fieldName | unaryMessage
Returns the maximum value of a field (magnitude)
Examples
data max duracion
median
median
fieldName | unaryMessage
Returns the median value of the given numeric field. If you want to access the scalar value using medianValue
Examples
data median effort
min
min
fieldName | unaryMessage
Returns the minimum value of a field (magnitude)
Examples
data min duracion
mode
mode
fieldName | unaryMessage
Returns the mode given numeric field. If you want to access the scalar value use modeValue
Examples
data mode items
movingRange
movingRange
fieldName | unaryMessage
Moving range (difference between two successive values of a series)
Examples
| filtro proyecto |
filtro := data omit insumido.
proyecto := filtro distinct proyecto anyOne proyecto.
(filtro where proyecto: proyecto) movingRange insumido
normalityChiSquareTest
normalityChiSquareTest
fieldName | unaryMessage
Null hypothesis that the frequency distribution of certain events observed in a sample is consistent with a particular theoretical distribution is tested. The events considered must be mutually exclusive and have total probability 1.
The chi square test of Pearson is used to assess two types of comparison: tests of goodness of fit and independence tests.
A goodness of fit test determines whether or not an observed frequency distribution differs from a theoretical distribution.
A test of independence assesses whether paired observations on two variables, expressed in a contingency table are independent of each other (eg, voting responses of people of different nationalities, to see if nationality is related to the response )
Examples
data omitExtremes normalityTest esfuerzo
omit
omit
fieldName | unaryMessage
Returns a new set filtering nulls, zeros or empty field values given
Examples
data omit adjuntos
omitExtremes
omitExtremes
fieldName | unaryMessage
Returns a new set filtering null values, zeros, empty, minimum and maximum of the given field
Examples
| total extremes omit|
total := data count.
omit := data omit esfuerzo count.
extremes := data omitExtremes esfuerzo count.
{total. omit. extremes}
quartiles
quartiles
fieldName | unaryMessage
Returns three quartiles for field values given
Examples
| quartiles ds |
ds := data omit insumido.
quartiles := ds quartiles insumido.
ds select
defaults: [:row | row quartil: #insumido on: quartiles]
as: 'quartil'
range
range
fieldName | unaryMessage
Returns the range (maximum value minus minimum value) of a given field (magnitude)
Examples
data range duracion
ranks
ranks
fieldName | unaryMessage
Returns a collection with the ranks (in ascending order) of the given field (numeric)
Examples
| ranking ds |
ds := data omit insumido.
ranking := ds ranks insumido.
ds select
defaults: [:row | row rankedOn: ranking]
as: 'ranks'
rescaledRange
rescaledRange
fieldName | unaryMessage
The rescaling is a statistical measure of the variability of a time series introduced by the British hydrologist Harold Edwin Hurst (1880-1978). Its purpose is to provide an assessment of how the apparent variability of a series switch with the length of the period of time considered. The rescaled range is calculated from dividing the range of the exposed part of the time series by the standard deviation of the values on the same portion of the time series values. For example, consider a time series {2, 5, 3, 7, 8, 12, 4, 2} which has a range, R, 12 -. 2 = 10 The standard deviation, s, is 3.46, so the range is rescaled r / s = 2.71
Examples
data omitExtremes insumido rescaledRange insumido
select
select
fieldName | unaryMessage
| fieldName: 'alias' ...
| all
| defaults
| defaults: aBlock alias: 'alias'
| field: #fieldNameN [as: 'aliasN'] ..., N = 1..6
[field: aBlock as: 'alias']
| rowExpression
rowExpression :=:
each: oneArgBlock |
dayOf: aspect |
firstDateOfQuarter |
firstDateOfWeek |
monthOf: aspect |
monthsFrom: aspect1 to: aspect2 |
quarterOf: aspect |
quartersFrom: aspect1 to: aspect2 |
weekOf: aspect |
weeksFrom: aspect1 to: aspect2 |
yearOf: aspect
Is used to project individual columns of the data source.
There are several options, including the ability to reference predefined sets of fields (all, defaults, default: alias :) and use expressions (unaryMessage, select: as:, rowExpressions)
Examples
data select defaults.
data select field: #proyecto as: 'pro'.
data select field:[:row| row duracion ] as: 'duration'
serie
serie
fieldName | unaryMessage
Returns the set of values of the given field (numeric) as a series object
Examples
(data omitExtremes esfuerzo
sortedBy:'fecha') serie esfuerzo plot
sigmas
sigmas
fieldName | unaryMessage
Returns a dictionary with the Sigma (- +3) variation from the average value of the given field (numeric)
Examples
| filtro proyecto |
filtro := data omitExtremes insumido.
proyecto := filtro distinct proyecto anyOne proyecto.
(filtro where proyecto: proyecto) sigmas insumido
signals
signals
fieldName | unaryMessage
Returns a collection with signs of variation in the values of the given (numerical) column. The signals can be statistical or fuzzy logic. Each signal knows the points of the data series that compose it, and is identified by a name. The meaning of each signal is the following:
ascendantSignals
Possible process of change that shifts somewhat the average down, or up
dominantSignals
Possible process (or data error) that causes an overflow outside the natural statistical limits
moderateSignals
Possible change process moving average near the lower natural limit, or higher
nearAverageSignals
Sign of a possible process that keeps the performance close to the average
weakSignals
Possible process of change that shifts somewhat the average down, or up
ascendantFuzzySignals
Possible change process that shifts somewhat the diffused average value downwards, or upwards
dominantFuzzySignals
Posible proceso (o datos con error) que ocasiona un desborde por fuera de los límites difusos
moderateFuzzySignals
Possible change process that shifts the average value near the lower diffuse limit, or higher
nearAverageFuzzySignals
Possible process that keeps the performance near the diffused average value
weakFuzzySignals
Possible process that causes a downward shift, or rise, of the mean diffuse value
Examples
| kpi panelData |
kpi := data kpi: 'ReleaseEffortMeasurement'.
panelData := kpi
baselines: (Projects named: 'LAS MAJAGUAS').
panelData signals value
skewness
skewness
fieldName | unaryMessage
is a measure of symmetry, or more accurately, the lack of symmetry. A distribution, or data set, is symmetric if it looks the same on the left and right of the center point. The asymmetry of a normal distribution is zero, and symmetric data should have a skewness near zero. Negative values of the asymmetry may indicate that the data are skewed to the left, positive values for the skewness indicate data that are skewed to the right
Examples
| ds centiles |
ds := data omit insumido.
centiles := ds centiles insumido.
(ds where
each: [:row | (row centil: #insumido on: centiles)
= 1]) skewness insumido
standardDeviation
standardDeviation
fieldName | unaryMessage
Returns the value of the standard deviation of the given number field. If you want to access the scalar value using standardDeviationValue
Examples
data standardDeviation defects
sum
sum
fieldName | unaryMessage
Returns the sum of given number field. If you want to access the scalar value using sumValue
Examples
data sum items
theil
theil
fieldName | unaryMessage
An index of inequality / order, can be seen as a measure of redundancy, lack of diversity, isolation, segregation, inequality, no randomness and compressibility (1 highest order, greater inequality)
Examples
data theil insumido
trend
trend
fieldName | unaryMessage
Returns an object of class or ExponentialTrendSeries LinearTrendSeries (best fit) for the values of the given field (numeric)
Examples
| kpi panelData |
kpi := data kpi: 'ReleaseEffortMeasurement'.
panelData := kpi
trend: (Projects named: 'LAS MAJAGUAS').
panelData trend value parameters
valuesOf
valuesOf
fieldName | unaryMessage
Returns a collection with the values of the given field
Examples
data omitExtremes insumido valuesOf insumido kurtosis
variance
variance
fieldName | unaryMessage
Returns the value of variance (stddev ^ 2) given the number field. If you want to access the scalar value using varianceValue
Examples
data variance insumido.
data variance esfuerzo.
where
where
fieldName: value, value :=: number | string | stringWithWildcards
| booleanExpression
| and ...
| having ...
booleanExpression :=:
ResultSetRow boolean protocol, examples:
field: fieldName before: aDate
field: fieldName from: startingMagnitude to: endingMagnitude
field: fieldName match: stringWithWildcars
field: fieldName matchNot: stringWithWildcars
field: fieldName in: aSet
isNotNull: fieldName
isNull: fieldName
isNotZero: fieldName
isZero: fieldName
isToday: fieldName
each: oneArgBlock
Select one or more rows per logical conditions.
It can be short putting equal ':' between a field name and value (you can use wildcards * and # to indicate any sequence of characters, or any character respectively).
Logical expressions must be the result of a message sent to each row of data (see predefined functions).
It can be calculated more complex expressions using eval: oneArgBlock (block of Smalltalk code that evaluates each row getting as argument)
Examples
((medida resultRows where proyecto: project proyecto)
and field: 'periodo' matchNot: '*.*.*.')
and each: [:row | row duracion <= 30]
ResultSet class
Protocols of messages that can be sent to a ResultSet
Collection of rows that implements HOM (High Order Messaging) protocols
Examples
ResultSet fromFileName: 'data.txt'.
ResultSet fromScriptNamed: 'script.st'.
ResultSet fromBundle: 'bundle.st'.
ResultSet datasources.
tabDelimitedString asResultSet.
tabDelimitedString asResultSetDefault.
tabDelimitedString
asResultSetKinds: #(#String #String #Dateyyyymmdd #Number )
required: (true false false true)
Protocol *DevImprovekit-fuzzy set
fuzzy
Returns a collection with the fuzzy values (using triangular membership function for values 0 .. 1) given field (number> = 0 and <= 1)
Protocol *DevImprovekit-statistic collections
chiSquare
Returns a collection with the chi squared frequencies of the given field (numeric)
Protocol *DevImprovekit-statistic values
gini
Returns the Gini coefficient for the given field
hurst
Hurst exponent is used as a measure of long term memory time series. Refers to the autocorrelations of the time series, and the speed at which this decrease as the gap between pairs of values increases. Returns the Hurst exponent slope of the line as a linear series of rescaled range (10 logarithmic scale)
rescaledRange
Returns the scaled range (range / stddev) of a (numeric) field. Its purpose is to provide an assessment of how the (apparent) variability of a series changes with the length of the time period considered. The modified scale range is calculated from the division of the range of the values exposed in a part of the time series by the standard deviation of the values over the same portion of the time series. For example, consider a time series {2, 5, 3, 7, 8, 12, 4, 2} having a range, R, of 12 -. 2 = 10 Its standard deviation, s, is 3.46, so the rescaled range is R / s = 2.71.
theil
Returns the Theil coefficient for the given field
Protocol *DevImprovekit-testing
checkData
normalityChiSquareTest
Returns true if the given column values follow a normal distribution (based on chi-square method)
Protocol accessing
configuration
scalars
values
Returns a collection with the values of the first field
valuesOf
Returns a collection with the values of the given field
Protocol copying
transposedAt:average:
Returns a result adding new columns by transposing rows from fieldNameOrSymbol field. Calculate anotherField's average for each group of fieldNameOrSymbol
transposedAt:in:average:
Returns a result adding new columns by transposing rows from fieldNameOrSymbol field (filter by aSet).Calculate the anotherField's average for each group of fieldNameOrSymbol
transposedAt:in:sum:
Returns a new result by adding columns by transposing rows from the fieldNameOrSymbol field (filtered by aSet). Calculate the sum of anotherField for each group of fieldNameOrSymbol.
| activities rows ranks |
activities := (ranks := ((data groupBy field: #proyecto field: #tipo)
select
field: #proyecto
field: #tipo
field: #nombreRelease
field: [:group | group count] as: 'items')
where: #tipo isTop: 5 rankedBy: #items)
indexedOn: {#proyecto. [:row | row quarterly]. #tipo}.
rows := (data groupBy
field: #proyecto as: 'proyecto'
field: [:row | row quarterly] as: 'periodo'
field: #tipo as: 'tipo'
select: [:group | group count] as: 'total')
select
field: #proyecto as: 'proyecto'
field: #periodo as: 'periodo'
field: #tipo as: 'tipo'
field: [:group | (activities join: group on: #(#proyecto #periodo #tipo ))
ifNotNil: [:row | row items]] as: 'items'
field: #total as: 'total'.
rows
transposedAt: #tipo
in: ranks distinct tipo
sum: #total
transposedAt:sum:
Returns a result adding new columns by transposing rows from fieldNameOrSymbol field. Calculate anotherField's sum for each group of fieldNameOrSymbol
Protocol enumerating
difference:by:
Returns a new set that is the difference with
Another set (comparing the given aspects).
closed difference: new by: #('proyecto' 'periodo''tipo')
distinct
It returns the data as a single assembly as given field
distinct:
Retorna los valores diferentes del campo dado.
En IHDSL: self distinct perform: fieldName
filterDataWithArguments:
arguments are: 1:proyecto or nil, 2: medicion, 3: grouping[, 4:instruments, 5: operations, 6: actors]
groupBy
Returns the data grouped by a series of fields and expressions. Each result file is a result group.
There are several ways.
The first allows grouping by a single field.
The reserved word defaults refers to a specific set of predefined fields (project, nameRelease, dateRelease).
The variant defaults: as: allows you to group and then select a new field as an aliased expression (the alias modifies the name of the field for subsequent commands).
The last form (field: as :) allows grouping by up to 6 different fields, with optional aliases. Optionally, select: as: an additional field resulting from an expression with alias
indexedOn:
Returns a ResultSetIndex (a Dictionary) that indexes the content
For the aspects in aCollection.
Example: index := data
indexedOn: {#proyecto. [:row | row quarterly]. #tipo}
join:as:
Returns a new set consisting of concatenating the given set (with
same number of rows)
| measure d values |
measure: = KPI id: 'ReleaseDefectsMeasurement'.
d: = ((measure perform: (weekly measure ifTrue: [#data] ifFalse:
[#releases])) where project: 'myproject')
groupBy defaults
sortedBy: 'date'.
values: = d cumSum value.
((d select field: #project as: 'project'
field: [: row | aggregatedPeriodOf measure: row] as: 'period'
field: #date as: 'date') sortedBy: 'date')
join: values as: 'value'
join:on:
It detects the first row with matching with aSet by the set of aspects. To make an indexed join use indexedOn :.
Example: activities join: group on: #(#proyecto #periodo #tipo)
| activities rows ranks |
activities := (ranks := ((data groupBy field: #proyecto field: #tipo)
select
field: #proyecto
field: #tipo
field: #nombreRelease
field: [:group | group count] as: 'items')
where: #tipo isTop: 5 rankedBy: #items)
indexedOn: {#proyecto. [:row | row quarterly]. #tipo}.
rows := (data groupBy
field: #proyecto as: 'proyecto'
field: [:row | row quarterly] as: 'periodo'
field: #tipo as: 'tipo'
select: [:group | group count] as: 'total')
select
field: #proyecto as: 'proyecto'
field: #periodo as: 'periodo'
field: #tipo as: 'tipo'
field: [:group | (activities join: group on: #(#proyecto #periodo #tipo )) ifNotNil: [:row | row items]] as: 'items'
field: #total as: 'total'.
rows
transposedAt: #tipo
in: ranks distinct tipo
sum: #total
omit
Narrow values nil, zero, or empty field given
omit:
Omit sobre el campo dado
omitExtremes
Narrow values nil, zero, or empty field, minimum and maximum of the given
range
Returns the rank of a (numeric) field
select
Is used to project individual columns of the data source.
There are several options, including the ability to reference predefined sets of fields (all, defaults, default: alias :) and use expressions (unaryMessage, select: as:, rowExpressions)
sorted
Returns a new result ordered by first field in ascending order
sortedBy:
Returns a new result ordered by fieldName (ascending)
sortedDescendingBy:
Returns a new result ordering for fieldName in descending order
where
Selects rows by one or more logical conditions.
You can abbreviate an equality by putting '': '' between the name of a field and the value (you can use wildcards * and # to indicate any sequence of characters, or any character respectively).
Logical expressions must be the result of a message sent to each data row (see predefined functions).
You can calculate expressions of greater complexity by using each: oneArgBlock (Smalltalk code block that evaluates each row as an argument)
where:isTop:rankedBy:
Select rows for selectFieldName values in the first
aNumber ranking positions given by fieldNameOrSymbol.
Example: data where: #type isTop: 5 rankedBy: #items
Protocol inspecting
preview
displays the results in a browser
previewNamed:
displays the results in a browser
model
kpi:
Returns the KPI repository with the identification given (nil if it does not exist)
project:
Returns the project with the given name, nil if not exists
projects
Returns a list of the projects present in the dataset (class objects Projects)
Protocol statistic collections
buckets
Returns a collection with the class intervals (frequencies) for the given field (numeric)
centiles
Returns a collection with the percentiles of the given field (numeric)
kurtosis
Kurtosis is a measure of whether the data are peak or flat relative to a normal distribution. That is, data sets with high kurtosis tend to have a distinct peak near the mean, decline rather rapidly, and have heavy tails. Data sets with low kurtosis tend to have a flat top near the mean rather than a sharp peak. A uniform distribution would be the extreme case. The kurtosis of a standard normal distribution is three. The histogram is an effective way to show both the skewness and kurtosis of a dataset graphical technique.
movingRange
Returns a collection with the moving range of the given field (numeric)
quartiles
Returns a collection with the quartiles of the given field (numeric)
ranks
Returns a collection with the ranks
(ascending) given field (numeric)
sigmas
Returns a dictionary with the values corresponding to + -3 sigma deviations from the average of the elements
skewness
It is a measure of symmetry, or more accurately, the lack of symmetry. A distribution, or data set, is symmetric if it looks the same on the left and right of the center point. skewness of a normal distribution is zero, and symmetric data should have a skewness
near zero. Negative values of skewness indicate data that are skewed left and positive values for the skewness indicate data that are skewed right
Protocol statistic series
extrapolation
Returns extrapolated points (from the value field of a trend)
limits
Returns a Shewhart Plot Series class object for the values of the given field (numeric)
log
Returns a LogSeries class object with the values of the given field (numeric)
serie
Returns an object of class PlotSeries values for the given field (numeric)
signals
Returns a collection with signs of variation in the values of the given column (numerical)
trend
Returns an object of class or ExponentialTrendSeries LinearTrendSeries values for the given field (numeric)
Protocol statistic values
average
Returns the average value of the given numeric field. example:
average effort data
If you want to access the scalar value using averageValue
average:
Returns the average of a given number field
count
Returns the number of rows
cumAverage
Returns the cumulative average of the given numeric field
cumSum
Returns the cumulative sum of the given numeric field
linearCorrelationBetween:and:
Returns the linear correlation coefficient (Pearson) between the values of the given collections. Example:
| x y d correls |
correls := Dictionary new.
(Proyecto proyectos
select: [:each | each activo])
do: [:proyecto |
d := data where proyecto: proyecto.
x := d select insumido values.
y := d select defectos values.
(d linearCorrelationBetween: x and: y)
ifNotZero: [:correl | correls at: proyecto put: correl]]
displayingProgress:[:each| each proyecto].
correls
max
Returns the maximum value of a field
median
Returns the median value of the given numeric field. If you want to access the scalar value using medianValue
min
Returns the minimum value of a field
mode
Returns the value of fashion given the numeric field
rankCorrelationBetween:and:
Returns the non-parametric correlation coefficient (Spearman) between the values of the given collections. Example:
| x y d correls |
correls := Dictionary new.
(Proyecto proyectos
select: [:each | each activo])
do: [:proyecto |
d := (data where proyecto: proyecto).
x := d select insumido values.
y := d select duracion values.
(d rankCorrelationBetween: x and: y)
ifNotZero: [:correl | correls at: proyecto put: correl]]
displayingProgress:[:each| each proyecto].
correls
standardDeviation
Returns the value of the standard deviation of the given number field. If you want to access the scalar value using standardDeviationValue
sum
Returns the sum of given number field. example:
sum data defects
If you want to access the scalar value use sumValue
sum:
Returns the sum of a given number field
variance
Returns the value of the variance of the field
number given. If you want to access the value
scale use varianceValue
Protocol testing
exists:
Returns true if the given set is not empty
Class ResultSetRow
Protocols of messages that can be sent to a ResultSetRow
One row of a ResultSet
Manage message routing to access a field directly by name
Protocol *DevImprovekit-fuzzy set
fuzzy:on:
Return the fuzzy value
isHigh:
Returns true if the field value is fuzzy high
(considering a real number domain 0 .. 1). example:
(data kpi 'RequirementsChangesRatio') data where isHigh select value 'value'
isHigh:on:
Returns true if the field value is fuzzy high
respect to the given values. example:
(data kpi 'RequirementsChangesRatio') data
where isHigh select value 'value' on:
domainValues
isLMedium:on:
Returns true if the field value is fuzzy medium
respect to the given values.
isLow:
Returns true if the field value is fuzzy low
(considering a real number domain 0 .. 1)
isLow:on:
Returns true if the field value is fuzzy low
respect to the given values.
isMedium:
Returns true if the field value is fuzzy medium
(considering a real number domain 0 .. 1)
Protocol *DevImprovekit-testing
checkData
Protocol aggregating
average:as:
Cumulative average of the given field
field:as:average:as:
Returns the field or expression (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:average:as:
Returns two fields or expressions (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:field:as:average:as:
Returns three fields or expressions (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:field:as:field:as:average:as:
Returns four fields or expressions (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:field:as:field:as:field:as:average:as:
Returns five fields or expressions (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:field:as:field:as:field:as:field:as:average:as:
Returns six fields or expressions (block of
Code) with alias plus the average of one
Second field
field:as:field:alias:field:as:field:as:field:as:field:as:sum:as:
Returns six fields or expressions (block of
Code) with alias, plus the sum of one
Second field
field:as:field:alias:field:as:field:as:field:as:sum:as:
Returns five fields or expressions (block of
Code) with alias, plus the sum of one
Second field
field:as:field:alias:field:as:field:as:sum:as:
Returns four fields or expressions (block of
Code) with alias, plus the sum of one
Second field
field:as:field:alias:field:as:sum:as:
Returns three fields or expressions (block of
Code) with alias, plus the sum of one
Second field
field:as:field:alias:sum:as:
Returns two fields or expressions (block of
Code) with alias, plus the sum of one
Second field
field:as:sum:as:
Returns the field or expression (block of
Code) with alias, plus the sum of one
Second field
field:field:field:field:field:field:sum:as:
Returns six fields or expressions (block of
Code), plus the sum of one
Second field
field:field:field:field:field:sum:as:
Returns five fields or expressions (block of
Code), plus the sum of one
Second field
field:field:field:field:sum:as:
Returns four fields or expressions (block of
Code), plus the sum of one
Second field
field:field:field:sum:as:
Returns three fields or expressions (block of
Code), plus the sum of one
Second field. Example:
(data omit fallasProduccion)
select
field: #fallasProduccion
field: #fallasUat
sum: [:r|r fallasProduccion + r fallasUat] as: 'total'
field:field:sum:as:
Returns two fields or expressions (block of
Code), plus the sum of one
Second field. Example:
(data omit fallasProduccion)
select
field: #fallasProduccion
field: #fallasUat
sum: #fallasProduccion as: 'total'
fields:as:average:as:
Returns the field or expression (block of
Code) with alias plus the average of one
Second field
fields:as:sum:as:
Returns the field or expression (block of
Code) with alias, plus the sum of one
Second field
sum:as:
Sumatoria acumulada del campo dado
Protocol aspects
date
Returns the period's date
effort
esfuerzo
fieldValue:
Returns the value of the given field (symbol)
leader
Returns the project leader name
monthly
Returns the period as year / month
projectName
Returns the name of the project
projectType
Returns project categorization
quarterly
Returns the period as quartern yyyy
releaseDuration
Returns the length in days of the phase
project, by default Release defaultDays
releaseStartingDate
Returns the project's phase starting date
weekly
Returns the period as BaselineN yyyy
Procotol dates
dayOf:
Returns the day of the given date type column (by default today)
firstDateOfMonth
Devuelve la fecha que es el primer día del mes de #fecha
firstDateOfQuarter
Returns the date that is the first day of the quarter #fecha
firstDateOfWeek
Returns the date that is the first day of the week #fecha (starting on Sunday = 0)
monthOf:
Returns the month of the given date type column (by default the current month)
monthsFrom:to:
Returns the number of months between the date values for the two fields given.
quarterOf:
Returns the quarter of the given date type column (by default the quarter today)
quartersFrom:to:
Returns the number of quarters elapsed between the date values for the two fields given
weekOf:
Returns the week of the year for the given date type column (by default the week of the year today)
weeksFrom:to:
Returns the number of elapsed weeks between the date values for the two fields given.
Example: data field select: [: row | row weeksFrom: # DateCreated to: # fechaCierre] as 'weeks'
yearOf:
Returns the year of the given date type column (by default the current year)
Protocol defaults
fecha
Returns the period's date
fechaInicioRelease
Returns the project's phase starting date
fechaRelease
Retorna la fecha de finalización de la fase del proyecto -Mejora de
performance
nombreRelease
Nombre del release o fase
period
Retorna el período (quarter, month, weekly) o nombre de release
periodo
Returns the period
periodoFecha
Returns a parsed date from the period
project
project name
projectRelease
release (version) del proyecto
proyecto
project name
releaseDate
Returns the project's end of phase date
releaseName
Project release name (version)
total
Devuelve el valor del campo numerico #value, #valor o #total
value
Returns the value of the numeric field #value, #value or #total
Protocol enumerating
all
Returns all columns
all:as:
Returns all fields plus the given field
With alias. Example:
((data omit fallasProduccion)
distinct proyecto)
select all: [:r|Date today] as:'processDate'
all:as:on:
Returns all fields plus the given field
In another set with alias (indexed). Example:
|uat|
uat := data where isNotZero:'fallasUat'.
uat indexedOn: #('proyecto' 'nombreRelease').
(data select field: #proyecto field:
#nombreRelease) select all: [:ug| ug duration]
as: 'dur' on: uat.
defaults
Returns the predefined fields of the values
Of indicators (curve type):
proyecto,nombreRelease, fechaRelease
defaults:as:
Returns the defaults fields plus another aliased field calculated at
from aBlock.
Example:
data select defaults: [: group |
measure isRatio
ifTrue: [group average value]
ifFalse: [group sum value]] as: 'value'
defaults:as:field:as:
Returns the defaults fields plus another aliased field calculated at
starting with aBlock, plus an additional field.
Example: data select defaults: [: group |
measure isRatio ifTrue: [group average value] ifFalse: [group sum
value]] as: 'value'
field: 'type' as: 'type'
defaults:as:field:as:field:as:
Returns the defaults fields plus another aliased field calculated at
Starting with aBlock, plus two additional fields.
Example: data select defaults: [: group |
measure isRatio ifTrue: [group average value] ifFalse: [group sum
value]] as: 'value'
field: 'type' as: 'instrument'
field: 'status' as: 'operation'
defaults:as:field:as:field:as:field:as:
Returns the defaults fields plus another aliased field calculated at
Starting with aBlock, plus three additional fields.
Example: data select
defaults: [: group | measure isRatio ifTrue: [group average value] ifFalse:
[group sum value]] as: 'value'
field: [: g | (g distinct: #type) asOrderedCollection joinSeparatedBy: $ ~]
as: 'instrument'
field: [: g | (g distinct: #state) joinSeparatedBy: $ ~] as: 'operation'
field: [: g | g allActors asSet joinSeparatedBy: $ ~] as: 'actors'
each:
Returns the result of evaluating aBlock with rank.
Example: data where each: [: row | row duration <= 30]
field:as:on:
Returns the field or expression (block of
Code) of another set with aliases (the set must be
Indexed by existing fields in this set).
Example:
|uat|
uat := data where isNotNull:'fallasUat'.
uat indexedOn: #('proyecto' 'nombreRelease').
data select field: [:ug| ug duration] as: 'dur' on: uat
field:as:on:ifNone:
Returns the field or expression (block of
code) from another set with aliases (the set must be
indexed by existing fields in this set).
If not found, returns the value of aBlock.
Example:
| uat |
uat: = data where isNotNull: 'fallasUat'.
uat indexedOn: # ('project' 'rename').
data select
field: [: ug | ug duration] as: 'dur' on: uat
ifNone: [0]
quarterDefaults:as:
Protocol fields
field:
Returns a named field
field:as:
Returns the field or expression (code block) with alias
field:as:field:as:
Returns two fields / expression (code block) with alias.
Example: select data
field: # tipoProyecto as: 'tipoProyecto'
field: [: row | self aggregatedPeriodDateOf: row] as: 'date'
field:as:field:as:field:as:
Returns three fields / expression (code block) with alias
field:as:field:as:field:as:field:as:
Returns four fields / expression (code block) with alias
field:as:field:as:field:as:field:as:field:as:
Returns five fields / expression (code block) with alias
field:as:field:as:field:as:field:as:field:as:field:as:
Returns six fields / expression (code block) with alias
field:as:field:as:field:as:field:as:field:as:field:as:field:as:
Returns seven fields / expression (code block) with aliases
field:field:
Returns two field / expression (code block)
field:field:as:
Returns a field / expression (code block) plus another field / expression with alias
field:field:field:
Returns three field / expression (code block)
field:field:field:as:
Returns two fields / expressions (code block) plus another field / expression with alias
field:field:field:field:
Returns four fields
field:field:field:field:as:
Returns three fields / expressions (code block) plus another field / expression with alias
fields:
Returns the fields with the same alias. Example: row fields: # (date project phase)
fields:as:
Returns the fields with aliases. Example:
row
fields: #(''proyecto'' ''id'')
as:#(''proyecto'' ''issue_tracker_id'' )
Protocol statistics
centil:on:
Returns the percentile value belonging to the
percentile dice field (zero if not
found in centiles, error)
quartil:on:
Returns the quartile it belongs to the field value given in quartiles
rankedOn:
Returns the rank of the record in the given ranking.
Example:
| ds ranking |
ds: = data omit inputTime.
ranking: = ds ranks timeUsed.
ds select
defaults: [: row | row rankedOn: ranking]
as: 'ranks''
Protocol testing
equal:to:
Returns true if the field value is equal to the value given
field:after:
Returns true if the field value is given later (>) to the given magnitude.
Example: data field where: # date after: date row
field:before:
Returns true if the field value is given above (<=) to the given magnitude.
Example: data field where: #date before: row fecha
field:between:and:
Returns true if the field value is in the range given
field:in:
Returns true if the field value is included in the given set.
Example: data field where: selectFieldName in: values
field:match:
Returns true if the field matchs against the given pattern
field:matchNot:
Returns true if the field does not matchs against the given pattern.
Example: data field where 'period' matchNot: '... * * *'
ifNull:then:
Returns the value of the field, or if the given value is nil
isNotNull:
Returns true if the given field is not NULL
isNotZero:
Returns true if the given field is non-zero
isNothing:
Returns true if the given field is NULL, zero or empty
isNull:
Returns true if the given field is NULL
isSomething:
Returns true if the given field is NOT NULL, zero or
empty
isToday:
Returns true if the given field is today's date
isZero:
Returns true if the given field is zero
notEqual:to:
Returns true if the field value is different from the value given
Class ResultSetRowGroup
Protocols of messages that can be sent to a ResultSetRowGroup
Grouping of a ResultSet
Note: #sum, #average, y #standardDeviation answer a ResultSet. If you want the scalar value, use protocol #sumValue, #averageValue, #standardDeviationValue (see Collection)
Protocol *DevImprovekit-activity system
defaultsWithMetadata:as:
Group by defaults fields and components of the activity system
(instruments, operations, actors) plus an aliased field / expression
Example:
((data where project: 'PROJECT NAME') and type: 'TYPE OF DEFECT')
groupBy defaults select defaultsWithMetadata: [: g | g count] as: 'items'
defaultsWithMetadata:as:field:as:
defaultsWithMetadata:as:field:as:field:as:
quarterDefaultsWithMetadata:as:
quarterDefaultsWithMetadata:as:field:as:
Protocol enumerating
defaults
Grouped by the defaults fields
defaults:as:
Group by defaults field plus aliased field / expression
Example: ((data where proyecto: 'NOMBRE DEL PROYECTO')
and tipo: 'TIPO DE DEFECTO')
groupBy defaults select
defaults: [:g | g count] as: 'items'
defaults:as:field:as:
Group by field defaults plus two field / expression with alias
Example: ((data where project: 'PROJECT NAME')
and type: 'TYPE OF DEFECT')
groupBy defaults select
defaults: [: g | g count] as: 'items'
field: [: g | (g distinct: #type) joinSeparatedBy: $ ~] as: 'instrument'
defaults:as:field:as:field:as:
Group by fields defaults plus three field / expression with alias
Example: ((data where project: 'PROJECT NAME')
and type: 'TYPE OF DEFECT')
groupBy defaults select
defaults: [: g | g count] as: 'items'
field: [: g | (g distinct: #type) joinSeparatedBy: $ ~] as: 'instrument'
field: [: g | (g distinct: #state) joinSeparatedBy: $ ~] as: 'operation'
defaults:as:field:as:field:as:field:as:
Group by fields defaults plus four field / expression with alias
Example: ((data where project: 'PROJECT NAME')
and type: 'TYPE OF DEFECT')
groupBy defaults select
defaults: [: g | g count] as: 'items'
field: [: g | (g distinct: #type) joinSeparatedBy: $ ~] as: 'instrument'
field: [: g | (g distinct: #state) joinSeparatedBy: $ ~] as: 'operation'
field: [: g | g allActors asSet joinSeparatedBy: $ ~] as: 'actors'
Protocol fields
field:as:
Grouped by a field / expression with alias
field:as:field:as:
Groups of two fields / expressions alias
field:as:field:as:field:as:
Groups of three fields / expressions alias
field:as:field:as:field:as:field:as:
Groups of four fields / expressions alias
field:as:field:as:field:as:field:as:field:as:
Groups of five fields / expressions alias
field:as:field:as:field:as:field:as:field:as:field:as:
Groups of six fields / expressions alias
field:as:field:as:field:as:field:as:field:as:field:as:field:as:
Returns seven fields / expression (code block) with aliases
field:field:
Grouped by a field / expression
field:field:as:
Grouped by a field / expression, plus another field / expression with alias
field:field:field:
Groups of three fields / expressions
field:field:field:as:
Groups of two fields / expressions, plus another field / expression with alias
field:field:field:field:
Groups of four fields / expressions
field:field:field:field:as:
Groups of three fields / expressions, plus another field / expression with alias
Class ShewhartPlotSeries
Protocols of messages that can be sent to a ShewhartPlotSeries
In statistical quality control, the individual / moving-range chart is a type of control chart used to monitor variables from a business or industrial process for which it is impractical to use rational subgroups.
The "chart" actually consists of a pair of charts: one, the individual chart, displays the individual measured values; The other, the moving range chart, displays the difference from one point to the next. As with other control charts, these two charts enable the user to monitor the process for shifts in the process that alter the mean or variance of the measured statistic.
Series of a StatisticPlotMorph that determines limits of variation and bands (sigmas) from the moving range. Source: Understanding Variation, Wheeler
Protocol *DevImprovekit-signals
ascendantFuzzySignals
As the signal of '' upward '' variation, but considering fuzzy logic (group of projects) instead of statistical variation
dominantFuzzySignals
As the "dominant" variation signal, but considering fuzzy logic (group of projects) instead of statistical variation
moderateFuzzySignals
As the "moderate" variation signal, but considering fuzzy logic (group of projects) instead of statistical variation
nearAverageFuzzySignals
As the "near-average" signal of variation, but considering fuzzy logic (group of projects) rather than statistical variation
weakFuzzySignals
As the "weak" variation signal, but considering fuzzy logic (group of projects) instead of statistical variation
Protocol accessing
lb1
Lower limit -1sigma
lb2
Lower limit -2sigma
lnlp
Lower limit
movingRange
Moving range (difference from previous value)
movingRangeAverage
Average moving range
parameters
Parameter values that characterize the series
ub1
Upper Limit +1sigma
ub2
Upper Limit +2sigma
unlp
Upper limit
url
Moving range limit
valuesAverage
Data average
Protocol drawing
histogram
Opens a frequency histogram around
Of the mean value (- + 3sigma)
plot
Draws the series and opens in the Hand
Protocol signals
ascendantSignals
Returns a collection with the signs of upward variation: a possible process of change that shifts somewhat the average downwards, or upwards
dominantSignals
Returns a collection with the dominant variation signals: possible process (or data with error) that causes an overflow beyond the natural limits
moderateSignals
Returns a collection with moderate variation signals: a possible change process that shifts the average near the lower or upper natural limit
nearAverageSignals
Returns a collection with the signs of variation close to the average: possible process that keeps the performance close to the mean
signals
Returns a collection with the signs of variation
weakSignals
Returns a collection with weak variation signals: a possible process that causes a downward slope, or a rise, of the mean
Protocol statistics
bucketFrecuencies
Intervalos de clase (dividido x1000)
frecuencies
Frequency histogram (Sigma)
frecuenciesValues
Valores del histograma de frecuencias (sigmas) - (dividido x1000)
limitsAverages
_Valores promedio de los sigmas (dividido x1000)
Class TrendPlotSeries
Protocols of messages that can be sent to a TrendPlotSeries
Abstract class of trend series based on the equation of the line.
It can be reimplementated for better fit using "The Theil" algorithm
Protocol accessing
parameters
Parameter values that characterize the series
Protocol drawing
plot
Draws the series and opens in the Hand
Protocol regression
b
Returns the b component of the equation of the line
m
Returns the slope of the line of least squares straight
r2
Returns the coefficient of the regression line
Protocol testing
isTrendSerie
Class KPI
Protocols of messages that can be sent to a KPI
Public interface of Measures for IHDSL.
Examples
KPI enabled.
(KPI id: 'ReleaseDefectsMeasurement') baselines: (Projects named: 'Producto').
KPI select:[:kpi| kpi qi < 0.92]
Protocol accessing
category
Returns the categorization (or size) of the indicator (Effort, Quality, Activity, etc.).
code
Returns the code IHDSL (nil if the code is SQL)
datasource
Devuelve la identificación de la fuente de datos del indicador - En caso de SQL es un string
description
Returns a text that explains the indicator
formula
Returns text describing the algorithm for indicator
intention
Returns a text that indicates the purpose of the indicator
kpi
Returns the kpi with a given ID.
'ReleaseDefectsMeasurement' kpi
process
Returns a text with the name of the process associated with the indicator
unit
Returns the unit of measure (Quantity | Rate |%)
user
Returns the ID of the owner / author user flag
Class protocol
id:
Devuelve una nueva KPI cuya identificación es el ID dado
select:
Devuelve un conjunto de KPI que evaluan aBlock a true
Protocol context
context
Returns a dictionary with information related to the indicator that supplements the same numerical tables and graphs. It provides a broader context to aid the user in making decisions
qi
Returns a number from 0 to 1 that indicates the quality of the input data (related to the size or category of the indicator). Much higher, the better
Protocol queries
baselines:
Returns a ResultSet with weekly consolidation project type equal to a given
consolidated:
Returns # organizational: o
# organizationalAggregated: depending on
indicator
cumulated:
Returns a ResultSet with the trend of
consolidated rate equal to a given project, or
weekly baseline if available
data
Returns a ResultSet with data for all projects. The data correspond to a comparable phase or periods, or to weeks if the indicator allows it
data:weekly:filter:
Retorna un ResultSet con los datos para el
proyecto (períodos repetitivos comparables
entre sí). Se puede solicitar detalle semanal y/o
filtrar solo las fases principales (según
convención de nombres o duración menor al
mes)
dataAggregated:
Returns a ResultSet with data for
project (comparable repeated periods
each other) - To graph type indicator
Circular or Bars
releases
Returns a ResultSet with data for all projects. The data correspond to a comparable phase (s)
releases:
Returns a ResultSet with data for the given project. The data correspond to a comparable phase or period (without discriminating the type of phase or release)
trend:
Returns a ResultSet with the 'trend' accumulated for the given project (sum, average, or if the unit corresponds to the indicator ratios)
weekly
Retorna un ResultSet con los datos semanales para todos los proyectos
Protocol queries-activity systems
baselines:instruments:operations:actors:
Returns a ResultSet with weekly consolidation by type of project equal to the given. The other arguments correspond to components of the activity system used as filters
data:weekly:instruments:operations:actors:filter:
Returns a ResultSet with the data for the
project (comparable repetitive periods
each other) and activity system components.
You can request weekly details and / or
filter only the main phases (according to
naming convention or duration less than
month)
releases:instruments:operations:actors:
Returns a ResultSet with the data for the project and components
of the given activity system. The data corresponds to a phase or
comparable period (without discriminating the type of phase or release)
Protocol testing
bar
Returns true if the graph type indicator is Bar
dsl
Returns true if the indicator is IHDSL code (stored in the application repository), false if SQL (stored procedures server database)
empty
Returns true if no data in the repository for this indicator
enabled
Returns true if the indicator is active
isAggregated
Returns true if the indicator adds information (type of bar or pie)
isRatio
Returns true if the gauge unit is a percentage or a rate
pie
Returns true if the graph type indicator is Pie
procedural
Returns true if the flag is implemented in stored procedure. These indicators are executed by passing additional arguments to the calculation procedure (such as the project, the indicator identifier and a group by project category flag.
significant
Returns true if the measurement is the minimum amount of data to be considered statistically significant
Class ImprovekitPoject
Protocols of messages that can be sent to a Projects
Public interface of Projects for IHDSL.
Examples:
ImrprovekitProject enabled.
ImrprovekitProject named: 'Product'.
ImrprovekitProject selectFromGroup: 'group hurst value < 0.4'
Protocol *DevImprovekit-fuzzy set
performance
Returns a fuzzy set associated with a given metric (ActivityVolume) indicating an overall level of 'performance' of the project in relation to its category (# nodata if it could not calculate)
Protocol accessing
enabled
Returns true if the project is active
group
Returns the attribute group project
id
Returns the unique ID project
leader
Returns the name of the project leader
name
Returns the name of the project
type
Returns the categorization of project (used as a key to group projects with similar characteristics, or 'homogeneous')
Contact improvekit@gmail.com