This isn't really a blog, its more of a holding page for my domain (seems a shame not to have a page), if I know you then add me on either LinkedIn or Facebook (links are on the right), however if I don't know you then I won't add you!

Thursday, 8 April 2021

Monitoring identity fields in SQL Server

 A common issue that I've encountered and certainly more than once, is where database inserts fail due to incorrectly sized identity fields. This is caused by the data type and its associated numerical limit being unable to store the next number in the identity sequence (known as the seed).


This is easily resolved by changing the fields data type, however this often means that users are unable to insert errors when this is discovered. Sizing all of your datatypes to be larger than necessary on the off chance of this issue is ill advised, as there are storage and performance issues with using the wrong datatype.


With this in mind I have created a simple script that identifies identity fields across a database, identifies the current seed and compares that against the associated limits based on the fields data type. This allows the monitoring of seed vs datatypes and more of a proactive approach taken to the problem.

Tuesday, 20 November 2018

SSRS - Cannot edit data driven subscription / delete report


Issue

Recently when trying to edit an existing data driven subscription I received an error message through the web front end which didn’t prove very useful. 
 







This all happened shortly after I encountered the server responding slowly, in hindsight I think I may have pressed finish twice when editing the subscription and created two copies of it.


Steps I took to investigate

These are the steps I took to investigate, it might prove useful for looking for similar problems yourself.

I looked at the internal logs on the reporting services server (which in SSRS 2014 were located in C:\Program Files\Microsoft SQL Server\MSRS12.MSSQLSERVER\Reporting Services\LogFiles), inside I eventually found;

library!ReportServer_0-9!1514!11/20/2018-13:05:00:: i INFO: Call to GetSystemPropertiesAction().
library!ReportServer_0-9!1514!11/20/2018-13:05:00:: i INFO: Call to GetItemTypeAction(/email_reports/HR - Leaver Email).
library!ReportServer_0-9!1514!11/20/2018-13:05:00:: i INFO: Call to GetReportParametersAction(/email_reports/HR - Leaver Email).
library!ReportServer_0-9!1268!11/20/2018-13:05:00:: i INFO: Call to GetSubscriptionPropertiessAction(ed4ccbeb-2907-45db-b911-84d16c547e0c).
library!ReportServer_0-9!1268!11/20/2018-13:05:00:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: Adding more than one data source with null original name, Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details.;

Looking at the entry in the log file I can see the report folder/report name in yellow which leads me to believe I am in the right place in the log file (corresponding with the date/time of the error) and the error description in red leads me to believe the issue is relating to the data source. 

I decided that the easiest course of action was to delete the subscription and recreate it, I went into SSMS on the reports server and found the table “[ReportServer].[dbo].[Subscriptions]” this gave me sufficient from the “datasettings” column to recreate the subscription.

Wednesday, 31 October 2018

Oracle - Caution when using sequences within case statements

Some logic within an SSRS report that I was working on had a case statement that either pulled a QR code from an existing field or ran a sequence to allocate a new QR code, this then got called in a separate dataset in the report that carried out in insert of the new QR code (by sharing it through an internal parameter).  An example of this code is below;

select
M.staff_number,
CASE
WHEN IM.code is not null THEN im.code
WHEN IM.code is null THEN qr_code.next_val
END QR_CODE

FROM master M
LEFT JOIN issue_numbers IM
ON (M.staff_number = IM.primary_key AND IM.domain = 'QR_CODE')
WHERE
M.staff_number = :staff_number

However I found that the sequence was incrementing the numbers faster than expected and leaving gaps of numbers that never got used against a record, this even happened when the report ran the dataset for staff who had a record in the IM table (and as such shouldn't have got past the first WHEN row), I couldn't work out why until it became apparent that the SQL is evaluated in its entirety and as such running the sequence regardless of where the case statement resolved for that record.

After thinking about it the issue was resolved by embedding the sequence within a function that has a parameter passed to it, so that the function only ran the sequence when it received a certain value (which was keyed to an embedded case statement that passed the key value only when IM.code is null).


Tuesday, 8 August 2017

Microsoft Onedrive - "Something went wrong and we can't sign you in at the moment. Please try again later." error in Edge

Had the following error when trying to sign into Microsoft Onedrive using the Microsoft Edge Browser, assumed it was something wrong with the service generally, however after trying in Chrome (it worked) it seems onedrive sometimes doesn't let you sign in using their own browser!

Hopefully this post will flag up anyone else who has the same issue!


Wednesday, 6 July 2016

Issue/Problem – Error when running a select/insert into table SQL server (Attempt to fetch logical page (1:28791) in database 12 failed. It belongs to allocation unit X not to Y.)

When running a SQL server agent job that carries out a large insert (64k records), the job fails after attempting to insert the records with the following error text.

Attempt to fetch logical page (1:28791) in database 12 failed. It belongs to allocation unit X not to Y.

This error also occurred when querying the table.

Answer/solution

This is related to issues regarding the storage location of the table being mismatched, SQL gurus more experienced than me will understand this further.  However as this example was a table that was cleared down and repopulated from another data source, there is not data loss implications.  The priority was to get the table populated with data so that the other related systems could continue functioning.

This was done by right clicking on the table and click Script Table as > CREATE to > New query window.  Then to rename the table with the prefix old (so that I could debug/investigate it later) and then run the script generated as the create table, then rerun the insert script and test with a select.

Obviously the above does not solve the root cause and doesn’t work if the table concerned contains data native to the database that cannot be replaced/repopulated.

Issue/Problem – Inserting records into SQL Server table doesn’t result in entries in table

When carrying out a simple insert into a table in a SQL server table the X number of records affected text is displayed, although a select * from the table immediately afterwards does not yield any results.

Answer/solution
There isn’t necessarily any single answer to this, so look at the following areas;
  • Refine your insert statement to use some hard coded values in place of a SQL select statement to remove any complication and identify if the error lies in the select statement as opposed to the insert transaction.  
  • If the table is a high turnover table (i.e. one that is cleared down and then repopulated with large amounts of data) check to see if there are any auto number columns that will have hit their limit (i.e. the limit of a integer etc).
  • Check the database server itself to ensure there is sufficient room remaining on the drives that run both the operating system and store the database files, also check that autogrow is on.
  • Attempt to rebuild any indexes on the table (this was what resolved the issue for me)


The frustrating fact with the issue above is that the “X number of records affected” following the insert leads any SQL developer to assume the records have been inserted successfully.

Friday, 18 March 2016

SSRS Error - There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded

Hopefully this can help someone else out that has this issue, I had the error "Error 1 There was an exception running the extensions specified in the config file. ---> Maximum request length exceeded" displayed when publishing what I believed was a relatively straight forward SSRS report.

Upon googling most of the solutions tended to hint at it being related to a large mapping component being present, however this wasn't present in my report.

I then realised that the report I had written was done by copying an existing report as a starting point, that report had a few very large (file size wise) images, although I had deleted them from the report.  Looking in the Report Data > Images location I can still see them referenced in there, deleting them from there resolved the issue.

Friday, 24 October 2014

Sharepoint not saving changes made to Word documents

Opening a file in Sharepoint from Internet Explorer in Microsoft Word allows the user to (subject to permissions) make amendments to the file and use the save button to save straight back to the Sharepoint repository.  

However in certain circumstances users may make changes however not see those changes replicated in Sharepoint (despite no errors being displayed).


One main indicator that Sharepoint and Word aren't playing nice is that when editing the document the green "sync" arrows aren't displayed (see icon above).  The one cause of this I have encountered is where users are using the 64 bit edition of Internet Explorer, it seems to be related to the support within 64bit IE of ActiveX controls.

The solution is don't use the 64 bit edition of Internet Explorer, however users ma have been making changes oblivious to the fact that they aren't being saved.

Wednesday, 15 January 2014

Easy Oracle SQL inserts/imports with excel

Following on from my Excel based tool for carrying out updates from externally provided data here is a follow up tool for importing new data into a table.

As before its always frustrating when end users make the assumptions about data, users may sometimes request a spreadsheet of data is imported into a table.

Having done this numerous times using cobbled together formulas in Excel I decided to put together a generic template that you can use to carry out inserts into your Oracle database with significantly less pain and frustration!

DOWNLOAD THE TEMPLATE

Step 1 - Question the insert

Firstly before carrying out the insert you should ask yourself and the user providing your data the following questions;

  • Will issues be caused by manually importing into the table.
  • How long ago was the data in the spreadsheet updated, are other users aware that the update is taking place?
  • Does similar data already exist in the table, could the insert introduce duplication with queries/views? 
  • Is there enough data in the spreadsheet to create records correctly (based on table constraints)?
Based on that you can then decide whether to proceed with the update.


Step 2 - Format the data

Take the spreadsheet that you have been provided with and make the following amendments;
  • Check the data to ensure that it is formatted correctly, if the data has been amended manually users may have included rogue spaces, it is suggested that data is "cleaned" in a seperate spreadsheet before introducing the data to the insert template.
Step 3 - Transpose the data into the template

Paste the data from the spreadsheet your user has provided into the import template in cell B9.

Step 4 - Set the field names
  • Enter the table name to be updated in cell C4.
  • Identify each column in row 8 by its name in the database.
Step 5 - Review the generated SQL
  • The SQL generated as part of the template needs to be reviewed prior to execution.
  • Once satisfied that the SQL is correct paste the SQL into your client and execute the code.

Saturday, 27 July 2013

Easy Oracle SQL updates with excel

Its always frustrating when end users make the assumptions about data, often users will export data into a spreadsheet and believe it is easy to reimport this into the database.

Having done this numerous times using cobbled together formulas in Excel I decided to put together a generic template that you can use to carry out updates into your Oracle database with significantly less pain and frustration!

DOWNLOAD THE TEMPLATE

Step 1 - Question the update

Firstly before carrying out the update you should ask yourself and the user providing your data the following questions;

  • How long ago was the data in the spreadsheet updated, are other users aware that the update is taking place?
  • Is the user/other users aware that data entered into the database since the spreadsheet was created will be overwritten with the data contained in the spreadsheet.
  • Is there enough in the spreadsheet to match up to the records correctly (primary key etc)?
Based on that you can then decide whether to proceed with the update.


Step 2 - Format the data

Take the spreadsheet that you have been provided with and make the following amendments;
  • Ensure the first column includes one of the fields that will identify the record in the destination table (i,e, personcode, learnerid or staffnumber)
  • Check the data to ensure that it is formatted correctly, if the data has been amended manually users may have included spaces etc.
Step 3 - Transpose the data into the template

Paste the data from the spreadsheet your user has provided into the import template in cell B9.

Step 4 - Set the field names, table name and field type 
  • Enter the table name to be updated in cell C4.
  • Identify each column in row 8 by its name in the database.
  • Identify each column in row 7 by its type;
    • Primary key will be used to construct the where clause
    • Update field will be the fields being updated
Step 5 - Review the generated SQL
  • The SQL generated as part of the template needs to be reviewed prior to execution.
  • Once satisfied that the SQL is correct paste the SQL into your client and execute the code.

Wednesday, 12 June 2013

Can I use "user" as a parameter name in SSRS (when using Oracle)

The answer is no!

Although SSRS will allow you to create a parameter called user, if using Oracle SQL it will not let you reference the parameter in a dataset, the warning “ORA-01745:invalid host/bind variable name” will be displayed whne running your dataset. 

I spent ages checking through my dataset until I realised that user must be a reserved term within the dataset that cannot coexist as a parameter name, again as per my posts hopefully this helps someone else out!

Tuesday, 11 June 2013

Crystal Reports - IF IN Expression

Carrying out development between different tools such as SQL, SSRS expressions and Crystal reports often ends up in headaches about the syntax and functions available (as there are big similarities).  When writing a Crystal Expression to include an IF statement that looks at a range of values (in a similar way to an IN clause in SQL) there are a few things to keep in mind.

For example
IF {MY_ELEMENT.STREAM} = "SA" THEN "Shop closed" ELSE “Shop open”
This expression will only read “shop closed” if the stream field is equals to “SA”, however if I have more than one value that equates to shop closed then I need to think about the construction of my expression.

I could write a simple OR in, however this becomes unwieldy the more values that will display as shop closed.
IF {MY_ELEMENT.STREAM} = "SA" OR {MY_ELEMENT.STREAM} = "SU” THEN "Shop closed" ELSE “Shop open”

I could write a case statement within my SQL, however it could be that I am using a snapshot at a given moment in time which requires me to include the logic natively into my report. 

Using the IN string function, a series of values can be included within the IF statement with minimum bulk to the expression, however it operates slightly differently to the way it is used in SQL.

IF {MY_ELEMENT.STREAM} in("SA""SU”) THEN "Shop closed" ELSE “Shop open”

The separate values are stored within the brackets and separately quoted, however they are not separated by commas as in SQL.

Hope someone finds this useful, I struggled to find anything online about doing this in Crystal!

Thursday, 30 May 2013

Dissertation Series - Data Mining Tesco Clubcard Case Study


In 1994 Tesco piloted their Clubcard scheme, then went on to launch it countrywide in 1995 (Humby et al, 2004 p.14), although loyalty schemes were also being operated by other retailers Tesco intended to make further use of the data generated as a result of it.
Safeway had tried this with their ABC card which they later abandoned and had suffered with the too much data issue having compared it to “drinking from a fire hose” (Humby et al, 2004 p.99).  This scenario of too much data was a common theme throughout the research carried out in the literature review and often led to the use of data mining.
Dataset content
A huge amount of data was being created as a result of the Clubcard scheme; till transactions broken down to product level and attributing to the Clubcard holder that made the purchase (Humby et al, 2004 p.96).
Dataset analysis
Tesco outsourced the analysis of the data to a company called “Dunnhumby” as they did not possess the IT skills or infrastructure inhouse (Humby et al, 2004 p.96).  In addition technical limitations of the time meant that Dunnhumby weren’t able to process all of the Tesco data (Humby et al, 2004 p.97), in fact in excess of 50 million transactions (shopping trips) were held in the first 3 months of the scheme (Humby et al, 2004 p.96).
Dunnhumby took the approach of analysing 10% of the collected data and then worked to apply what had been learnt to the entire dataset (Humby et al, 2004 p.97).
Dataset quality
Errors contained within data can cause false positives in data mining (Thrasingham, 1999 p.93) and Dunnhumby encountered this with the Clubcard data having multiple users of one card, users holding multiple cards (in the case of loss/theft) or even local issues preventing customers reaching the store for a period of time (Humby et al, 2004 p.98).  However as the data was collected by Tesco hardware automatically, there was little likelihood of missing data or inconsistent data issues to be encountered.
Resistances
Whilst the majority of the Tesco case study talked about positive feedback (Humby et al, 2004 p.116), there were periods during which there were resistances to the processing of personal data (Humby et al, 2004 p.177).  During 1997 there were 20 complaints made to the Data Protection Registrar (which was the precursor to the Information Comissioner), these complaints pertained to the use of the data collected for the clubcard scheme that was subsequently used in a Tesco Personal Finance mailing campaign (Humby et al, 2004 p.177).  As a result of the complaints and subsequent meetings with the Data Protection Registrar Tesco revised their practices to not pass details from clubcard to third parties (Humby et al, 2004 p.179).
Benefits
Tesco realised a large number of benefits from the Clubcard scheme, with customers feedback being that the targeted mailings were viewed separate to other commercial mailings (Humby et al, 2004 p.116). 
Tesco were also able to more accurately target marketing based on customers buying habits and as such get a higher return, this marketing was coupon based mailing which results in customers receiving a bespoke combination of coupons based on their buying patterns (Humby et al, 2004 p.117).
Summary
Tesco encountered technical issues at the beginning of the club card project, mainly caused by the technical limitations of the time.  This resulted in them outsourcing the project to a third party, who then only analysed a small sample.
Tesco encountered resistance to their sharing of personal data with third party marketers during the Tesco Personal Finance mailing, although changed their approach to data sharing and mailing. 
Otherwise the Tesco viewpoint was that the project was hugely successful and well received amongst its customers.

Wednesday, 29 May 2013

Dissertation Series - Data mining Literature Review Summary


Data mining is a widely used technology, often deployed in scenarios where large amounts of data are collected and the analysis of this data is problematic.  The use of data mining allows patterns to be gleaned from data and exploited to further the business/organisation objectives.
Data mining is not an out of the box solution that can be deployed to an organisation without technical intervention, as there are many factors that influence the accuracy and usefulness of the end product produced.  These factors must be considered prior to undertaking a data mining project, as it may be the case that the chances of success are low and as such the end product may result in resources being targeted towards false positives.
There are many software solutions used to implement data mining and modelling techniques that can be used within these packages.  These techniques each mine the data in different ways and as such would be used in the appropriate scenario.
There are some resistances to data mining as a technique, these can in the majority of cases by mitigated or at the very least controlled.  There is a common theme of mutual consent between the subject and the organisation, where both parties receive a benefit (as in the Tesco example) the privacy concerns are generally reduced.  This is separate to any legal issues and past examples have shown that even if an organisation adheres to the law there can be issues (such as expressed in the N2H2 example).

Oracle Date comparison - DATEDIFF

Many databases are designed in such a way that where a start/end time are stored there is no corresponding duration value, this is to avoid obvious data duplication and storage space as the duration can be calculated by comparing the start/end times.  However some novice SQL coders struggle to calculate durations.

In Microsoft SQL there is the datediff function however this is not present in Oracle so the most straight forward method is to subtract the start date from the end date, this produces the difference expressed fractions of a day (i.e. an hour is expressed as 0.41677777), multiplying the number by 24 then gives the figure in hours.


(END_DATE – START_DATE) * 24

An easy way check your logic is to use a value within a dual statement such as the one below, obviously including the dates you are anticipating so that you can be sure of what figure to expect.  This saves considerable time than sticking a date comparison into your where clause and crossing your fingers!

Select
(TO_DATE('01/08/2012 13:00','dd/mm/yyyy hh24:mi') - TO_DATE('01/08/2012 10:00','dd/mm/yyyy hh24:mi')) * 24 Difference_hours,
(TO_DATE('31/07/2013','dd/mm/yyyy') - TO_DATE('01/08/2012','dd/mm/yyyy'))  Difference_Days
From dual

Tuesday, 28 May 2013

Dissertation Series - CRISP DM - Step Five Evaluation


Evaluate results
The previous assessment of the model investigated how accurate the model was, the evaluate results sub-step investigates the models suitability based on the business success factors set at the start of the project (The Modelling Agency, 2000 p.30).
Review process
Using the conclusions of the evaluate results sub-step it may be that an area for further development of the model is identified and additional work is required; this may because of the amount of time that has elapsed since the original specification was drawn up or even down to something being overlooked in the business understanding sub-steps (The Modelling Agency, 2000 p.31).
Determine next steps
Following the assessment and results of the review process the next steps can be decided on, there are three possible avenues;



Further development work
If additional requirements are identified during the review process then it may be necessary to carry out additional work on the model (The Modelling Agency, 2000 p.31), it may also be necessary to carry out further development work if the model does not meet the initial requirements (The Modelling Agency, 2000 p.30).
Close the project
IT projects especially are known for going out of tolerance in terms of cost and time (McManus et al, 2008), in some circumstances it is therefore necessary to close a project prematurely (OFC, 2005 p.71) to save resources.  The reasons behind closing the project may be complex such as industry changes leading to the original problem defined no longer existing and as such shouldn’t always be seen as a failure.
Deploy the model
In the event of the evaluation providing the model successfully in meeting the requirements, the model can move to the next stage of being deployed (The Modelling Agency, 2000 p.31).

Sunday, 26 May 2013

Dissertation Series - CRISP DM - Step Four Data Modelling


The modelling step involves the actual data mining stage of the project, which breaks down into a number of steps;
Select modelling technique
The problem being solved/objectives set out in the business understanding step will tend to indicate which modelling technique is suitable for the problem being tackled (The Modelling Agency, 2000 p.25), however those new to data mining may test a number of different modelling techniques.
Generate test design
Data mining accuracy is very important as false positives can cause serious issues between an organisation and its customers (Thuraisingham, 1999 p.93), for this reason a robust test plan must be put in place in order to validate the data mining solution (The Modelling Agency, 2000 p.28).
Build model
This is the sub-step where the data mining application specific development is undertaken and as with software design is iterative with a loop of develop, test and adjust (The Modelling Agency, 2000 p.28).



Assess model
In union with the test design carry out testing of the model, with the option of rolling back to the build model sub-step to factor in debugging (The Modelling Agency, 2000 p.29).

Saturday, 25 May 2013

Dissertation Series - CRISP DM - Step Three Data Preperation


Data preparation is the step of ensuring that data used in the modelling step is as suitable as possible,
Select Data
The select data sub-step identifies what data will be included and what will be excluded (The Modelling Agency, 2000 p.22), the reasons for inclusion and exclusion can range from the age of the data (as more recent data being more valid/relevant) or completeness (as incomplete data can give an inaccurate picture) (Dunham, 2003 p.15).  These exclusions/inclusions should be clearly indicated so that the user digesting/acting upon the data knows what data he/she is acting upon.


Clean data
Cleaning data refers to the correction/removal of faulty or incomplete data, this can be extended to making use of estimation/prediction to populate missing data (The Modelling Agency, 2000 p.24).  In a similar way to the select data phase it is important that any caveats applied to the data are documented and identified when making use of the data.
Construct data
Data may need to be assembled before use in data mining; there may be calculations that need to be applied to the data itself to produce meaningful/useful data for the model (such as calculating the age of a subject based on today’s date and their birth date) or even fields that are split such as post codes which are sometimes stored in two separate parts (The Modelling Agency, 2000 p.24).
Integrate data
Once the data has been through the previous steps it is necessary to put it together, the data included is most likely held in numerous tables and possibly even multiple databases which require linking together (The Modelling Agency, 2000 p.25).  Aggregations may need to be performed to deal with possible duplication, which would have been highlighted in the explore data sub-step (The Modelling Agency, 2000 p.25).
Format data
The final sub-step of data preparation is to make necessary adjustments to the data so that is suitable for use in the data mining tool, changes may be needed such as the introduction of composite keys or restructuring of data (The Modelling Agency, 2000 p.25).

Friday, 24 May 2013

Dissertation Series - CRISP DM - Step one Business Understanding


A development methodology specific to data mining is CRISP-DM (CRoss Industry Standard Process for Data Mining) a methodology conceived in 1996 by IT professionals and was based on their experiences of data mining implementations (The modelling agency, 2000 p.3).
CRISP DM is broken into six distinct steps, at some points the outcome of the step may require repeating the previous step.
Step 1 – Business understanding
This step is broken into several sub-steps which set the scene for the data mining development, it is broadly similar to the PID (Project Initiation Document) that makes up a PRINCE2 project (OGC, 2005 p.40-41).
Determine business objectives
Considers the business and its overall goals/objectives so as to set the scene (The Modelling Agency, 2000 p.16), discussing data warehouses Mukherjee and D’Souza (2003 p.84) agree with their statement that “DW implementation can be considered a success not only because it satisfies a need at a point in time, but also because it serves the continuing needs of an organization”.
Assess situation
Looks at available resources and any associated legal issues/risks (The Modelling Agency, 2000 p.17), this prevents undertaking work that cannot be completed due to resourcing issues and prevents work being undertaken that cannot be made use of because of legal issues.  The impact of the development can also be factored in to compare the intended value gained against the resource required (The Modelling Agency, 2000 p.18).
Determine data mining goals
It is important in any project to ensure that the aim and associated objectives are clear (OGC, 2005 p.50).  This sub-step of business understanding ensures that the goals are clearly defined and understood (The Modelling Agency, 2000 p.18), this allows the final outcome to be measured against these to ensure that the requirements have been met.
Project plan
The final sub-step of business understanding is the construction of a project plan, breaking the project into the steps that will be undertaken, the resources that will be required at each stage and identifies dependencies that may cause bottle necks in the delivery of the project (The Modelling Agency, 2000 p.19).  Traditional project management techniques/solutions can be made use of in undertaking this such as PRINCE2 and Microsoft Project.

Thursday, 23 May 2013

Dissertation Series - CRISP DM Step Six Deployment


Plan deployment
Deploying new software/solutions in an organisation requires a plan in order to avoid any issues or pitfalls; this could include raising awareness/allaying concerns amongst effected staff (Clark, 2012).  A deployment could also be carried out in a number of ways;-
Parallel adoption
The new system is run alongside existing systems, this does however mean that in some cases the effort is duplicated, although conversely if any issues are encountered or even if the new system completely fails then the old system is still in place (Weaver, 2004 p.232).
Phased adoption
This is where functionality of the new system is slowly phased in and teething problems emerge gradually rather than in one massive raft of changes (Weaver, 2004 p.232).
Pilot adoption
The pilot approach involves selecting a number of staff or a specific area of the business and introducing the system there, with the aim of gaining feedback and experience with the new systems to apply it when rolling out the new system to the rest of the organisation (Weaver, 2004 p.232).
Big bang adoption
The big bang approach is where a new system is introduced and replaces an existing system immediately with no crossover or where a new system (where an existing system is not in place) is introduced to the entire organisation in one phase.  Where existing systems are replaced using the big bang approach there can be issues encountered where the new system fails and there is no system in place to support the business activity (Weaver, 2004 p.232).

Plan monitoring and maintenance
The next sub-step involves putting controls in place so that any changes likely to affect the model are considered and documented (The Modelling Agency, 2000 p.33), an example of this would be changing the ways in which data is recorded.
Produce final report
A report is produced that documents the outcomes and products of the project (The Modelling Agency, 2000 p.33).
Review project
As with any development project a final review allows for lessons learnt during the project to be discussed and documented (OGC, 2005 p.333), this can mean that future projects take these into account and avoid making the same mistakes twice (The Modelling Agency, 2000 p.33).