SlideShare a Scribd company logo
1 of 21
Custom Data Visualizations in Design Studio 
What , Why, How 
Jeroen van der A What Why How
WHO is Jeroen van der A?
WHAT 
is Data Visualization
Simplify Compare Attention Explore 
Perspectives Why? Sceptical Respond
WHY 
is Data Visualization important?
WH Y is Data Visualization important? 
Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye 
oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d 
Oiroperpigreogapjgaenrgmbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg 
Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye 
oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d 
Oiroperpigreogapjgaealertfbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg 
Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye 
oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d 
Oiroperpigreogapjgaenrgmbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg
WH Y is Data Visualization important? 
My Dog 
My dog is a boxer. He is a playful 
dog. You can always see him 
jumping around and enjoying 
himself. He has a light brown fur 
With a white chest. On his chest 
he has a few black spots His paws 
are also white.
WH Y is Data Visualization important? 
Anscombe's quartet 
Same mean, variance, correllation and regression, but dataset is very different 
Property Value 
Mean of x 9 
Sample variance of x 11 
Mean of y 7.50 
Sample variance of y 4.122 or 4.127 
Correlation between x and y 0.816 
Linear regression line 
y = 3.00 + 0.500x
HOW 
Do you do create them 
in Design Studio ?
H OWdo you create them? 
Example
H OWdo you create them? 
SDK Design Studio Explained 
• Contribution.xml 
• Init(), afterUpdate() 
• Creating Methods
<component id="WinLoss" title="WinLoss Graph" icon="res/icons/winloss.png" 
handlerType="div" group="analytics"> 
<stdInclude kind="d3"/> 
<jsInclude>res/js/winloss.js</jsInclude> 
<cssInclude>res/css/winloss.css</cssInclude> 
<property id="randomgraphs" title="Number of random Graphs" type="int"/> 
<property id="onclick" type="ScriptText" title="On Click" group="Events"/> 
<property type="int" title="number of Columns" id="numberofcolumns"/> 
<property type="int" title="Extra room for labels" id="extralabelroom"/> 
<property type="int" title="Line Height adjusmtment" id="adjustlineheight"/> 
<property type="int" title="Adjust header height" id="adjustheader"/> 
<property type="int" title="Adjust subheader height" id="adjustsub"/> 
<property type="float" title="Margin between columns" id="margin"/> 
<initialization> 
<defaultValue property="randomgraphs">4</defaultValue> 
<defaultValue property="numberofcolumns">1</defaultValue> 
<defaultValue property="margin">0.1</defaultValue> 
<defaultValue property="WIDTH">600</defaultValue> 
<defaultValue property="HEIGHT">400</defaultValue> 
</initialization> 
</component>
sap.designstudio.sdk.Component.subclass(“my.sdk.Component", 
function() { 
Var properties = {} 
this.margin = function(e) 
{ if (e === undefined) {return properties.margin;} else 
{properties.margin = e; return this;}}; 
have you got a value for me. 
No? I have a value for you 
this.init = function() 
{ set up the basics } 
this.beforeUpdate = function() 
{ clean up before new property values} 
this.afterUpdate 
{work with the new property values} 
this.compenentDeleted 
{hide evidence before you’re gone} 
}
class com.interdobs.analyticcharts.ScatterPlot extends Component { 
/* Shows or hides trendline */ 
void setTrendline(/* Show trendline */ boolean showTrendline){* 
this.trendline = showTrendline; 
*} 
/* returns the current visibility of the trendline */ 
boolean getTrendLineStatus() {* 
return this.trendline; 
*} 
`/* returns the keys of the selected points. Is empty when no selection has been made */ 
String getSelectedKeys() {* 
return this.clickedkey 
*} 
}
H OWdo you create them? 
More on SDK 
help.sap.com/boad - location of (rt)fm 
SCN.SAP.com 
- Mike Howles 
- Karol Kalisz 
- Reiner Hille-Doering
H OWdo you create them? 
D3 explained 
• enter(), exit and update 
• Dynamic Properties with Function(d,i) { } 
• Transitions 
• Towards reusability
graphs = 
chart.selectAll("svg").data(dataset); 
graphs.exit() 
.remove(); 
graphs.attr("height", margin.graphHeight) 
.attr("width", margin.graphWidth) 
.attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) 
.attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth + 
properties.columnMargin);}) 
.each(function(d,i) { d3.select(this).call(winloss);}); 
graphs.enter().append("svg") 
.attr("height", margin.graphHeight) 
.attr("width", margin.graphWidth) 
.attr("class", "winlossgraph") 
.attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) 
.attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth +
graphs = chart.selectAll("svg").data(dataset); 
graphs.attr("height", margin.graphHeight) 
.attr("width", margin.graphWidth) 
.attr("y", 
function(d, i) 
{ return properties.positions[i].y * margin.graphHeight;}) 
graphs.enter() 
.append("svg") 
.attr("height", margin.graphHeight) 
.attr("width", margin.graphWidth) 
.attr("class", "winlossgraph") 
.attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) 
.attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth + 
.text(function(d) { return d.title; });
bars.transition() 
.duration(5000) 
.ease("elastic") 
.attr("height", function(d){ return d==1 ? 0 : 10;});
function chart() { 
var width = 720, // default width 
height = 80; // default height 
function my() { 
// generate chart here, using `width` and `height` 
} 
my.width = function(value) { if (!arguments.length) return width; width = value; return my; }; 
my.height = function(value) { if (!arguments.length) return height; height = value; return my; }; 
return my; 
} 
var myChart = chart().width(720).height(80);
More on D3 
WWW.d3js.org (main site) 
https://www.youtube.com/user/d3Vienno/videos (tutorial) 
http://alignedleft.com/tutorials/d3 (the book online) 
http://bost.ocks.org/mike/ (examples from the creator)

More Related Content

What's hot

Юрий Буянов «Squeryl — ORM с человеческим лицом»
Юрий Буянов «Squeryl — ORM с человеческим лицом»Юрий Буянов «Squeryl — ORM с человеческим лицом»
Юрий Буянов «Squeryl — ORM с человеческим лицом»e-Legion
 
Acceptance Testing with Webrat
Acceptance Testing with WebratAcceptance Testing with Webrat
Acceptance Testing with WebratLuismi Cavallé
 
Devs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingDevs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingFabio Akita
 
Legend ortauzunluk
Legend ortauzunlukLegend ortauzunluk
Legend ortauzunlukfeneralper
 

What's hot (9)

20. CodeIgniter edit images
20. CodeIgniter edit images20. CodeIgniter edit images
20. CodeIgniter edit images
 
Юрий Буянов «Squeryl — ORM с человеческим лицом»
Юрий Буянов «Squeryl — ORM с человеческим лицом»Юрий Буянов «Squeryl — ORM с человеческим лицом»
Юрий Буянов «Squeryl — ORM с человеческим лицом»
 
11. delete record
11. delete record11. delete record
11. delete record
 
Drupal Mobile
Drupal MobileDrupal Mobile
Drupal Mobile
 
8. vederea inregistrarilor
8. vederea inregistrarilor8. vederea inregistrarilor
8. vederea inregistrarilor
 
1 eso-tema-2-el-relieve
1 eso-tema-2-el-relieve1 eso-tema-2-el-relieve
1 eso-tema-2-el-relieve
 
Acceptance Testing with Webrat
Acceptance Testing with WebratAcceptance Testing with Webrat
Acceptance Testing with Webrat
 
Devs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented ProgrammingDevs for Leokz e 7Masters - WTF Oriented Programming
Devs for Leokz e 7Masters - WTF Oriented Programming
 
Legend ortauzunluk
Legend ortauzunlukLegend ortauzunluk
Legend ortauzunluk
 

Similar to Custom Visualizations: What, How and Why

Rapidly Iterating Across Platforms with Server-Driven UI
Rapidly Iterating Across Platforms with Server-Driven UIRapidly Iterating Across Platforms with Server-Driven UI
Rapidly Iterating Across Platforms with Server-Driven UILaura Kelly
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)David Giard
 
Dynamic Data Visualization With Chartkick
Dynamic Data Visualization With ChartkickDynamic Data Visualization With Chartkick
Dynamic Data Visualization With ChartkickDax Murray
 
jQuery: Tips, tricks and hints for better development and Performance
jQuery: Tips, tricks and hints for better development and PerformancejQuery: Tips, tricks and hints for better development and Performance
jQuery: Tips, tricks and hints for better development and PerformanceJonas De Smet
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardGeorg Sorst
 
Visualization of Big Data in Web Apps
Visualization of Big Data in Web AppsVisualization of Big Data in Web Apps
Visualization of Big Data in Web AppsEPAM
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)Oswald Campesato
 
Having fun with graphs, a short introduction to D3.js
Having fun with graphs, a short introduction to D3.jsHaving fun with graphs, a short introduction to D3.js
Having fun with graphs, a short introduction to D3.jsMichael Hackstein
 
Rapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UIRapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UILaura Kelly
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsJarod Ferguson
 
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...Sencha
 
Better d3 charts with tdd
Better d3 charts with tddBetter d3 charts with tdd
Better d3 charts with tddMarcos Iglesias
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoRob Bontekoe
 
Jquery optimization-tips
Jquery optimization-tipsJquery optimization-tips
Jquery optimization-tipsanubavam-techkt
 
D3.js - A picture is worth a thousand words
D3.js - A picture is worth a thousand wordsD3.js - A picture is worth a thousand words
D3.js - A picture is worth a thousand wordsApptension
 
jQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't KnowjQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't Knowgirish82
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 

Similar to Custom Visualizations: What, How and Why (20)

Rapidly Iterating Across Platforms with Server-Driven UI
Rapidly Iterating Across Platforms with Server-Driven UIRapidly Iterating Across Platforms with Server-Driven UI
Rapidly Iterating Across Platforms with Server-Driven UI
 
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)How I Learned to Stop Worrying and Love jQuery (Jan 2013)
How I Learned to Stop Worrying and Love jQuery (Jan 2013)
 
Dynamic Data Visualization With Chartkick
Dynamic Data Visualization With ChartkickDynamic Data Visualization With Chartkick
Dynamic Data Visualization With Chartkick
 
jQuery: Tips, tricks and hints for better development and Performance
jQuery: Tips, tricks and hints for better development and PerformancejQuery: Tips, tricks and hints for better development and Performance
jQuery: Tips, tricks and hints for better development and Performance
 
ELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboardELK Stack - Turn boring logfiles into sexy dashboard
ELK Stack - Turn boring logfiles into sexy dashboard
 
Visualization of Big Data in Web Apps
Visualization of Big Data in Web AppsVisualization of Big Data in Web Apps
Visualization of Big Data in Web Apps
 
Svcc 2013-d3
Svcc 2013-d3Svcc 2013-d3
Svcc 2013-d3
 
SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)SVCC 2013 D3.js Presentation (10/05/2013)
SVCC 2013 D3.js Presentation (10/05/2013)
 
Having fun with graphs, a short introduction to D3.js
Having fun with graphs, a short introduction to D3.jsHaving fun with graphs, a short introduction to D3.js
Having fun with graphs, a short introduction to D3.js
 
D3
D3D3
D3
 
Rapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UIRapidly Iterating Across Platforms using Server-Driven UI
Rapidly Iterating Across Platforms using Server-Driven UI
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
 
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
SenchaCon 2016: Add Magic to Your Ext JS Apps with D3 Visualizations - Vitaly...
 
Jquery fundamentals
Jquery fundamentalsJquery fundamentals
Jquery fundamentals
 
Better d3 charts with tdd
Better d3 charts with tddBetter d3 charts with tdd
Better d3 charts with tdd
 
Building iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" DominoBuilding iPhone Web Apps using "classic" Domino
Building iPhone Web Apps using "classic" Domino
 
Jquery optimization-tips
Jquery optimization-tipsJquery optimization-tips
Jquery optimization-tips
 
D3.js - A picture is worth a thousand words
D3.js - A picture is worth a thousand wordsD3.js - A picture is worth a thousand words
D3.js - A picture is worth a thousand words
 
jQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't KnowjQuery - 10 Time-Savers You (Maybe) Don't Know
jQuery - 10 Time-Savers You (Maybe) Don't Know
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 

Recently uploaded

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 

Recently uploaded (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

Custom Visualizations: What, How and Why

  • 1. Custom Data Visualizations in Design Studio What , Why, How Jeroen van der A What Why How
  • 2. WHO is Jeroen van der A?
  • 3. WHAT is Data Visualization
  • 4. Simplify Compare Attention Explore Perspectives Why? Sceptical Respond
  • 5. WHY is Data Visualization important?
  • 6. WH Y is Data Visualization important? Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d Oiroperpigreogapjgaenrgmbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d Oiroperpigreogapjgaealertfbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg Kdiekdlalieiaghreigaeieliealikgiaegaeigjoajggnbnckzc,mzldieaqeieruye oiwetuoiwutna;oihbowugqoitgjuqoaiguwr;oghirw;oigaroigha;worigj;d Oiroperpigreogapjgaenrgmbaeo;irhbuaeujlbjlergb;origjaor;igj;orijgrijg
  • 7. WH Y is Data Visualization important? My Dog My dog is a boxer. He is a playful dog. You can always see him jumping around and enjoying himself. He has a light brown fur With a white chest. On his chest he has a few black spots His paws are also white.
  • 8. WH Y is Data Visualization important? Anscombe's quartet Same mean, variance, correllation and regression, but dataset is very different Property Value Mean of x 9 Sample variance of x 11 Mean of y 7.50 Sample variance of y 4.122 or 4.127 Correlation between x and y 0.816 Linear regression line y = 3.00 + 0.500x
  • 9. HOW Do you do create them in Design Studio ?
  • 10. H OWdo you create them? Example
  • 11. H OWdo you create them? SDK Design Studio Explained • Contribution.xml • Init(), afterUpdate() • Creating Methods
  • 12. <component id="WinLoss" title="WinLoss Graph" icon="res/icons/winloss.png" handlerType="div" group="analytics"> <stdInclude kind="d3"/> <jsInclude>res/js/winloss.js</jsInclude> <cssInclude>res/css/winloss.css</cssInclude> <property id="randomgraphs" title="Number of random Graphs" type="int"/> <property id="onclick" type="ScriptText" title="On Click" group="Events"/> <property type="int" title="number of Columns" id="numberofcolumns"/> <property type="int" title="Extra room for labels" id="extralabelroom"/> <property type="int" title="Line Height adjusmtment" id="adjustlineheight"/> <property type="int" title="Adjust header height" id="adjustheader"/> <property type="int" title="Adjust subheader height" id="adjustsub"/> <property type="float" title="Margin between columns" id="margin"/> <initialization> <defaultValue property="randomgraphs">4</defaultValue> <defaultValue property="numberofcolumns">1</defaultValue> <defaultValue property="margin">0.1</defaultValue> <defaultValue property="WIDTH">600</defaultValue> <defaultValue property="HEIGHT">400</defaultValue> </initialization> </component>
  • 13. sap.designstudio.sdk.Component.subclass(“my.sdk.Component", function() { Var properties = {} this.margin = function(e) { if (e === undefined) {return properties.margin;} else {properties.margin = e; return this;}}; have you got a value for me. No? I have a value for you this.init = function() { set up the basics } this.beforeUpdate = function() { clean up before new property values} this.afterUpdate {work with the new property values} this.compenentDeleted {hide evidence before you’re gone} }
  • 14. class com.interdobs.analyticcharts.ScatterPlot extends Component { /* Shows or hides trendline */ void setTrendline(/* Show trendline */ boolean showTrendline){* this.trendline = showTrendline; *} /* returns the current visibility of the trendline */ boolean getTrendLineStatus() {* return this.trendline; *} `/* returns the keys of the selected points. Is empty when no selection has been made */ String getSelectedKeys() {* return this.clickedkey *} }
  • 15. H OWdo you create them? More on SDK help.sap.com/boad - location of (rt)fm SCN.SAP.com - Mike Howles - Karol Kalisz - Reiner Hille-Doering
  • 16. H OWdo you create them? D3 explained • enter(), exit and update • Dynamic Properties with Function(d,i) { } • Transitions • Towards reusability
  • 17. graphs = chart.selectAll("svg").data(dataset); graphs.exit() .remove(); graphs.attr("height", margin.graphHeight) .attr("width", margin.graphWidth) .attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) .attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth + properties.columnMargin);}) .each(function(d,i) { d3.select(this).call(winloss);}); graphs.enter().append("svg") .attr("height", margin.graphHeight) .attr("width", margin.graphWidth) .attr("class", "winlossgraph") .attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) .attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth +
  • 18. graphs = chart.selectAll("svg").data(dataset); graphs.attr("height", margin.graphHeight) .attr("width", margin.graphWidth) .attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) graphs.enter() .append("svg") .attr("height", margin.graphHeight) .attr("width", margin.graphWidth) .attr("class", "winlossgraph") .attr("y", function(d, i) { return properties.positions[i].y * margin.graphHeight;}) .attr("x", function(d, i) { return properties.positions[i].x * ( margin.graphWidth + .text(function(d) { return d.title; });
  • 19. bars.transition() .duration(5000) .ease("elastic") .attr("height", function(d){ return d==1 ? 0 : 10;});
  • 20. function chart() { var width = 720, // default width height = 80; // default height function my() { // generate chart here, using `width` and `height` } my.width = function(value) { if (!arguments.length) return width; width = value; return my; }; my.height = function(value) { if (!arguments.length) return height; height = value; return my; }; return my; } var myChart = chart().width(720).height(80);
  • 21. More on D3 WWW.d3js.org (main site) https://www.youtube.com/user/d3Vienno/videos (tutorial) http://alignedleft.com/tutorials/d3 (the book online) http://bost.ocks.org/mike/ (examples from the creator)

Editor's Notes

  1. Simplify - Just like an artist can capture the essence of an emotion with just a few lines, good data visualization captures the essence of data - without oversimplifying. We don't want a tool that gives us 19 more options after we decide we want a cloumn graph. We want a tool like Tableau that knows which visualization is appropriate and then creates it. Simple. Compare - We need to be able to compare our data visualizations side by side. We can't hold the details of our data visualizations in our memory - shift the burden of effort to our eyes. Attend - The tool needs to make it easy for us to attend to the data that's really important. Our brains are easily encouraged to pay attention to the relevant or irrelevant details. Stephen demonstrated this convincingly with a video similar to Daniel Simon's classic gorilla and ball passing. Explore - Data visualization tools should let us just look. Not just to answer a specific question, but to explore data and discover things. Directed and exploratory analysis are equally valid, but we need to be sure that out visualization tool makes both possible. View Diversely - Different views of the same data provide different insights. It helps to be able to look at the same data from different perspectives at the same time and see how they fit together. Ask why - More than knowing "what's happening", we need to know "why it's happening". This is where actionable results come from. Be skeptical - We too rarely question the answers we get from our data because traditional tools have made data analysis so hard. We accept the first answer we get simply because exploring any further is tool hard. More powerful tools like Tableau give you the luxury to ask more questions, as fast as we can think of them. Respond - Simply answering questions for yourself has limited benefit. It's the ability to share our data that leads to global enlightenment. "The best software for data analysis is the software you forget you're using. It's such a natural extension of your thinking process that you can use it without thinking about the mechanics." - Stephen Few
  2. Introduction Read more tutorials.D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction. D3 is not a monolithic framework that seeks to provide every conceivable feature. Instead, D3 solves the crux of the problem: efficient manipulation of documents based on data. This avoids proprietary representation and affords extraordinary flexibility, exposing the full capabilities of web standards such as CSS3, HTML5 and SVG. With minimal overhead, D3 is extremely fast, supporting large datasets and dynamic behaviors for interaction and animation. D3’s functional style allows code reuse through a diverse collection of components and plugins. #Selections Read more about selections.Modifying documents using the W3C DOM API is tedious: the method names are verbose, and the imperative approach requires manual iteration and bookkeeping of temporary state. For example, to change the text color of paragraph elements: var paragraphs = document.getElementsByTagName("p"); for (var i = 0; i < paragraphs.length; i++) { var paragraph = paragraphs.item(i); paragraph.style.setProperty("color", "white", null); }D3 employs a declarative approach, operating on arbitrary sets of nodes called selections. For example, you can rewrite the above loop as: d3.selectAll("p").style("color", "white");Yet, you can still manipulate individual nodes as needed: d3.select("body").style("background-color", "black");Selectors are defined by the W3C Selectors API and supported natively by modern browsers. Backwards-compatibility for older browsers can be provided by Sizzle. The above examples select nodes by tag name ("p" and "body", respectively). Elements may be selected using a variety of predicates, including containment, attribute values, class and ID. D3 provides numerous methods for mutating nodes: setting attributes or styles; registering event listeners; adding, removing or sorting nodes; and changing HTML or text content. These suffice for the vast majority of needs. Direct access to the underlying DOM is also possible, as each D3 selection is simply an array of nodes. #Dynamic Properties Readers familiar with other DOM frameworks such as jQuery or Prototype should immediately recognize similarities with D3. Yet styles, attributes, and other properties can be specified asfunctions of data in D3, not just simple constants. Despite their apparent simplicity, these functions can be surprisingly powerful; the d3.geo.path function, for example, projects geographic coordinatesinto SVG path data. D3 provides many built-in reusable functions and function factories, such asgraphical primitives for area, line and pie charts. For example, to randomly color paragraphs: d3.selectAll("p").style("color", function() { return "hsl(" + Math.random() * 360 + ",100%,50%)"; });To alternate shades of gray for even and odd nodes: d3.selectAll("p").style("color", function(d, i) { return i % 2 ? "#fff" : "#eee"; });Computed properties often refer to bound data. Data is specified as an array of values, and each value is passed as the first argument (d) to selection functions. With the default join-by-index, the first element in the data array is passed to the first node in the selection, the second element to the second node, and so on. For example, if you bind an array of numbers to paragraph elements, you can use these numbers to compute dynamic font sizes: d3.selectAll("p") .data([4, 8, 15, 16, 23, 42]) .style("font-size", function(d) { return d + "px"; });Once the data has been bound to the document, you can omit the data operator; D3 will retrieve the previously-bound data. This allows you to recompute properties without rebinding. #Enter and Exit Read more about data joins.Using D3’s enter and exit selections, you can create new nodes for incoming data and remove outgoing nodes that are no longer needed. When data is bound to a selection, each element in the data array is paired with the corresponding node in the selection. If there are fewer nodes than data, the extra data elements form the enter selection, which you can instantiate by appending to the enter selection. For example: d3.select("body").selectAll("p") .data([4, 8, 15, 16, 23, 42]) .enter().append("p") .text(function(d) { return "I’m number " + d + "!"; });Updating nodes are the default selection—the result of the data operator. Thus, if you forget about the enter and exit selections, you will automatically select only the elements for which there exists corresponding data. A common pattern is to break the initial selection into three parts: the updating nodes to modify, the entering nodes to add, and the exiting nodes to remove. // Update… var p = d3.select("body").selectAll("p") .data([4, 8, 15, 16, 23, 42]) .text(String); // Enter… p.enter().append("p") .text(String); // Exit… p.exit().remove();By handling these three cases separately, you specify precisely which operations run on which nodes. This improves performance and offers greater control over transitions. For example, with a bar chart you might initialize entering bars using the old scale, and then transition entering bars to the new scale along with the updating and exiting bars. D3 lets you transform documents based on data; this includes both creating and destroying elements. D3 allows you to change an existing document in response to user interaction, animation over time, or even asynchronous notification from a third-party. A hybrid approach is even possible, where the document is initially rendered on the server, and updated on the client via D3. #Transformation, not Representation D3 is not a new graphical representation. Unlike Processing, Raphaël, or Protovis, the vocabulary of marks comes directly from web standards: HTML, SVG and CSS. For example, you can create SVG elements using D3 and style them with external stylesheets. You can use composite filter effects, dashed strokes and clipping. If browser vendors introduce new features tomorrow, you’ll be able to use them immediately—no toolkit update required. And, if you decide in the future to use a toolkit other than D3, you can take your knowledge of standards with you! Best of all, D3 is easy to debug using the browser’s built-in element inspector: the nodes that you manipulate with D3 are exactly those that the browser understands natively. #Transitions D3’s focus on transformation extends naturally to animated transitions. Transitions gradually interpolate styles and attributes over time. Tweening can be controlled via easing functions such as “elastic”, “cubic-in-out” and “linear”. D3’s interpolators support both primitives, such as numbers and numbers embedded within strings (font sizes, path data, etc.), and compound values. You can even extend D3’s interpolator registry to support complex properties and data structures. For example, to fade the background of the page to black: d3.select("body").transition() .style("background-color", "black");Or, to resize circles in a symbol map with a staggered delay: d3.selectAll("circle").transition() .duration(750) .delay(function(d, i) { return i * 10; }) .attr("r", function(d) { return Math.sqrt(d * scale); });By modifying only the attributes that actually change, D3 reduces overhead and allows greater graphical complexity at high frame rates. D3 also allows sequencing of complex transitions via events. And, you can still use CSS3 transitions; D3 does not replace the browser’s toolbox, but exposes it in a way that is easier to use.
  3. Introduction Read more tutorials.D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction. D3 is not a monolithic framework that seeks to provide every conceivable feature. Instead, D3 solves the crux of the problem: efficient manipulation of documents based on data. This avoids proprietary representation and affords extraordinary flexibility, exposing the full capabilities of web standards such as CSS3, HTML5 and SVG. With minimal overhead, D3 is extremely fast, supporting large datasets and dynamic behaviors for interaction and animation. D3’s functional style allows code reuse through a diverse collection of components and plugins. #Selections Read more about selections.Modifying documents using the W3C DOM API is tedious: the method names are verbose, and the imperative approach requires manual iteration and bookkeeping of temporary state. For example, to change the text color of paragraph elements: var paragraphs = document.getElementsByTagName("p"); for (var i = 0; i < paragraphs.length; i++) { var paragraph = paragraphs.item(i); paragraph.style.setProperty("color", "white", null); }D3 employs a declarative approach, operating on arbitrary sets of nodes called selections. For example, you can rewrite the above loop as: d3.selectAll("p").style("color", "white");Yet, you can still manipulate individual nodes as needed: d3.select("body").style("background-color", "black");Selectors are defined by the W3C Selectors API and supported natively by modern browsers. Backwards-compatibility for older browsers can be provided by Sizzle. The above examples select nodes by tag name ("p" and "body", respectively). Elements may be selected using a variety of predicates, including containment, attribute values, class and ID. D3 provides numerous methods for mutating nodes: setting attributes or styles; registering event listeners; adding, removing or sorting nodes; and changing HTML or text content. These suffice for the vast majority of needs. Direct access to the underlying DOM is also possible, as each D3 selection is simply an array of nodes. #Dynamic Properties Readers familiar with other DOM frameworks such as jQuery or Prototype should immediately recognize similarities with D3. Yet styles, attributes, and other properties can be specified asfunctions of data in D3, not just simple constants. Despite their apparent simplicity, these functions can be surprisingly powerful; the d3.geo.path function, for example, projects geographic coordinatesinto SVG path data. D3 provides many built-in reusable functions and function factories, such asgraphical primitives for area, line and pie charts. For example, to randomly color paragraphs: d3.selectAll("p").style("color", function() { return "hsl(" + Math.random() * 360 + ",100%,50%)"; });To alternate shades of gray for even and odd nodes: d3.selectAll("p").style("color", function(d, i) { return i % 2 ? "#fff" : "#eee"; });Computed properties often refer to bound data. Data is specified as an array of values, and each value is passed as the first argument (d) to selection functions. With the default join-by-index, the first element in the data array is passed to the first node in the selection, the second element to the second node, and so on. For example, if you bind an array of numbers to paragraph elements, you can use these numbers to compute dynamic font sizes: d3.selectAll("p") .data([4, 8, 15, 16, 23, 42]) .style("font-size", function(d) { return d + "px"; });Once the data has been bound to the document, you can omit the data operator; D3 will retrieve the previously-bound data. This allows you to recompute properties without rebinding. #Enter and Exit Read more about data joins.Using D3’s enter and exit selections, you can create new nodes for incoming data and remove outgoing nodes that are no longer needed. When data is bound to a selection, each element in the data array is paired with the corresponding node in the selection. If there are fewer nodes than data, the extra data elements form the enter selection, which you can instantiate by appending to the enter selection. For example: d3.select("body").selectAll("p") .data([4, 8, 15, 16, 23, 42]) .enter().append("p") .text(function(d) { return "I’m number " + d + "!"; });Updating nodes are the default selection—the result of the data operator. Thus, if you forget about the enter and exit selections, you will automatically select only the elements for which there exists corresponding data. A common pattern is to break the initial selection into three parts: the updating nodes to modify, the entering nodes to add, and the exiting nodes to remove. // Update… var p = d3.select("body").selectAll("p") .data([4, 8, 15, 16, 23, 42]) .text(String); // Enter… p.enter().append("p") .text(String); // Exit… p.exit().remove();By handling these three cases separately, you specify precisely which operations run on which nodes. This improves performance and offers greater control over transitions. For example, with a bar chart you might initialize entering bars using the old scale, and then transition entering bars to the new scale along with the updating and exiting bars. D3 lets you transform documents based on data; this includes both creating and destroying elements. D3 allows you to change an existing document in response to user interaction, animation over time, or even asynchronous notification from a third-party. A hybrid approach is even possible, where the document is initially rendered on the server, and updated on the client via D3. #Transformation, not Representation D3 is not a new graphical representation. Unlike Processing, Raphaël, or Protovis, the vocabulary of marks comes directly from web standards: HTML, SVG and CSS. For example, you can create SVG elements using D3 and style them with external stylesheets. You can use composite filter effects, dashed strokes and clipping. If browser vendors introduce new features tomorrow, you’ll be able to use them immediately—no toolkit update required. And, if you decide in the future to use a toolkit other than D3, you can take your knowledge of standards with you! Best of all, D3 is easy to debug using the browser’s built-in element inspector: the nodes that you manipulate with D3 are exactly those that the browser understands natively. #Transitions D3’s focus on transformation extends naturally to animated transitions. Transitions gradually interpolate styles and attributes over time. Tweening can be controlled via easing functions such as “elastic”, “cubic-in-out” and “linear”. D3’s interpolators support both primitives, such as numbers and numbers embedded within strings (font sizes, path data, etc.), and compound values. You can even extend D3’s interpolator registry to support complex properties and data structures. For example, to fade the background of the page to black: d3.select("body").transition() .style("background-color", "black");Or, to resize circles in a symbol map with a staggered delay: d3.selectAll("circle").transition() .duration(750) .delay(function(d, i) { return i * 10; }) .attr("r", function(d) { return Math.sqrt(d * scale); });By modifying only the attributes that actually change, D3 reduces overhead and allows greater graphical complexity at high frame rates. D3 also allows sequencing of complex transitions via events. And, you can still use CSS3 transitions; D3 does not replace the browser’s toolbox, but exposes it in a way that is easier to use.