Extract insights from SAP ERP with no-code ML solutions with Amazon AppFlow and Amazon SageMaker Canvas

海外精选
海外精选的内容汇集了全球优质的亚马逊云科技相关技术内容。同时,内容中提到的“AWS” 是 “Amazon Web Services” 的缩写,在此网站不作为商标展示。
0
0
{"value":"\nCustomers in industries like consumer packaged goods, manufacturing, and retail are always looking for ways to empower their operational processes by enriching them with insights and analytics generated from data. Tasks like sales forecasting directly affect operations such as raw material planning, procurement, manufacturing, distribution, and inbound/outbound logistics, and it can have many levels of impact, from a single warehouse all the way to large-scale production facilities.\n\nSales representatives and managers use historical sales data to make informed predictions about future sales trends. Customers use SAP ERP Central Component (ECC) to manage planning for the manufacturing, sale, and distribution of goods. The sales and distribution (SD) module within SAP ECC helps manage sales orders. SAP systems are the primary source of historical sales data.\n\nSales representatives and managers have the domain knowledge and in-depth understanding of their sales data. However, they lack data science and programming skills to create machine learning (ML) models that can generate sales forecasts. They seek intuitive, simple-to-use tools to create ML models without writing a single line of code.\n\nTo help organizations achieve the agility and effectiveness that business analysts seek, we [introduced](https://aws.amazon.com/blogs/aws/announcing-amazon-sagemaker-canvas-a-visual-no-code-machine-learning-capability-for-business-analysts/) [Amazon SageMaker Canvas](https://aws.amazon.com/sagemaker/canvas/), a no-code ML solution that helps you accelerate delivery of ML solutions down to hours or days. SageMaker Canvas enables analysts to easily use available data in data lakes, data warehouses, and operational data stores; build ML models; and use them to make predictions interactively and for batch scoring on bulk datasets—all without writing a single line of code.\n\nIn this post, we show how to bring sales order data from SAP ECC to generate sales forecasts using an ML model built using SageMaker Canvas.\n\n#### **Solution overview**\n\nTo generate sales forecasts using SAP sales data, we need the collaboration of two personas: data engineers and business analysts (sales representatives and managers). Data engineers are responsible for configuring the data export from the SAP system to [Amazon Simple Storage](http://aws.amazon.com/s3) Service (Amazon S3) using [Amazon AppFlow](https://aws.amazon.com/appflow/), which business analysts can then run either on-demand or automatically (schedule-based) to refresh SAP data in the S3 bucket. Business analysts are then responsible for generating forecasts with the exported data using SageMaker Canvas. The following diagram illustrates this workflow.\n\n![image.png](https://dev-media.amazoncloud.cn/968457e7e8b44dceb4b20e7cb88d0f35_image.png)\n\nFor this post, we use SAP [NetWeaver Enterprise Procurement Model](https://help.sap.com/viewer/a602ff71a47c441bb3000504ec938fea/7.51.13/en-US/57e9f59831e94311852a2af18ab733b5.html) (EPM) for the sample data. EPM is generally used for demonstration and testing purposes in SAP. It uses common business process model and follows the business object (BO) paradigm to support a well-defined business logic. We used the SAP transaction SEPM_DG (data generator) to generate around 80,000 historical sales orders and created a HANA CDS view to aggregate the data by product ID, sales date, and city, as shown in the following code:\n\n```\n@AbapCatalog.sqlViewName: 'ZCDS_EPM_VIEW'\n@AbapCatalog.compiler.compareFilter: true\n@AbapCatalog.preserveKey: true\n@AccessControl.authorizationCheck: #CHECK\n@EndUserText.label: 'Sagemaker canvas sales order'\n@OData.publish: true \ndefine view ZCDS_EPM as select from epm_v_sales_data as sd\ninner join epm_v_bp as bp\n on sd.bp_id = bp.bp_id {\n key sd.product_id as productid,\n bp.city,\n concat( cast(\n Concat(\n Concat(\n Concat(substring(cast (sd.created_at as abap.char( 30 )), 1, 4), '-'),\n Concat(substring(cast (sd.created_at as abap.char( 30 )), 5, 2), '-')\n ),\n Substring(cast (sd.created_at as abap.char( 30 )), 7, 2)\n )\n as char10 preserving type),' 00:00:00') as saledate,\n cast(sum(sd.gross_amount) as abap.dec( 15, 3 )) as totalsales \n}\ngroup by sd.product_id,sd.created_at, bp.city\n```\nIn the next section, we expose this view using SAP OData services as ABAP structure, which allows us to extract the data with Amazon AppFlow.\n\nThe following table shows the representative historical sales data from SAP, which we use in this post.\n\n![image.png](1)\n\nThe data file is daily frequency historical data. It has four columns (```productid```, ```saledate```, ```city```, and ```totalsales```). We use SageMaker Canvas to build an ML model that is used to forecast ```totalsales```for ```productid ```in a particular city.\n\nThis post has been organized to show the activities and responsibilities for both data engineers and business analysts to generate product sales forecasts.\n\n#### **Data engineer: Extract, transform, and load the dataset from SAP to Amazon S3 with Amazon AppFlow**\n\nThe first task you perform as a data engineer is to run an extract, transform, and load (ETL) job on historical sales data from SAP ECC to an S3 bucket, which the business analyst uses as the source dataset for their forecasting model. For this, we use Amazon AppFlow, because it provides an out-of-the-box [SAP OData Connector](https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html) for ETL (as shown in the following diagram), with a simple UI to set up everything needed to configure the connection from the SAP ECC to the S3 bucket.\n\n![image.png](https://dev-media.amazoncloud.cn/053ad7ec9d894ad69fe0dae9a88b36c4_image.png)\n\n#### **Prerequisites**\n\nThe following are requirements to integrate Amazon AppFlow with SAP:\n\n- SAP NetWeaver Stack version 7.40 SP02 or above\n- Catalog service (OData v2.0/v2.0) enabled in SAP Gateway for service discovery\n- Support for client-side pagination and query options for SAP OData Service\n- HTTPS enabled connection to SAP\n\n#### **Authentication**\nAmazon AppFlow supports two authentication mechanisms to connect to SAP:\n\n- Basic – Authenticates using SAP OData user name and password.\n- OAuth 2.0 – Uses OAuth 2.0 configuration with an identity provider. OAuth 2.0 must be enabled for OData v2.0/v2.0 services.\n\n#### **Connection**\nAmazon AppFlow can connect to SAP ECC using a public SAP OData interface or a private connection. A private connection improves data privacy and security by transferring data through the private AWS network instead of the public internet. A private connection uses the VPC endpoint service for the SAP OData instance running in a VPC. The VPC endpoint service must have the Amazon AppFlow service principal```appflow.amazonaws.com``` as an allowed principal and must be available in at least more than 50% of the Availability Zones in an AWS Region.\n\n#### **Set up a flow in Amazon AppFlow**\n\nWe configure a new flow in Amazon AppFlow to run an ETL job on data from SAP to an S3 bucket. This flow allows for configuration of the SAP OData Connector as source, S3 bucket as destination, OData object selection, data mapping, data validation, and data filtering.\n\n1. Configure the SAP OData Connector as a data source by providing the following information:\na. Application host URL\nb. Application service path (catalog path)\nc. Port number\nd. Client number\ne. Logon language\nf. Connection type (private link or public)\ng. Authentication mode\nh. Connection name for the configuration\n\n![image.png](https://dev-media.amazoncloud.cn/e91625935c664aa1ac39d50260c471d9_image.png)\n\n2. After you configure the source, choose the OData object and subobject for the sales orders.\nGenerally, sales data from SAP is exported at a certain frequency, such as monthly or quarterly for the full size. For this post, choose the subobject option for the full-size export.\n\n![image.png](https://dev-media.amazoncloud.cn/7e6ecb158b0a4238a7c22fcb0e5c8276_image.png)\n\n3. Choose the S3 bucket as the destination.\nThe flow exports data to this bucket.\n\n![image.png](https://dev-media.amazoncloud.cn/68fdba9feb9c4cfaa3828a80f8cd0bff_image.png)\n\n4. For **Data format preference**, select **CSV format**.\n5. For **Data transfer preference**, select **Aggregate all records**.\n6. For **Filename preference**, select **Add a timestamp to the file name**.\n7. For **Folder structure preference**, select **No timestamped folder**.\nThe **record aggregation configuration** exports the full-size sales data from SAP combined in a single file. The file name ends with a timestamp in the YYYY-MM-DDTHH:mm:ss format in a single folder (flow name) within the S3 bucket. SageMaker Canvas imports data from this single file for model training and forecasting.\n\n![image.png](https://dev-media.amazoncloud.cn/2301826da2b3433a86df6756cf87faf3_image.png)\n\n8. Configure data mapping and validations to map the source data fields to destination data fields, and enable data validation rules as required.\n\n![image.png](https://dev-media.amazoncloud.cn/3ec7a96865b6459d94c30afb091248d5_image.png)\n\n9. You also configure data filtering conditions to filter out specific records if your requirement demands.\n\n![image.png](https://dev-media.amazoncloud.cn/a206d7f27992436a9eae8155e4090deb_image.png)\n\n10. Configure your flow trigger to decide whether the flow runs manually on-demand or automatically based on a schedule.\nWhen configured for a schedule, the frequency is based on how frequently the forecast needs to be generated (generally monthly, quarterly, or half-yearly).\n\n![image.png](https://dev-media.amazoncloud.cn/8056730e8115429f96f06ac61ccde0a9_image.png)\n\nAfter the flow is configured, the business analysts can run it on demand or based on the schedule to perform an ETL job on the sales order data from SAP to an S3 bucket.\n11. In addition to the Amazon AppFlow configuration, the data engineers also need to configure an [AWS Identity and Access Management](http://aws.amazon.com/iam) (IAM) role for SageMaker Canvas so that it can access other AWS services. For instructions, refer to [Give your users permissions to perform time series forecasting](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-set-up-forecast.html).\n\n#### **Business analyst: Use the historical sales data to train a forecasting model**\n\nLet’s switch gears and move to the business analyst side. As a business analyst, we’re looking for a visual, point-and-click service that makes it easy to build ML models and generate accurate predictions without writing a single line of code or having ML expertise. SageMaker Canvas fits the requirement as no-code ML solution.\n\nFirst, make sure that your IAM role is configured in such a way that SageMaker Canvas can access other AWS services. For more information, refer to [Give your users permissions to perform time series forecasting](https://docs.aws.amazon.com/en_jp/sagemaker/latest/dg/canvas-set-up-forecast.html), or you can ask for help to your Cloud Engineering team.\n\nWhen the data engineer is done setting up the Amazon AppFlow-based ETL configuration, the historical sales data is available for you in an S3 bucket.\n\n![image.png](https://dev-media.amazoncloud.cn/aad3f3796bf1490dba548d5193ac6aed_image.png)\n\nYou’re now ready to train a model with SageMaker Canvas! This typically involves four steps: importing data into the service, configuring the model training by selecting the appropriate model type, training the model, and finally generating forecasts using the model.\n\n#### **Import data in SageMaker Canvas**\n\nFirst, launch the SageMaker Canvas app from the [Amazon SageMaker](https://aws.amazon.com/sagemaker/) console or from your single sign-on access. If you don’t know how to do that, contact your administrator so that they can guide you through the process of setting up SageMaker Canvas. Make sure that you access the service in the same Region as the S3 bucket containing the historical dataset from SAP. You should see a screen like the following.\n\n![image.png](https://dev-media.amazoncloud.cn/1d861bad474c49d584c4e4f68a942e36_image.png)\n\nThen complete the following steps:\n\n1. In SageMaker Canvas, choose **Datasets** in the navigation pane.\n2. Choose **Import** to start importing data from the S3 bucket.\n\n![image.png](https://dev-media.amazoncloud.cn/57f6d011faf542028253038fdaee2583_image.png)\n\n3. On the import screen, choose the data file or object from the S3 bucket to import the training data.\n\n![image.png](https://dev-media.amazoncloud.cn/1313b7cdc2d343c3a723053a08079d87_image.png)\n\nYou can import multiple datasets in SageMaker Canvas. It also supports creating joins between the datasets by choosing **Join data**, which is particularly useful when the training data is spread across multiple files.\n\n**Configure and train the model**\n\nAfter you import the data, complete the following steps:\n\n1. Choose **Models** in the navigation pane.\n2. Choose **New model** to start configuration for training the forecast model.\n\n![image.png](https://dev-media.amazoncloud.cn/d5cc89ded78349399fd639c2ade4c7b4_image.png)\n\n3. For the new model, give it a suitable name, such as ```product_sales_forecast_model```.\n4. Select the sales dataset and choose **Select dataset**.\n\n![image.png](https://dev-media.amazoncloud.cn/3f53ffba7eef47d3aae49f3e0c8eb34e_image.png)\n\nAfter the dataset is selected, you can see data statistics and configure the model training on the Build tab.\n\n![image.png](https://dev-media.amazoncloud.cn/c1fd350d83d54500b26b0f31f52c3e7e_image.png)\n\n5. Select **totalsales** as the target column for the prediction.\nYou can see **Time series forecasting** is automatically selected as the model type.\n6. Choose **Configure**.\n\n![image.png](https://dev-media.amazoncloud.cn/2027beb710154f89b2a4f93f4cac59b3_image.png)\n\n7. In the **Time series forecasting** configuration section, choose **productid**for **Item ID column**.\n8. Choose **city**for **Group column**.\n9. Choose **saledate**for **Time stamp column**.\n10. For **Days**, enter ```120```.\n11. Choose **Save**.\nThis configures the model to make forecasts for ```totalsales ```for 120 days using ```saledate```based on historical data, which can be queried for ```productid```and ```city```.\n\n![image.png](https://dev-media.amazoncloud.cn/0c86b0fa08ef45ada431d528903ea637_image.png)\n\n12. When the model training configuration is complete, choose **Standard Build** to start the model training.\n\n\nThe **Preview model** option is not available for time series forecasting model type. You can review the estimated time for the model training on the **Analyze** tab.\n\n![image.png](https://dev-media.amazoncloud.cn/632c7dd3291947afbfdf531a9d8337fc_image.png)\n\nModel training might take 1–4 hours to complete, depending on the data size. When the model is ready, you can use it to generate the forecast.\n\n#### **Generate a forecast**\n\nWhen the model training is complete, it shows prediction accuracy of the model on the **Analyze **tab. For instance, in this example, it shows prediction accuracy as 92.87%.\n\n![image.png](https://dev-media.amazoncloud.cn/84920d136dd9453aa8acdbefc9c100f4_image.png)\n\nThe forecast is generated on the **Predict **tab. You can generate forecasts for all the items or a selected single item. It also shows the date range for which the forecast can be generated.\n\n![image.png](https://dev-media.amazoncloud.cn/4cc3cd7aa08f4c82a8536202e488db08_image.png)\n\nAs an example, choose the **Single item** option. Select **P-2** for **Item** and **Quito** for **Group** to generate a prediction for product P-2 for city Quito for the date range 2017-08-15 00:00:00 through 2017-12-13 00:00:00.\n\n![image.png](https://dev-media.amazoncloud.cn/e3f0742b74904dcd97036761d0812e31_image.png)\n\nThe generated forecast shows the average forecast as well as the upper and lower bound of the forecast. The forecast bounds help configure an aggressive or balanced approach for the forecast handling.\n\nYou can also download the generated forecast as a CSV file or image. The generated forecast CSV file is generally to used to work offline with the forecast data.\n\n![image.png](https://dev-media.amazoncloud.cn/94816028493943a7bbda0857733557c6_image.png)\n\nThe forecast is now generated for the time series data. When a new baseline of data becomes available for the forecast, you can change the dataset in SageMaker Canvas to retrain the forecast model using the new baseline.\n\n![image.png](https://dev-media.amazoncloud.cn/77cea97dd194441596a7863a02010043_image.png)\n\nYou can retrain the model multiple times as and when the training data changes.\n\n#### **Clean up**\n\nTo avoid incurring future [session charges](https://aws.amazon.com/sagemaker/canvas/pricing), log out of SageMaker Canvas.\n\n![image.png](https://dev-media.amazoncloud.cn/26bfea6caa7e47918c7e16307d2f9d3c_image.png)\n\n#### **Conclusion**\n\nIn this post, you learned how the Amazon AppFlow SAP OData Connector exports sales order data from the SAP system into an S3 bucket and then how to use SageMaker Canvas to build a model for forecasting.\n\nYou can use SageMaker Canvas for any SAP time series data scenarios, such as expense or revenue prediction. The entire forecast generation process is configuration driven. Sales managers and representatives can generate sales forecasts repeatedly per month or per quarter with a refreshed set of data in a fast, straightforward, and intuitive way without writing a single line of code. This helps improve productivity and enables quick planning and decisions.\n\nTo get started, learn more about SageMaker Canvas and Amazon AppFlow using the following resources:\n\n- [Amazon SageMaker Canvas Developer Guide](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html)\n- [Announcing Amazon SageMaker Canvas – a Visual, No Code Machine Learning Capability for Business Analysts](https://aws.amazon.com/blogs/aws/announcing-amazon-sagemaker-canvas-a-visual-no-code-machine-learning-capability-for-business-analysts/)\n- [Extract data from SAP ERP and BW with Amazon AppFlow](https://aws.amazon.com/blogs/awsforsap/extract-data-from-sap-erp-and-bw-with-amazon-appflow/)\n- [SAP OData Connector configuration](https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html)\n\n#### **About the Authors**\n\n![image.png](https://dev-media.amazoncloud.cn/2f6c7654aa474d518319843117e58242_image.png)\n\n**Brajendra Singh** is solution architect in Amazon Web Services working with enterprise customers. He has strong developer background and is a keen enthusiast for data and machine learning solutions.\n\n![image.png](https://dev-media.amazoncloud.cn/11acf9b344da4afc98b3d782f3501374_image.png)\n\n**Davide Gallitelli** is a Specialist Solutions Architect for AI/ML in the EMEA region. He is based in Brussels and works closely with customers throughout Benelux. He has been a developer since he was very young, starting to code at the age of 7. He started learning AI/ML at university, and has fallen in love with it since then.\n\n\n","render":"<p>Customers in industries like consumer packaged goods, manufacturing, and retail are always looking for ways to empower their operational processes by enriching them with insights and analytics generated from data. Tasks like sales forecasting directly affect operations such as raw material planning, procurement, manufacturing, distribution, and inbound/outbound logistics, and it can have many levels of impact, from a single warehouse all the way to large-scale production facilities.</p>\n<p>Sales representatives and managers use historical sales data to make informed predictions about future sales trends. Customers use SAP ERP Central Component (ECC) to manage planning for the manufacturing, sale, and distribution of goods. The sales and distribution (SD) module within SAP ECC helps manage sales orders. SAP systems are the primary source of historical sales data.</p>\n<p>Sales representatives and managers have the domain knowledge and in-depth understanding of their sales data. However, they lack data science and programming skills to create machine learning (ML) models that can generate sales forecasts. They seek intuitive, simple-to-use tools to create ML models without writing a single line of code.</p>\n<p>To help organizations achieve the agility and effectiveness that business analysts seek, we <a href=\"https://aws.amazon.com/blogs/aws/announcing-amazon-sagemaker-canvas-a-visual-no-code-machine-learning-capability-for-business-analysts/\" target=\"_blank\">introduced</a> <a href=\"https://aws.amazon.com/sagemaker/canvas/\" target=\"_blank\">Amazon SageMaker Canvas</a>, a no-code ML solution that helps you accelerate delivery of ML solutions down to hours or days. SageMaker Canvas enables analysts to easily use available data in data lakes, data warehouses, and operational data stores; build ML models; and use them to make predictions interactively and for batch scoring on bulk datasets—all without writing a single line of code.</p>\n<p>In this post, we show how to bring sales order data from SAP ECC to generate sales forecasts using an ML model built using SageMaker Canvas.</p>\n<h4><a id=\"Solution_overview_11\"></a><strong>Solution overview</strong></h4>\n<p>To generate sales forecasts using SAP sales data, we need the collaboration of two personas: data engineers and business analysts (sales representatives and managers). Data engineers are responsible for configuring the data export from the SAP system to <a href=\"http://aws.amazon.com/s3\" target=\"_blank\">Amazon Simple Storage</a> Service (Amazon S3) using <a href=\"https://aws.amazon.com/appflow/\" target=\"_blank\">Amazon AppFlow</a>, which business analysts can then run either on-demand or automatically (schedule-based) to refresh SAP data in the S3 bucket. Business analysts are then responsible for generating forecasts with the exported data using SageMaker Canvas. The following diagram illustrates this workflow.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/968457e7e8b44dceb4b20e7cb88d0f35_image.png\" alt=\"image.png\" /></p>\n<p>For this post, we use SAP <a href=\"https://help.sap.com/viewer/a602ff71a47c441bb3000504ec938fea/7.51.13/en-US/57e9f59831e94311852a2af18ab733b5.html\" target=\"_blank\">NetWeaver Enterprise Procurement Model</a> (EPM) for the sample data. EPM is generally used for demonstration and testing purposes in SAP. It uses common business process model and follows the business object (BO) paradigm to support a well-defined business logic. We used the SAP transaction SEPM_DG (data generator) to generate around 80,000 historical sales orders and created a HANA CDS view to aggregate the data by product ID, sales date, and city, as shown in the following code:</p>\n<pre><code class=\"lang-\">@AbapCatalog.sqlViewName: 'ZCDS_EPM_VIEW'\n@AbapCatalog.compiler.compareFilter: true\n@AbapCatalog.preserveKey: true\n@AccessControl.authorizationCheck: #CHECK\n@EndUserText.label: 'Sagemaker canvas sales order'\n@OData.publish: true \ndefine view ZCDS_EPM as select from epm_v_sales_data as sd\ninner join epm_v_bp as bp\n on sd.bp_id = bp.bp_id {\n key sd.product_id as productid,\n bp.city,\n concat( cast(\n Concat(\n Concat(\n Concat(substring(cast (sd.created_at as abap.char( 30 )), 1, 4), '-'),\n Concat(substring(cast (sd.created_at as abap.char( 30 )), 5, 2), '-')\n ),\n Substring(cast (sd.created_at as abap.char( 30 )), 7, 2)\n )\n as char10 preserving type),' 00:00:00') as saledate,\n cast(sum(sd.gross_amount) as abap.dec( 15, 3 )) as totalsales \n}\ngroup by sd.product_id,sd.created_at, bp.city\n</code></pre>\n<p>In the next section, we expose this view using SAP OData services as ABAP structure, which allows us to extract the data with Amazon AppFlow.</p>\n<p>The following table shows the representative historical sales data from SAP, which we use in this post.</p>\n<p><img src=\"data:image/png;base64,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AARAAARAAARAAARAoG8EEAj3DTUyAgEQAAEQAAEQAAEQAAEQAAEQSAMBBMJpqAXIAAIgAAIgAAIgAAIgAAIgAAIg0DcCCIT7hhoZgQAIgAAIgAAIgAAIgAAIgAAIpIEAAuE01AJkAAEQAAEQAAEQAAEQAAEQAAEQ6BsBBMJ9Q42MQAAEQAAEQAAEQAAEQAAEQAAE0kAAgXAaagEygAAIgAAIgAAIgAAIgAAIgAAI9I0AAuG+oUZGIAACIAACIAACIAACIAACIAACaSCAQDgNtQAZQAAEQAAEQAAEQAAEQAAEQAAE+kYAgXDfUCMjEAABEAABEAABEAABEAABEACBNBBAIJyGWoAMIAACIAACIAACIAACIAACIAACfSOAQLhvqJERCIAACIAACIAACIAACIAACIBAGgggEE5DLUAGEAABEAABEAABEAABEAABEACBvhFAINw31MgIBEAABEAABEAABEAABEAABEAgDQQQCKehFiADCIAACIAACIAACIAACIAACIBA3wggEO4bamQEAiAAAiAAAiAAAiAAAiAAAiCQBgIIhNNQC5ABBEAABEAABEAABEAABEAABECgbwQQCPcNNTICARAAARAAARAAARAAARAAARBIAwEEwmmoBcgAAiAAAiAAAiAAAiAAAiAAAiDQNwIIhPuGGhmBAAiAAAiAAAiAAAiAAAiAAAikgcD/A0041/zlv+4vAAAAAElFTkSuQmCC\" alt=\"image.png\" rel=\"1\" /></p>\n<p>The data file is daily frequency historical data. It has four columns (<code>productid</code>, <code>saledate</code>, <code>city</code>, and <code>totalsales</code>). We use SageMaker Canvas to build an ML model that is used to forecast <code>totalsales</code>for <code>productid </code>in a particular city.</p>\n<p>This post has been organized to show the activities and responsibilities for both data engineers and business analysts to generate product sales forecasts.</p>\n<h4><a id=\"Data_engineer_Extract_transform_and_load_the_dataset_from_SAP_to_Amazon_S3_with_Amazon_AppFlow_54\"></a><strong>Data engineer: Extract, transform, and load the dataset from SAP to Amazon S3 with Amazon AppFlow</strong></h4>\n<p>The first task you perform as a data engineer is to run an extract, transform, and load (ETL) job on historical sales data from SAP ECC to an S3 bucket, which the business analyst uses as the source dataset for their forecasting model. For this, we use Amazon AppFlow, because it provides an out-of-the-box <a href=\"https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html\" target=\"_blank\">SAP OData Connector</a> for ETL (as shown in the following diagram), with a simple UI to set up everything needed to configure the connection from the SAP ECC to the S3 bucket.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/053ad7ec9d894ad69fe0dae9a88b36c4_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"Prerequisites_60\"></a><strong>Prerequisites</strong></h4>\n<p>The following are requirements to integrate Amazon AppFlow with SAP:</p>\n<ul>\n<li>SAP NetWeaver Stack version 7.40 SP02 or above</li>\n<li>Catalog service (OData v2.0/v2.0) enabled in SAP Gateway for service discovery</li>\n<li>Support for client-side pagination and query options for SAP OData Service</li>\n<li>HTTPS enabled connection to SAP</li>\n</ul>\n<h4><a id=\"Authentication_69\"></a><strong>Authentication</strong></h4>\n<p>Amazon AppFlow supports two authentication mechanisms to connect to SAP:</p>\n<ul>\n<li>Basic – Authenticates using SAP OData user name and password.</li>\n<li>OAuth 2.0 – Uses OAuth 2.0 configuration with an identity provider. OAuth 2.0 must be enabled for OData v2.0/v2.0 services.</li>\n</ul>\n<h4><a id=\"Connection_75\"></a><strong>Connection</strong></h4>\n<p>Amazon AppFlow can connect to SAP ECC using a public SAP OData interface or a private connection. A private connection improves data privacy and security by transferring data through the private AWS network instead of the public internet. A private connection uses the VPC endpoint service for the SAP OData instance running in a VPC. The VPC endpoint service must have the Amazon AppFlow service principal<code>appflow.amazonaws.com</code> as an allowed principal and must be available in at least more than 50% of the Availability Zones in an AWS Region.</p>\n<h4><a id=\"Set_up_a_flow_in_Amazon_AppFlow_78\"></a><strong>Set up a flow in Amazon AppFlow</strong></h4>\n<p>We configure a new flow in Amazon AppFlow to run an ETL job on data from SAP to an S3 bucket. This flow allows for configuration of the SAP OData Connector as source, S3 bucket as destination, OData object selection, data mapping, data validation, and data filtering.</p>\n<ol>\n<li>Configure the SAP OData Connector as a data source by providing the following information:<br />\na. Application host URL<br />\nb. Application service path (catalog path)<br />\nc. Port number<br />\nd. Client number<br />\ne. Logon language<br />\nf. Connection type (private link or public)<br />\ng. Authentication mode<br />\nh. Connection name for the configuration</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/e91625935c664aa1ac39d50260c471d9_image.png\" alt=\"image.png\" /></p>\n<ol start=\"2\">\n<li>After you configure the source, choose the OData object and subobject for the sales orders.<br />\nGenerally, sales data from SAP is exported at a certain frequency, such as monthly or quarterly for the full size. For this post, choose the subobject option for the full-size export.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/7e6ecb158b0a4238a7c22fcb0e5c8276_image.png\" alt=\"image.png\" /></p>\n<ol start=\"3\">\n<li>Choose the S3 bucket as the destination.<br />\nThe flow exports data to this bucket.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/68fdba9feb9c4cfaa3828a80f8cd0bff_image.png\" alt=\"image.png\" /></p>\n<ol start=\"4\">\n<li>For <strong>Data format preference</strong>, select <strong>CSV format</strong>.</li>\n<li>For <strong>Data transfer preference</strong>, select <strong>Aggregate all records</strong>.</li>\n<li>For <strong>Filename preference</strong>, select <strong>Add a timestamp to the file name</strong>.</li>\n<li>For <strong>Folder structure preference</strong>, select <strong>No timestamped folder</strong>.<br />\nThe <strong>record aggregation configuration</strong> exports the full-size sales data from SAP combined in a single file. The file name ends with a timestamp in the YYYY-MM-DDTHH:mm:ss format in a single folder (flow name) within the S3 bucket. SageMaker Canvas imports data from this single file for model training and forecasting.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/2301826da2b3433a86df6756cf87faf3_image.png\" alt=\"image.png\" /></p>\n<ol start=\"8\">\n<li>Configure data mapping and validations to map the source data fields to destination data fields, and enable data validation rules as required.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/3ec7a96865b6459d94c30afb091248d5_image.png\" alt=\"image.png\" /></p>\n<ol start=\"9\">\n<li>You also configure data filtering conditions to filter out specific records if your requirement demands.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/a206d7f27992436a9eae8155e4090deb_image.png\" alt=\"image.png\" /></p>\n<ol start=\"10\">\n<li>Configure your flow trigger to decide whether the flow runs manually on-demand or automatically based on a schedule.<br />\nWhen configured for a schedule, the frequency is based on how frequently the forecast needs to be generated (generally monthly, quarterly, or half-yearly).</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/8056730e8115429f96f06ac61ccde0a9_image.png\" alt=\"image.png\" /></p>\n<p>After the flow is configured, the business analysts can run it on demand or based on the schedule to perform an ETL job on the sales order data from SAP to an S3 bucket.<br />\n11. In addition to the Amazon AppFlow configuration, the data engineers also need to configure an <a href=\"http://aws.amazon.com/iam\" target=\"_blank\">AWS Identity and Access Management</a> (IAM) role for SageMaker Canvas so that it can access other AWS services. For instructions, refer to <a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-set-up-forecast.html\" target=\"_blank\">Give your users permissions to perform time series forecasting</a>.</p>\n<h4><a id=\"Business_analyst_Use_the_historical_sales_data_to_train_a_forecasting_model_128\"></a><strong>Business analyst: Use the historical sales data to train a forecasting model</strong></h4>\n<p>Let’s switch gears and move to the business analyst side. As a business analyst, we’re looking for a visual, point-and-click service that makes it easy to build ML models and generate accurate predictions without writing a single line of code or having ML expertise. SageMaker Canvas fits the requirement as no-code ML solution.</p>\n<p>First, make sure that your IAM role is configured in such a way that SageMaker Canvas can access other AWS services. For more information, refer to <a href=\"https://docs.aws.amazon.com/en_jp/sagemaker/latest/dg/canvas-set-up-forecast.html\" target=\"_blank\">Give your users permissions to perform time series forecasting</a>, or you can ask for help to your Cloud Engineering team.</p>\n<p>When the data engineer is done setting up the Amazon AppFlow-based ETL configuration, the historical sales data is available for you in an S3 bucket.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/aad3f3796bf1490dba548d5193ac6aed_image.png\" alt=\"image.png\" /></p>\n<p>You’re now ready to train a model with SageMaker Canvas! This typically involves four steps: importing data into the service, configuring the model training by selecting the appropriate model type, training the model, and finally generating forecasts using the model.</p>\n<h4><a id=\"Import_data_in_SageMaker_Canvas_140\"></a><strong>Import data in SageMaker Canvas</strong></h4>\n<p>First, launch the SageMaker Canvas app from the <a href=\"https://aws.amazon.com/sagemaker/\" target=\"_blank\">Amazon SageMaker</a> console or from your single sign-on access. If you don’t know how to do that, contact your administrator so that they can guide you through the process of setting up SageMaker Canvas. Make sure that you access the service in the same Region as the S3 bucket containing the historical dataset from SAP. You should see a screen like the following.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/1d861bad474c49d584c4e4f68a942e36_image.png\" alt=\"image.png\" /></p>\n<p>Then complete the following steps:</p>\n<ol>\n<li>In SageMaker Canvas, choose <strong>Datasets</strong> in the navigation pane.</li>\n<li>Choose <strong>Import</strong> to start importing data from the S3 bucket.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/57f6d011faf542028253038fdaee2583_image.png\" alt=\"image.png\" /></p>\n<ol start=\"3\">\n<li>On the import screen, choose the data file or object from the S3 bucket to import the training data.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/1313b7cdc2d343c3a723053a08079d87_image.png\" alt=\"image.png\" /></p>\n<p>You can import multiple datasets in SageMaker Canvas. It also supports creating joins between the datasets by choosing <strong>Join data</strong>, which is particularly useful when the training data is spread across multiple files.</p>\n<p><strong>Configure and train the model</strong></p>\n<p>After you import the data, complete the following steps:</p>\n<ol>\n<li>Choose <strong>Models</strong> in the navigation pane.</li>\n<li>Choose <strong>New model</strong> to start configuration for training the forecast model.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/d5cc89ded78349399fd639c2ade4c7b4_image.png\" alt=\"image.png\" /></p>\n<ol start=\"3\">\n<li>For the new model, give it a suitable name, such as <code>product_sales_forecast_model</code>.</li>\n<li>Select the sales dataset and choose <strong>Select dataset</strong>.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/3f53ffba7eef47d3aae49f3e0c8eb34e_image.png\" alt=\"image.png\" /></p>\n<p>After the dataset is selected, you can see data statistics and configure the model training on the Build tab.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/c1fd350d83d54500b26b0f31f52c3e7e_image.png\" alt=\"image.png\" /></p>\n<ol start=\"5\">\n<li>Select <strong>totalsales</strong> as the target column for the prediction.<br />\nYou can see <strong>Time series forecasting</strong> is automatically selected as the model type.</li>\n<li>Choose <strong>Configure</strong>.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/2027beb710154f89b2a4f93f4cac59b3_image.png\" alt=\"image.png\" /></p>\n<ol start=\"7\">\n<li>In the <strong>Time series forecasting</strong> configuration section, choose <strong>productid</strong>for <strong>Item ID column</strong>.</li>\n<li>Choose <strong>city</strong>for <strong>Group column</strong>.</li>\n<li>Choose <strong>saledate</strong>for <strong>Time stamp column</strong>.</li>\n<li>For <strong>Days</strong>, enter <code>120</code>.</li>\n<li>Choose <strong>Save</strong>.<br />\nThis configures the model to make forecasts for <code>totalsales </code>for 120 days using <code>saledate</code>based on historical data, which can be queried for <code>productid</code>and <code>city</code>.</li>\n</ol>\n<p><img src=\"https://dev-media.amazoncloud.cn/0c86b0fa08ef45ada431d528903ea637_image.png\" alt=\"image.png\" /></p>\n<ol start=\"12\">\n<li>When the model training configuration is complete, choose <strong>Standard Build</strong> to start the model training.</li>\n</ol>\n<p>The <strong>Preview model</strong> option is not available for time series forecasting model type. You can review the estimated time for the model training on the <strong>Analyze</strong> tab.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/632c7dd3291947afbfdf531a9d8337fc_image.png\" alt=\"image.png\" /></p>\n<p>Model training might take 1–4 hours to complete, depending on the data size. When the model is ready, you can use it to generate the forecast.</p>\n<h4><a id=\"Generate_a_forecast_201\"></a><strong>Generate a forecast</strong></h4>\n<p>When the model training is complete, it shows prediction accuracy of the model on the **Analyze **tab. For instance, in this example, it shows prediction accuracy as 92.87%.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/84920d136dd9453aa8acdbefc9c100f4_image.png\" alt=\"image.png\" /></p>\n<p>The forecast is generated on the **Predict **tab. You can generate forecasts for all the items or a selected single item. It also shows the date range for which the forecast can be generated.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/4cc3cd7aa08f4c82a8536202e488db08_image.png\" alt=\"image.png\" /></p>\n<p>As an example, choose the <strong>Single item</strong> option. Select <strong>P-2</strong> for <strong>Item</strong> and <strong>Quito</strong> for <strong>Group</strong> to generate a prediction for product P-2 for city Quito for the date range 2017-08-15 00:00:00 through 2017-12-13 00:00:00.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/e3f0742b74904dcd97036761d0812e31_image.png\" alt=\"image.png\" /></p>\n<p>The generated forecast shows the average forecast as well as the upper and lower bound of the forecast. The forecast bounds help configure an aggressive or balanced approach for the forecast handling.</p>\n<p>You can also download the generated forecast as a CSV file or image. The generated forecast CSV file is generally to used to work offline with the forecast data.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/94816028493943a7bbda0857733557c6_image.png\" alt=\"image.png\" /></p>\n<p>The forecast is now generated for the time series data. When a new baseline of data becomes available for the forecast, you can change the dataset in SageMaker Canvas to retrain the forecast model using the new baseline.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/77cea97dd194441596a7863a02010043_image.png\" alt=\"image.png\" /></p>\n<p>You can retrain the model multiple times as and when the training data changes.</p>\n<h4><a id=\"Clean_up_227\"></a><strong>Clean up</strong></h4>\n<p>To avoid incurring future <a href=\"https://aws.amazon.com/sagemaker/canvas/pricing\" target=\"_blank\">session charges</a>, log out of SageMaker Canvas.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/26bfea6caa7e47918c7e16307d2f9d3c_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"Conclusion_233\"></a><strong>Conclusion</strong></h4>\n<p>In this post, you learned how the Amazon AppFlow SAP OData Connector exports sales order data from the SAP system into an S3 bucket and then how to use SageMaker Canvas to build a model for forecasting.</p>\n<p>You can use SageMaker Canvas for any SAP time series data scenarios, such as expense or revenue prediction. The entire forecast generation process is configuration driven. Sales managers and representatives can generate sales forecasts repeatedly per month or per quarter with a refreshed set of data in a fast, straightforward, and intuitive way without writing a single line of code. This helps improve productivity and enables quick planning and decisions.</p>\n<p>To get started, learn more about SageMaker Canvas and Amazon AppFlow using the following resources:</p>\n<ul>\n<li><a href=\"https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html\" target=\"_blank\">Amazon SageMaker Canvas Developer Guide</a></li>\n<li><a href=\"https://aws.amazon.com/blogs/aws/announcing-amazon-sagemaker-canvas-a-visual-no-code-machine-learning-capability-for-business-analysts/\" target=\"_blank\">Announcing Amazon SageMaker Canvas – a Visual, No Code Machine Learning Capability for Business Analysts</a></li>\n<li><a href=\"https://aws.amazon.com/blogs/awsforsap/extract-data-from-sap-erp-and-bw-with-amazon-appflow/\" target=\"_blank\">Extract data from SAP ERP and BW with Amazon AppFlow</a></li>\n<li><a href=\"https://docs.aws.amazon.com/appflow/latest/userguide/sapodata.html\" target=\"_blank\">SAP OData Connector configuration</a></li>\n</ul>\n<h4><a id=\"About_the_Authors_246\"></a><strong>About the Authors</strong></h4>\n<p><img src=\"https://dev-media.amazoncloud.cn/2f6c7654aa474d518319843117e58242_image.png\" alt=\"image.png\" /></p>\n<p><strong>Brajendra Singh</strong> is solution architect in Amazon Web Services working with enterprise customers. He has strong developer background and is a keen enthusiast for data and machine learning solutions.</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/11acf9b344da4afc98b3d782f3501374_image.png\" alt=\"image.png\" /></p>\n<p><strong>Davide Gallitelli</strong> is a Specialist Solutions Architect for AI/ML in the EMEA region. He is based in Brussels and works closely with customers throughout Benelux. He has been a developer since he was very young, starting to code at the age of 7. He started learning AI/ML at university, and has fallen in love with it since then.</p>\n"}
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭
contact-us