Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för: SQL Server 2016 (13.x) och senare versioner 
Azure SQL Managed Instance
I del två i den här självstudieserien i fyra delar förbereder du data från en databas för att utföra klustring i R med SQL Server Machine Learning Services eller på stordatakluster.
I del två i den här självstudieserien i fyra delar förbereder du data från en databas för att utföra klustring i R med SQL Server Machine Learning Services.
I del två i den här självstudieserien i fyra delar förbereder du data från en databas för att utföra klustring i R med SQL Server 2016 R Services.
I del två i den här självstudieserien i fyra delar förbereder du data från en databas för att utföra klustring i R med Azure SQL Managed Instance Machine Learning Services.
I den här artikeln får du lära dig att:
- Avgränsa kunder längs olika dimensioner med hjälp av R
 - Läs in data från databasen i en R-dataram
 
I del ett installerade du förhandskraven och återställde exempeldatabasen.
I del tre får du lära dig hur du skapar och tränar en K-Means-klustermodell i R.
I del fyra får du lära dig hur du skapar en lagrad procedur i en databas som kan utföra klustring i R baserat på nya data.
Förutsättningar
- Del två i den här självstudien förutsätter att du har slutfört del ett.
 
Separata kunder
Skapa en ny RScript-fil i RStudio och kör följande skript. I SQL-frågan separerar du kunder längs följande dimensioner:
- orderRatio = returorderförhållande (totalt antal ordrar delvis eller helt returnerade jämfört med det totala antalet beställningar)
 - itemsRatio = return item ratio (totalt antal artiklar som returneras jämfört med antalet köpta artiklar)
 - monetaryRatio = förhållandet mellan returbelopp (totalt penningbelopp för poster som returneras jämfört med det köpta beloppet)
 - frequency = återfrekvens
 
I funktionen connStr ersätter du ServerName med din egen anslutningsinformation.
# Define the connection string to connect to the tpcxbb_1gb database
connStr <- "Driver=SQL Server;Server=ServerName;Database=tpcxbb_1gb;uid=Username;pwd=Password"
#Define the query to select data
input_query <- "
SELECT ss_customer_sk AS customer
    ,round(CASE 
            WHEN (
                       (orders_count = 0)
                    OR (returns_count IS NULL)
                    OR (orders_count IS NULL)
                    OR ((returns_count / orders_count) IS NULL)
                    )
                THEN 0.0
            ELSE (cast(returns_count AS NCHAR(10)) / orders_count)
            END, 7) AS orderRatio
    ,round(CASE 
            WHEN (
                     (orders_items = 0)
                  OR (returns_items IS NULL)
                  OR (orders_items IS NULL)
                  OR ((returns_items / orders_items) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_items AS NCHAR(10)) / orders_items)
            END, 7) AS itemsRatio
    ,round(CASE 
            WHEN (
                     (orders_money = 0)
                  OR (returns_money IS NULL)
                  OR (orders_money IS NULL)
                  OR ((returns_money / orders_money) IS NULL)
                 )
            THEN 0.0
            ELSE (cast(returns_money AS NCHAR(10)) / orders_money)
            END, 7) AS monetaryRatio
    ,round(CASE 
            WHEN (returns_count IS NULL)
            THEN 0.0
            ELSE returns_count
            END, 0) AS frequency
FROM (
    SELECT ss_customer_sk,
        -- return order ratio
        COUNT(DISTINCT (ss_ticket_number)) AS orders_count,
        -- return ss_item_sk ratio
        COUNT(ss_item_sk) AS orders_items,
        -- return monetary amount ratio
        SUM(ss_net_paid) AS orders_money
    FROM store_sales s
    GROUP BY ss_customer_sk
    ) orders
LEFT OUTER JOIN (
    SELECT sr_customer_sk,
        -- return order ratio
        count(DISTINCT (sr_ticket_number)) AS returns_count,
        -- return ss_item_sk ratio
        COUNT(sr_item_sk) AS returns_items,
        -- return monetary amount ratio
        SUM(sr_return_amt) AS returns_money
    FROM store_returns
    GROUP BY sr_customer_sk
    ) returned ON ss_customer_sk = sr_customer_sk";
Läsa in data i en dataram
Använd nu följande skript för att returnera resultatet från frågan till en R-dataram.
# Query using input_query and get the results back
# to data frame customer_data
library(RODBC)
ch <- odbcDriverConnect(connStr)
customer_data <- sqlQuery(ch, input_query)
# Take a look at the data just loaded
head(customer_data, n = 5);
Du bör se resultat som liknar följande.
  customer orderRatio itemsRatio monetaryRatio frequency
1    29727          0          0      0.000000         0
2    26429          0          0      0.041979         1
3    60053          0          0      0.065762         3
4    97643          0          0      0.037034         3
5    32549          0          0      0.031281         4
Rensa resurser
Om du inte ska fortsätta med den här självstudien tar du bort tpcxbb_1gb-databasen.
Nästa steg
I del två av den här självstudieserien lärde du dig att:
- Avgränsa kunder längs olika dimensioner med hjälp av R
 - Läs in data från databasen i en R-dataram
 
Om du vill skapa en maskininlärningsmodell som använder dessa kunddata följer du del tre i den här självstudieserien: