Antag att du tittar på ett kolumnschema som visar årliga försäljningsuppgifter för ditt företag, där varje kolumn representerar ett enda år. Om du klickar på en kolumn går du en nivå djup för att se kvartalsdata. Nu om du klickar en gång till kommer du till månadsvisa försäljningsuppgifter.
Vad du gör här borrar ner från årligen till kvartalsvis till månadsdata med hjälp av ett borr ner diagram. Drill-down-diagrammen låter dig klicka på enskilda data-tomter för att avslöja mer detaljer om det (en dataplot avser en kolumn i kolumnschema, rader i ett linjediagram eller pajskivor i ett cirkeldiagram).
Bore diagrammar är mycket användbara i företagsrapporter och analyspaneler. Och i den här handledningen kommer jag att täcka steg-för-steg-processen för att skapa ett nedgraderingsschema med FusionCharts JavaScript-kartbibliotek. Vi ska hämta de data som finns i en MySQL-databas med PHP, och använd sedan FusionCharts kärnbibliotek och dess PHP-diagram wrapper för att plotta vårt diagram.
Här är vad vi gör idag: (du kan se live version här eller ladda ner källkoden med den här länken).
Det är ett 2D kolumnschema med två nivåer borr ned. Första nivån innehåller årliga försäljningsdata för 6 år. Om du klickar på något år kan du se kvartalsdata för det aktuella året (andra nivån).
Jag har delat hela processen i sju steg:
För att göra diagram i detta projekt behöver vi både FusionCharts 'core JS-bibliotek och dess PHP-wrapper:
fusioncharts.js
- kommer att inkluderas med hjälp av HTML
tag. fusioncharts.php
- will go inside PHP code.Here is how our PHP and HTML code will look like after this step:
När vi har inkluderat alla beroenden måste vi initiera anslutningen med vår databas för att hämta data för diagrammet.
Så här inleder och validerar vi databasanslutning i PHP:
connect_error) exit ("Det uppstod ett fel med din anslutning:". $ dbhandle-> connect_error); ?>
För att upprätta anslutningen med MySQL-databasen bör dessa fyra parametrar anges:
lokal värd
.rot
.$ dbhandle
etablerar anslutning till databasen. Jag har inkluderat dummyvärden i ovanstående kodbit, och du måste ersätta värden för $ hostdb
, $ userdb
, $ passdb
, och $ namedb
med faktiska värden för din databas.
När anslutningen med MySQL-databasen har upprättats kan vi använda SQL-förfrågan nedan för att hämta data för vårt diagram:
// SQL-fråga för moderkortet $ strQuery = "SELECT Year, Sales FROM yearly_sales"; // Utför frågan, annars returnera felmeddelandet $ result = $ dbhandle-> query ($ strQuery) eller avsluta ("Felkod ($ dbhandle-> errno): $ dbhandle-> error");
Om fråga ($ strQuery
) körs framgångsrikt, data kommer att fyllas i $ result
.
Om du följde alla ovanstående steg korrekt tills nu, borde du ha hämtat data från förfrågan i $ result
variabel.
För att skapa JSON-data i korrekt format skapar vi en associativ array - $ arrData
- och tryck på alla diagramkonfigurationsattribut och data i den som visas i koden nedan:
// om frågan returnerar ett giltigt svar, förbereder JSON-arrayen. om ($ resultat) // '$ arrData' innehåller diagrammen alternativ och data. $ arrData = array ("chart" => array ("caption" => "YoY-försäljningen - KFC", "xAxisName" => "Year", // andra diagramattribut)); // skapa en matris för parent-chart $ arrData ["data"] = array (); // tryck data i array medan ($ row = mysqli_fetch_array ($ result)) array_push ($ arrData ["data"], array ("label" => $ row ["Year"], "value" => $ rad ["Försäljning"], "länk" => "newchart-json-". $ Rad ["År"]));
Denna kod innehåller JSON-data för moderkortet. De länk
Attribut i JSON-data hänvisar till nästa diagram som ska göras, efter att ha klickat på enskild dataplot. För en mer detaljerad beskrivning kan du besöka den här officiella dokumentationssidan.
För att borra ner till nästa nivå måste vi hämta data igen med hjälp av variabeln $ resultQuarterly
från respektive databastabell (kvartalsvisa försäljningar). Detta liknar vad vi gjorde i steg 3. Koden för samma visas nedan:
$ strQuarterly = "SELECT Kvartal, Försäljning, År FRÅN quarterly_sales WHERE 1"; $ resultQuarterly = $ dbhandle-> query ($ strQuarterly) eller exit ("Felkod ($ dbhandle-> errno): $ dbhandle-> error");
Den associativa gruppen $ arrData
bifogas med barndiagramdata för varje parent-data-tomt, men här kommer uppgifterna under länkad data
. Koden för detta visas nedan med relaterade kommentarer:
// linkeddata ansvarar för att mata data och kartlägga alternativ till barnscheman. $ arrData ["linkeddata"] = array (); $ i = 0; om ($ resultQuarterly) while ($ row = mysqli_fetch_array ($ resultQuarterly)) $ year = $ row ['Year']; om isset ($ arrData ["linkeddata"] [$ i - 1]) && $ arrData ["linkeddata"] [$ i - 1] ["id"] == $ år) array_push ($ arrData ["linkeddata "] [$ i - 1] [" linkedchart "] [" data "], array (" label "=> $ rad [" Quarter "]," value "=> $ rad [" Försäljning "])); array_push ($ arrData ["linkeddata"], array ("id" => "$ år", "linkedchart" => array ("diagram" => array ("caption" => "QoQ Försäljning - KFC för $ "," xAxisName "=>" Quarter "," yAxisName "=>" Försäljning "," paletteColors "=>" # D5555C "," baseFont "=>" Öppna Sans " ), "data" => array (array ("label" => $ row ["Quarter"], "value" => $ rad ["Försäljning"])))))); $ I ++;
Nu har vi vår associativa array redo med data i variabeln $ arrData
och äntligen kodar vi matrisen i vårt JSON-format med json_encode ()
metod. Variabeln $ jsonEncodedData
Håller data för diagrammet med en nedrullningsfunktion.
$ jsonEncodedData = json_encode ($ arrData);
En HTML Som nästa steg kommer vi att skapa diagraminstans och överföra diagramtypen, dess dimensioner, container-ID och andra detaljer för att göra diagrammet. Här är mallen för att skapa FusionCharts-instans: Här är koden för att skapa FusionCharts-instans (med ovanstående mall), gör diagrammet och slutligen stänga databasanslutningen: Om du hämtade källkoden för det här projektet måste du ha märkt några parametrar under Här är några förklaringar på några viktiga attribut som jag har använt i min kod: Det finns hundratals attribut som du kan använda för att anpassa ditt diagram och det är praktiskt taget omöjligt att beskriva allt i det här inlägget. Så ovanför har jag bara listat några viktiga, och för mer information kan du besöka sidan Siddiagram för 2D kolumndiagram. Jag försökte täcka allt i detalj ovan, men du är tvungen att möta utmaningar när du försöker göra det själv eller vill ta det här konceptet vidare. Så att hjälpa dig på din resa, här är några viktiga resurser: Skriv gärna dina frågor / feedback / förslag i kommentarfältet nedan. Alltid gärna chatta och hjälp!// Syntax för förekomsten - nya FusionCharts ("diagramtyp", "diagram id", "diagrambredd", "diagramhöjd", "div id att göra diagrammet", "typ av data", "faktiska data")
// Skapa FusionCharts Instance $ columnChart = nya FusionCharts ("column2d", "myFirstChart", 600, 300, "linked-chart", "json", "$ jsonEncodedData"); // FusionCharts Render Method $ columnChart-> render (); // Rendermetod // Slutför databasanslutning $ dbhandle-> close ();
Att göra dina diagram ser bättre ut
Diagram
array som vi inte diskuterade ovan. Dessa parametrar kontrollerar utseende och funktionalitet i ett diagram och kallas formellt som diagramattribut.
canvasBgColor
och bgcolor
: Du kan använda dessa två attribut för att styra bakgrundsfärgen på ditt diagrams duk och dess behållare.basefont
: Du kan använda det här attributet för att ange teckensnittsfamiljen för diagrammet. Du är inte begränsad till bara systemfonter, men du kan lägga till alla teckensnitt. Om du vill använda en anpassad typsnitt ska du inkludera källfilen för den fonten i HTML och ställa in den med hjälp av basefont
attribut. Vårt exempel använder Open Sans från Google Fonts.plotToolText
: Att visa ytterligare information om svävar är ett bra sätt att förbättra data med erfarenhet och det är här plotToolText
kommer in i bilden. Det låter dig anpassa verktygstipset för diagrammet. Du kan använda HTML - tema
: Detta attribut hjälper dig att behålla en konsekvent design över alla dina diagram. Du kan definiera ett diagrams kosmetika i en fil och inkludera det med tema
Attribut att ha en gemensam design för alla dina diagram. Du kan lära dig mer om det på denna temapersonals dokumentationssida.Fler resurser