Quantcast
Channel: SAP BusinessObjects Design Studio
Viewing all 662 articles
Browse latest View live

Your First Extension: Part 10c - Transitions in the Component

$
0
0

This is part of a tutorial series on creating extension components for Design Studio.

 

Last time, we looked at D3 transitions and used them to animate our gauge in the sandbox html file.  In this installment, we're going to bring those transitions into the component.  There are a few things that we want to keep in mind:

  • We'll include a new opacity setting in the properties sheet for the guide ring and guide lines.
  • As long as were introducing opacity, we'll also gratuitously add an opacity setting for the main gauge arc.
  • The guide ring and guide lines both look like drawn strokes same on screen, but tick a bit differently.  The guide lines are strokes.  The guide ring is an arc with the same width as the stroke.  This means that the guide ring will use fill-opacity to define its opacity, while the opacity of the guide lines will be defined by stroke-opacity.  The main arc's opacity is defined by fill-opacity.
  • We'll use the same delay and duration for the needle and arc.
  • We'll use a separate delay and duration for the opacity transition; which we'll call fade in the properties pane.
  • We will not animate the opacity of the main arc.  In D3, we can't run two transitions simultaneously on the same element.  We can chain them, but we can't run them in parallel.  This would mean fade first, then rotate, or rotate then fade; neither of which would be visible to the user.  If we wanted to, we could include logic for allowing both options and having the designer choose between either rotation or opacity fade, but we'll leave that out of the tutorial.  The main arc will have a rotation animation only.
  • We'll include boolean toggles for the rotation animation and the opacity fade.  In practice, setting them to false will set delay and duration to 0 milliseconds each. 

 

 

Component.xml changes

 

 

Looking through the above bullet points, we have 9 new properties:

PropertyTypeDefault Value
gaugeOpacityfloat1.0
guideOpacityfloat1.0
animationEnablebooleanfalse
animationDelayint500
animationDurationint1000
animationEaseString"linear"
animationEnableOpacitybooleanfalse
animationDelayOpacityint500
animationDurationOpacityint500

 

 

The above properties translate into the following property elements:

<property

  id="gaugeOpacity"

  title="Opacity"

  type="float"

  group="SCNGaugeAngleSettings"/>

<property id="guideOpacity"

  title="Guide Opacity"

  type="float"

  group="SCNGaugeLineSettings"/>

<property id="animationEnable"

  title="Enable Animations"

  type="boolean"

  tooltip="Are the gauge arc and needle animated?"

  group="SCNGaugeAnimationSettings"/>

<property id="animationDelay"

  title="Animation Delay"

  type="int"

  tooltip="Delay time (in miliseconds), before the animation starts"

  group="SCNGaugeAnimationSettings"/>

<property id="animationDuration"

  title="Animation Duration"

  type="int"

  tooltip="Duration time (in miliseconds) of the animation.  Includes dampening oscillation time if ease type is elastic."

  group="SCNGaugeAnimationSettings"/>

<property id="animationEase"

  title="Ease Type"

  type="String"

  tooltip="Delay time (in miliseconds), before the animation starts"

  group="SCNGaugeAnimationSettings">

  <possibleValue>linear</possibleValue>

  <possibleValue>quad</possibleValue>

  <possibleValue>cubic</possibleValue>

  <possibleValue>sin</possibleValue>

  <possibleValue>exp</possibleValue>

  <possibleValue>circle</possibleValue>

  <possibleValue>elastic</possibleValue>

  <possibleValue>back</possibleValue>

  <possibleValue>bounce</possibleValue>

</property>

<property id="animationEnableOpacity"

  title="Enable Opacity Fade"

  type="boolean"

  tooltip="Enable Animated Opacity Fade?"

  group="SCNGaugeAnimationSettings"/>

<property id="animationDelayOpacity"

  title="Opacity Fade Delay"

  type="int"

  tooltip="Delay time (in miliseconds), before the opacity fade starts starts"

  group="SCNGaugeAnimationSettings"/>

<property id="animationDurationOpacity"

  title="Opacity Fade Duration"

  type="int"

  tooltip="Duration time (in miliseconds) of opacity fade."

  group="SCNGaugeAnimationSettings"/>

 

And initialization is also straightforward:

<initialization>

  ...

  <defaultValue property="gaugeOpacity">1.0</defaultValue>

  <defaultValue property="guideOpacity">1.0</defaultValue>

  <defaultValue property="animationEnable">false</defaultValue>

  <defaultValue property="animationDelay">500</defaultValue>

  <defaultValue property="animationDuration">1000</defaultValue>

  <defaultValue property="animationEase">linear</defaultValue>

  <defaultValue property="animationEnableOpacity">false</defaultValue>

  <defaultValue property="animationDelayOpacity">500</defaultValue>

  <defaultValue property="animationDurationOpacity">500</defaultValue>

</initialization>

 

 

 

Component.js

 

In the component.js file, we're going to do three things:

  • Include the usual client side delegate for all new properties, as well as the getter/setters needed to keep property values in sync between the server and client.
  • Up to now, the main arc, the needle and base pin have all been aligned with the end angle on creation.  We're now going to change this and align them with the start angle on creation.  In the arc, we'll do this by modifying the datum element, so that the startAngle and endAngle properties are the same.
  • All opacity fade and rotation animations will run all the time; with the opacity running from zero to the guide opacity setting and the rotation transition ending at the endAngle.  What this means concretely, is that if animations are disabled for a particular property (opacity or rotation), then the delay and duration both default to zero milliseconds for that transition.

 

 

We follow the usual conventions for the client side delegate for all properties:

me._gaugeOpacity = 1.0,

me._guideOpacity = 1.0;

me._animationEnable = false;

me._animationDelay = 500;

me._animationDuration = 1000;

me._animationEase = "linear";

me._animationEnableOpacity = false;

me._animationDelayOpacity = 500;

me._animationDurationOpacity = 500;

 

 

And the getter/setters:

me.gaugeOpacity = function(value) {

  if (value === undefined) {

  return me._gaugeOpacity;

  } else {

  me._gaugeOpacity = value;

  return me;

  }

};

me.guideOpacity = function(value) {

  if (value === undefined) {

  return me._guideOpacity;

  } else {

  me._guideOpacity = value;

  return this;

  }

};

me.animationEnable = function(value) {

  if (value === undefined) {

  return me._animationEnable;

  } else {

  me._animationEnable = value;

  return me;

  }

};

me.animationDelay = function(value) {

  if (value === undefined) {

  return me._animationDelay;

  } else {

  me._animationDelay = value;

  return me;

  }

};

me.animationDuration = function(value) {

  if (value === undefined) {

  return me._animationDuration;

  } else {

  me._animationDuration = value;

  return me;

  }

};

me.animationEase = function(value) {

  if (value === undefined) {

  return me._animationEase;

  } else {

  me._animationEase = value;

  return me;

  }

};

me.animationEnableOpacity = function(value) {

  if (value === undefined) {

  return me._animationEnableOpacity;

  } else {

  me._animationEnableOpacity = value;

  return me;

  }

};

me.animationDelayOpacity = function(value) {

  if (value === undefined) {

  return me._animationDelayOpacity;

  } else {

  me._animationDelayOpacity = value;

  return me;

  }

};

me.animationDurationOpacity = function(value) {

  if (value === undefined) {

  return me._animationDurationOpacity;

  } else {

  me._animationDurationOpacity = value;

  return me;

  }

};

 

 

 

The new gauge arc, with opacity and the new starting data:

if (me._enableArc == true){

  var arcDef = d3.svg.arc()

  .innerRadius(me._innerRad)

  .outerRadius(me._outerRad);

 

 

  var guageArc = vis.append("path")

  .datum({endAngle: me._endAngleDeg * (pi/180), startAngle: me._startAngleDeg * (pi/180)})

     .style("fill", me._displayedColor)

     .attr("width", me.$().width()).attr("height", me.$().height()) // Added height and width so arc is visible

     .attr("transform", "translate(" + me._offsetLeft + "," + me._offsetDown + ")")

     .attr("d", arcDef)

     .attr( "fill-opacity", me._gaugeOpacity );

}

 

 

The reworked indicator needle and base pin:

///////////////////////////////////////////

//Lets add the indicator needle

///////////////////////////////////////////

 

 

if (me._enableIndicatorNeedle == true){

  var needleWaypointOffset = me._needleWidth/2;

 

 

  //needleWaypoints is defined with positive y axis being up

  //The initial definition of needleWaypoints is for a full diamond, but if me._enableIndicatorNeedleTail is false, we'll abbreviate to a chevron

  var needleWaypoints = [{x: 0,y: me._needleHeadLength}, {x: needleWaypointOffset,y: 0}, {x: 0,y: (-1*me._needleTailLength)}, {x: (-1*needleWaypointOffset),y: 0}, {x: 0,y: me._needleHeadLength}]

  if (me._enableIndicatorNeedleTail == false){

  if (me._fillNeedle == false){

  //If we have no tail and no fill then there is no need to close the shape.

  //Leave it as an open chevron

  needleWaypoints = [{x: needleWaypointOffset,y: 0}, {x: 0,y: me._needleHeadLength}, {x: (-1*needleWaypointOffset),y: 0}];

  }

  else {

  //There is no tail, but we are filling the needle.

  //In this case, draw it as a triangle

  needleWaypoints = [{x: 0,y: me._needleHeadLength}, {x: needleWaypointOffset,y: 0}, {x: (-1*needleWaypointOffset),y: 0}, {x: 0,y: me._needleHeadLength}]

  }

 

 

  }

 

 

  //we need to invert the y-axis and scale the indicator to the gauge.

  //  If Y = 100, then that is 100% of outer radius.  So of Y = 100 and outerRad = 70, then the scaled Y will be 70.

  var needleFunction = d3.svg.line()

  .x(function(d) { return (d.x)*(me._outerRad/100); })

  .y(function(d) { return -1*(d.y)*(me._outerRad/100); })

  .interpolate("linear");

 

 

  //Draw the needle, either filling it in, or not

  var needleFillColorCode = me._needleColorCode;

  if (me._fillNeedle == false){

  needleFillColorCode = "none";

  }

 

 

 

  var needle = vis

  .append("g")

  .attr("transform", "translate(" + me._offsetLeft + "," + me._offsetDown + ")")

  .append("path")

  .datum(needleWaypoints)

  .attr("class", "tri")

  .attr("d", needleFunction(needleWaypoints))

  .attr("stroke", me._needleColorCode)

  .attr("stroke-width", me._needleLineThickness)

  .attr("fill", needleFillColorCode)

  .attr("transform", "rotate(" +  me._startAngleDeg + ")");;

 

 

}

 

 

 

 

///////////////////////////////////////////

//Lets add a needle base pin

///////////////////////////////////////////

 

 

 

 

if (me._enableIndicatorNeedleBase == true){

  // Like the rest of the needle, the size of the pin is defined relative to the main arc, as a % value

  var needleIBasennerRadius = (me._needleBaseWidth/2)*(me._outerRad/100) - (me._needleLineThickness/2);

  var needleBaseOuterRadius = needleIBasennerRadius + me._needleLineThickness;

  if (me._fillNeedlaBasePin == true){

  needleIBasennerRadius = 0.0;

  }

 

 

 

  // The pin will either be a 180 degree arc, or a 360 degree ring; starting from the 9 O'clock position.

  var needleBaseStartAngle = 90.0;

  var needleBaseEndAngle = 270.0;

  if (me._fullBasePinRing == true){

  needleBaseEndAngle = 450.0;

  }

 

 

  //Don't let the arc have a negative length

  if (needleBaseEndAngle < needleBaseStartAngle){

  needleBaseEndAngle = needleBaseStartAngle;

  alert("End angle of outer ring may not be less than start angle!");

  }

 

 

  //Transfomation for the Pin Ring

  // We won't apply it just yet

  var nbpTransformedStartAngle = needleBaseStartAngle + me._startAngleDeg;

  var nbpTransformedEndAngle = needleBaseEndAngle + me._startAngleDeg;

 

  var nbTransformedStartAngle = needleBaseStartAngle + me._endAngleDeg;

  var nbTransformedEndAngle = needleBaseEndAngle + me._endAngleDeg;

 

 

  var pinArcDefinition = d3.svg.arc()

  .innerRadius(needleIBasennerRadius)

  .outerRadius(needleBaseOuterRadius);

 

 

  var pinArc = vis.append("path")

  .datum({endAngle: nbpTransformedEndAngle * (pi/180), startAngle: nbpTransformedStartAngle * (pi/180)})

  .attr("d", pinArcDefinition)

  .attr("fill", me._needleColorCode)

  .attr("transform", "translate(" + me._offsetLeft + "," + me._offsetDown + ")");

}

 

 

 

Transition Duration and Timing

 

 

Somewhere in the me.redraw() function, prior to the transitions, we need to check to see whether or not animations have been enabled and set the timing to 0 if required:

//Prepare the animation settings

// If me._animationEnable is false, then we'll act as if me._animationDelay and me._animationDuration

//   are both 0, without actually altering their values.

var tempAnimationDelay = 0;

var tempAnimationDuration = 0;

if (me._animationEnable == true){

  tempAnimationDelay = me._animationDelay;

  tempAnimationDuration = me._animationDuration;

}

 

 

//Guide Ring and Lines

var localFadeDelay = me._animationDelayOpacity;

var localFadeDuration = me._animationDurationOpacity;

if (me._animationEnableOpacity == false){

  localFadeDelay = 0;

  localFadeDuration = 0;

}

 

 

 

Let's Add our Animations

 

 

We'll pretty much just leave the sandbox transition code untouched, except for refactoring it into the component:

///////////////////////////////////////////

//Lets add our animations

///////////////////////////////////////////

//This blog post explains using attrTween for arcs: http://bl.ocks.org/mbostock/5100636

// Function adapted from this example

// Creates a tween on the specified transition's "d" attribute, transitioning

// any selected arcs from their current angle to the specified new angle.

if (me._enableArc == true){

  guageArc.transition()

  .duration(tempAnimationDuration)

  .delay(tempAnimationDelay)

  .ease(me._animationEase)

      .attrTween("d", function(d) {

     var interpolate = d3.interpolate(me._startAngleDeg * (pi/180), d.endAngle);

     return function(t) {

      d.endAngle = interpolate(t);

  return arcDef(d);

  };

  });

}

 

 

//Arcs are in radians, but rotation transformations are in degrees.  Kudos to D3 for consistency

if (me._enableIndicatorNeedle == true){

  needle.transition()

  .attr("transform", "rotate(" + me._endAngleDeg + ")")

  .duration(tempAnimationDuration)

  .delay(tempAnimationDelay)

  .ease(me._animationEase);

}

if (me._enableIndicatorNeedleBase == true){

  pinArc.transition()

  .duration(tempAnimationDuration)

  .delay(tempAnimationDelay)

      .attrTween("d", function(d) {

     var interpolateEnd = d3.interpolate(nbpTransformedEndAngle * (pi/180), nbTransformedEndAngle * (pi/180));

     var interpolateStart = d3.interpolate(nbpTransformedStartAngle * (pi/180), nbTransformedStartAngle * (pi/180));

     return function(t) {

      d.endAngle = interpolateEnd(t);

      d.startAngle = interpolateStart(t);

  return pinArcDefinition(d);

  };

  });

 

}

 

 

//Guide Ring and Lines

if (me._enableGuideRing == true){

  ringArc.transition()

  .attr( "fill-opacity", 0 )

  .transition()

  .delay( localFadeDelay )

  .duration(localFadeDuration)

        .attr( "fill-opacity", me._guideOpacity );

}

if (me._enableGuideLines == true){

  borderLines.transition()

  .attr( "stroke-opacity", 0 )

  .transition()

  .delay( localFadeDelay )

  .duration(localFadeDuration)

        .attr( "stroke-opacity", me._guideOpacity );

}

 

Result

 

Note that I created the video before adding the opacity fade.

 

We now have animated gauge angles and guide opacity.  As usual, the current version of the project is available in a project on Github.


Design Studio Ready-To-Run Templates ASUG Webcast Recap

$
0
0

This was an ASUG webcast a few weeks ago given by SAP’s Jie Deng.

 

Please note the usual disclaimer applies that things in the future are subject to change.

 

I only cover a subset of slides; the rest have been posted before on SCN

 

Ready-to-run means no coding, deploy on BI platform

1figready.png

Figure 1: Source: SAP

 

The Generic template shown in Figure 1 is similar to BEx web template; ad-hoc analysis based on BW and HANA data, use context menu to swap axes, filter members, currency conversion, using variable values, to change data in application, use navigation panel, hierarchy support

 

It helps you do OLAP analysis with HANA or BW

 

It is not focused on visualizations but slice/dice analysis

 

It offers calculations, drag and drop

 

It comes with several context menu options

 

You can save as a smart object, reusable object

2figready.png

Figure 2: Source: SAP

 

Line of business or end users can create their own versions or views of apps using the online composition feature

 

End user does not need IT or knowledge

 

You can reuse objects via drag and drop to create dashboard and share by e-mail

 

3figready.png

Figure 3: Source: SAP

 

End users, Line of Business, can create ad-hoc visualizations based on BW/HANA data – create different visualizations, bring together to compose story

 

Workflow is similar to Lumira

 

BW / HANA – online data connection to create ad hoc visualization and create their own stories

 

It is not supported on Universe as a connection – data connection selection dialog window and it does not support universe as a data source

 

Create story, export to PDF, save as a bookmark

 

For the Universe as a data source use basic analysis template

4figready.png

Figure 4: Source: SAP

 

Layout templates – SAP provides templates, provides layout, then go to Design Studio design time to add data sources and functions

5figready.png

Figure 5: Source: SAP

BW Support as of today (source: SAP):

  • Full support of all BEx queries
  • Includes calculated/restricted measures, structures, all types of variables, special OLAP functions
  • Runtime Currency Conversion
  • Variable merge and unmerge
  • Full hierarchy support, compact axes

 

We ran out of time and couldn't completely cover this slide

 

Question & Answer:

Q: When would you use Design Studio Ready-to-Run versus Lumira?

A: Design Studio uses BW online whereas Lumira acquires BW in an offline mode

 

 

Q: Can Bookmark folders be created by users via Java scripting outside of CMC?

A: It is possible to do it using the script

 

 

Q: Can we refresh this ready to run created applications, for ex, if I want to refresh the data daily

A: It's online- yes you can refresh

 

 

Q: Hello. In "Data Dictionary" Layout (Similar to Lumira) do we have all online connections to HANA, SAP BW and BO Universe?

A: Connections to BW/HANA are online in Design Studio; with Lumira it acquires BW data in Offline - could you clarify data dictionary?

 

 

Q: Can I install 1.6 BIP add-on on top of 1.4 BIP add-on in BI platform?

A: Yes

 

 

Q: My question is I've BI4.1 and we've 1.4 add-on installed there now I want to go to 1.6 BIP add-on, can l install on top of 1.4 design studio add-on or I've to uninstall design studio 1.4 add-on and then again install 1.6 design studio add-on freshly?

A: you can install add-on no need to uninstall 1.4

 

 

Q: can we schedule and distribute the design studio dashboard

A: Scheduling is not available as of now

 

 

Q: I'm really trying to understand differences between Design Studio and Lumira for BI Self-Service area. Do you have any document for it or webinar?

A: It depends on your use case; if you need BW online data discovery use Design Studio; otherwise use Lumira. Lumira offers blending features too.  See http://scn.sap.com/docs/DOC-69663

 

 

Q: Correct - I don't see "Prepare" room in Design Studio. Thanks!

A: Exactly - Lumira offers data prep/cleansing, blending/mashups

 

 

Q: Any plans to build an "Explorer" template that mimics the behavior of BusinessObjects Explorer (including facets, search, etc.)?

A: visit SAP Analytics Extension Directory

 

 

Q: is Design Studio fully ready for Mobile use (iOS, Android etc.)?

A: Yes, use the SAP Mobile BI application and it works with iOS and Android

 

 

Q: Any default template based on universe layer?

A: With the universe, use the basic analysis template

 

 

Q: OK, any future plan for using with Roambi products? I think it's SAP right now.

A: It is too soon to comment on RoamBI

 

 

Q: In the generic analysis template, all navigation options are also available in mobile device?

A: Not things like right click - you cannot right click on iOS devices

 

 

Q: Do you have any comparison sheet between Design Studio and Tableau to show how one is better than other?

A: Only with Lumira http://scn.sap.com/docs/DOC-65914

 

 

Q: What browser is recommended for Design Studio - Chrome or IE?

A: Check the SAP PAM for browser support - support.sap.com/PAM

 

 

Q: Can you explain the bookmark functionality? Is it a quick save or will it create another report, similar to a Save As?

A: Please see this blog: http://scn.sap.com/community/businessobjects-design-studio/blog/2014/08/04/insides-on-bookmarking

 

 

Q: Which template had the "spreadsheet view" inside the crosstab? Is this for 1.6?

A: Planning templates have the spreadsheet and yes it is in 1.6

 

 

Q: Will the template functionality be available for Universe data source in future? If so when?

A: Generic Analysis template focuses on slice-dice OALP analysis. So it makes no sense to make the generic analysis template available for UNX Data Source.

Similar scenarios as online Composition Templates/data Discovery Templates for UNX data source are planned to be available with the next releases (unfortunately I can’t give the fixed timeline for now)

 

 

Q: In the planning application when she changed the planned data and refreshed did she say it changed the data in the backend? How is that process?

A: Once user clicks on the save button, then the system has done a commit in the backend and the data is saved in BW.

This works only for an input-ready query in BW backend.

 

 

Q: Any plans on enhancing the export to excel functionality for crosstabs, specifically crosstabs that contain hierarchies? Some of the hierarchical structure is lost when exporting to excel. It would be nice to have something similar to Analysis for Office

A: With release 1.6 SP1Patch1 (to be delivered in CW 9, 2016)) it is possible to export the crosstab with hierarchies into Excel. Within Excel you are able to open or close the hierarchy.

 

Related:

Upcoming ASUG Design Studio Webcasts:

SAPPHIRE / ASUG Annual Conference - Design Stud... | SCN

ASUG BI Webinar List - April 2016

$
0
0

Here the updated list of webinars for January 2016 (Happy New Year to everyone)

 


For all webinars :

 

  • Start Time : 11:00 AM (CT), 12:00 PM (ET), 10:00 AM (MT), 9:00 AM (PT)
  • Duration : 1 hour

 

 

 

April 04 -  Effective and Engaging Data Visualization in SAP Cloud for Analytics

 

Come join us as we transform a truly awful report into something we can be proud of.  Learn when to use different visualizations, which fonts and colors work best, how to effectively use infographics, and tips to avoid common visualization mistakes.

 

 

April 05 - Best Practices for Leveraging SAP BusinessObjects BI 4.x with SAP BW and SAP ERP to Get the Most from Your Existing Meta-Data

 

In this session, attendees will receive an overview on how SAP BusinessObjects BI 4.x can be leveraged in combination with SAP BW, SAP BW on SAP HANA, and SAP ERP to provide powerful analytics and reporting to users.

Through lecture and live demos, you will:

  • Explore different data connectivity options and learn how each of the BI client products is able to leverage your existing meta-data from SAP BW or SAP ERP
  • Compare and contrast hierarchical capabilities of the different BI clients
  • Learn best practices for BEx Query design and OLAP connection management for SAP BusinessObjects BI 4.x

 

 

April 06 - Learn the New Innovations in SAP BusinessObjects BI Platform 4.2 Release


SAP BusinessObjects BI Platform went through significant enhancements. Attend this session to learn the new features / functionalities that will help reduce the total cost of ownership, minimize system downtime and help administrators with easy to use enhancements.

 

 

April 07 - Understanding SAP BI Pricing and Packaging

 

This session will review the basics of BI licensing, and identify resources to help answer your questions.

 

 

April 11 - IoT for IT - SAP IT Operations Analytics

 

Learn how SAP ITOA is breaking down the monitoring silos in IT for holistic, real time and predictive data center maintenance.

 

 

April 18 - BW for Beginners and EDW Professionals Not Familiar with the Current Version of BW on SAP HANA

 

Join SAP Product Management for this session for beginners and those not familiar with the current versions of BW.

 

 

April 19 - Things to Know to Update - Upgrade to BusinessObjects BI 4.2 Release

 

In this session we will cover from the basics to tips, tricks and best practices in planning and executing a successful update (moving from BI 4.0 or BI 4.1 to BI 4.2) or upgrade (moving from BOE XI 3.1 to BI 4.2) project.

 

 

April 27 - SAP Predictive Analytics Roadmap and What's New in 2.5?

 

In this session, we will go over the roadmap of SAP Predictive Analytics. Curious what 2016 means to SAP Predictive Analytics? Our 2016 key themes will be covered during the presentation as well.

 

During the demonstration, we will showcase some of the new features that are delivered in SAP Predictive Analytics 2.5.

 

 

 


I hope you enjoy these session.

 

Please note, that these are webinars organized by the ASUG BI group and for attending you need to be a ASUG Member.

Visual BI Extensions - Using Error Bars in SAP BusinessObjects Design Studio

$
0
0

Error Bars as part of a chart are a way to indicate the error level or - in a more positive way - they are used to express the confidence level in the actual data and are often used in scenarios where the user is looking at a larger set of measurement values.

 

In case you are interested in more details, take a look here - https://en.wikipedia.org/wiki/Error_bar

 

How can we use Error Bars as part of SAP BusinessObjects Design Studio ?

 

Relatively easy with the latest version of our Visual BI Extension Charts. Lets start with a simple data set, where we have 20 measurement values in a Google Sheet.

 

C4A_March_28_001.jpg

 

I am using our Excel data connector which also allows to use Google Sheets and assign the data source to a column chart. In the Additional Properties of the chart I can then configure the details for the Error Bar options. I can choose from a Fixed Value, Percentage, Standard Deviation, or the option Custom - which we will look at a little bit later.

 

C4A_March_28_002.jpg

 

For the simple scenario I am just adding a 5% Error Bar to my measurements and my chart is going to look like shown below.

 

C4A_March_28_003.jpg

 

For the second example I am using another Google Sheet with two sets of measurement values and the upper and lower limit for the error values already being part of the dataset.

 

C4A_March_28_006.jpg

 

In this example we can use the Custom option for the Error Bar, which then allows us to select the measure for which we would like to activate the Error Bar and which measures in the data source represent the upper and lower limits.

 

 

C4A_March_28_004.jpg

 

Using the data from the second example, my chart will look like shown below with the Error Bar option activated for the second set of measurements

 

C4A_March_28_005.jpg

 

 

100 Things you can do with Visual BI Extensions and SAP BusinessObjects Design Studio

Connecting SAP BO Design Studio to SAP HANA

$
0
0

Hi all,


Some time ago I came across some issues when I wanted to connect Design Studio to HANA. The process was not standard and information is scattered. With this guide I hope to speed up the process of connecting HANA to Design Studio. Good luck!

Introduction

This document guides you through the process of connecting Design Studio to a HANA database. If you already have the SAP HANA client software installed (NOT the HANA studio!) you can skip the first part and go to the section “Create ODBC connection”. The same goes if you can obtain the HANA client .exe file from a colleague (and if you installed it already. If not, please do so first).


If you do not have the HANA client software or if you are unsure, follow the steps below. These are needed because for Design Studio to be able to make a connection to HANA, you need to setup a ODBC connection to the HANA database. The drivers needed for this are embedded in the HANA client.

Downloading software

Go tohttps://support.sap.com/home.htmland click on “Download software”.

1. Download software.png

On the right, go to “Search for Software”. Log in with your S-user and search for “HANA client”. Select “SAP HANA CLIENT 1.00”.

2. Download software.png

Download the software that is suited for your system and save it on your C-drive. For Windows 64-bit choose “Windows on x64 64bit”; for Windows 32-bit choose “Windows Server on IA32 32bit”.

3. Download software.png

The HANA client software comes in an archive, but not .zip or .rar, but .sar (SAP Archive). Therefore another piece of software is needed, being the SAPCAR.


Go back the “Search for Software” page and search for “SAPCAR”. Download the highest version of SAPCAR and save it on your C-drive (same place as your HANA client software).

Unpacking the HANA client download

Go to Windows Explorer and navigate to the location of your SAPCAR file. Right-click on the file and open the properties window. Select the location path and copy it.

4. HANA Client.png

Now open the command prompt (cmd.exe), enter “cd ”, right-click and select “paste” to paste to location path.


It should look like this:

5. HANA Client.png

Hit enter. Now copy the name of your .SAR file and paste it in your command prompt. Follow up with the following command:

<name of the SAPCAR file> -xvf *.SAR


It should look like this:

6. HANA Client.png

If you hit the enter button, this command will extract any .SAR file on your pc. If you have multiple SAR files on your pc and you only want to extract this specific one, you can fill in the name of the SAR file on the place of the “*”.

Installing the HANA client software

Open the folder that contains your HANA client software (probably “SAP_HANA_CLIENT”, created by the SAPCAR program) and start “hdbsetup.exe”. Follow the steps to install the software.

Create ODBC connection

If you have a 64-bit version of Design Studio, navigate to the following folder on your pc:

C:\Windows\System32

Open the “odbcad32.exe” file. In the “User DSN” tab, click on “Add…”. Select the HDBODBC driver and click on “Finish”.

----------------------------------------------------------------------------------

If you have a 32-bit version of Design Studio, navigate to the following folder on your pc:

C:\Windows\SysWOW64

Open the “odbcad32.exe” file. In the “User DSN” tab, click on “Add…”. Select the HDBODBC32 driver and click on “Finish”.

----------------------------------------------------------------------------------

7. ODBC.png

The 64-bit driver

 

Fill in the connection properties of the system you want to connect to. In the example below a you can see what the format should look like.

8. ODBC.png

Connecting Design Studio to HANA

Open Design Studio and create a new application. On the bottom left, right-click on “Data Sources” and select “Add Data Source”. Search for the Data Source Name you entered (if you cannot find it, try “Reload connections” first), open it and log on to the system. You have now successfully connected Design Studio to HANA!

 

Kind regards,

Joeri Smits

Listbox year selections

$
0
0

A multi-selection listbox with a fixed number of years.

 

Make a global variable called gv_Year as an integer and a number of extra global variables year1 - n as string. In this example 6 years were used.

On Startup script code;

 

gv_Year = Convert.stringToInt(DS_1.getVariableValueExt("0P_CALYE"));

 

year1 = (gv_Year - 5)+"";

year2 = (gv_Year - 4)+"";

year3 = (gv_Year - 3)+"";

year4 = (gv_Year - 2)+"";

year5 = (gv_Year - 1)+"";

year6 = (gv_Year)+"";

 

CHART_1.setDataSelection({"0CALYEAR":year6});

DS_1.setFilter("0CALYEAR", year6);

 

LISTBOX_YEAR.addItem(year6, Convert.subString(Convert.floatToString(gv_Year - 0.0), 0 , 4));

LISTBOX_YEAR.addItem(year5, Convert.subString(Convert.floatToString(gv_Year - 1.0), 0 , 4));

LISTBOX_YEAR.addItem(year4, Convert.subString(Convert.floatToString(gv_Year - 2.0), 0 , 4));

LISTBOX_YEAR.addItem(year3, Convert.subString(Convert.floatToString(gv_Year - 3.0), 0 , 4));

LISTBOX_YEAR.addItem(year2, Convert.subString(Convert.floatToString(gv_Year - 4.0), 0 , 4));

LISTBOX_YEAR.addItem(year1, Convert.subString(Convert.floatToString(gv_Year - 5.0), 0 , 4));

 

The LISTBOX_YEAR component looks like this after entering ‘2016’ in the prompt.

LISTBOX_YEAR On Select script.

 

var lv_select_arr = me.getSelectedValues();

var lv_element = [""];

 

DS_1.clearFilter("0CALYEAR");

 

lv_select_arr.forEach(function(element, index)

{

lv_element.push(element);

});

 

CHART_1.setDataSelection({"0CALYEAR":lv_element});

DS_1.setFilter("0CALYEAR", lv_element);

Design Studio report-to-report (cell)

$
0
0

Report-to-report (RRI) inside Design Studio. The restriction is that it works only when the details are in the same query.

 

The getSelection() function reads the UID code and applies this to the filter on the other data source(s). When using another query (jump query) this will have other UID codes and is thus not usable (therefore you'll need to use the RSBBS transaction in the BW system).

 

Just take a simple query with some extra details.

 

In this example two crosstabs are used. CROSSTAB_1 (source, with DS_1 as data source) and the CROSSTAB_2 (target, invisible initially, with DS_1RRI as data source).

 

CROSSTAB_1 properties:

CROSSTAB_1 On Select code:


var a=me.getSelection();

  1. a.forEach(function(value, key) {

         DS_1RRI.setFilter(key, value);

});

CROSSTAB_2.setVisible(true);



Design Studio report-to-report (row)

$
0
0

Sometimes you'd like to see details based on a row selection from a crosstab.

 

This requires a main data source and one or more extra (detail) data sources. All must be based on the same query. The UID code from the query is used.

 

Looking in the original query on row level the structure contains UID 00O2TGRLUPXL0WRL473HUPDXY. This is what will be used in the filter.

 

In this example two crosstabs are used.

- CROSSTAB_1 as source crosstab with data source DS_1.

- CROSSTAB_2 as target crosstab with data source DS_2.

 

Settings for the initial crosstab.

 

The code for the On Select event in the initial crosstab.

 

var lv_select =  me.getSelectedMember("00O2TGRLUPXL0WRL473HUPDXY");

 

DS_2.setFilter("00O2TGRLUPXL0WRL473HUPDXY", lv_select);


Design Studio listbox usage

$
0
0

In this case a LISTBOX is read and a filter is set on DS_1 data source. Also an extra text item is being filled with the chosen values to be displayed elsewhere on the canvas.

 

On Startup script code.

 

LISTBOX_REGION.setItems(DS_1.getMemberList("0REGION", MemberPresentation.INTERNAL_KEY, MemberDisplay.TEXT, 10));

LISTBOX_REGION.addItem("All", "All regions", 0);

LISTBOX_REGION.setSelectedValue("All");


There is an extra entry added at the start of the list, this is also the default selection (all entries).

 

The listbox looks like this.

The extra text component All will be made visible when necessary.

 

LISTBOX_REGION On Select script.


var lv_select_arr = me.getSelectedValues();

var lv_selecttext_arr = me.getSelectedTexts();

var lv_element = [""];

var lv_text = "";

 

  1. me.removeItem("All");

TEXT_ALLE_REG.setVisible(true);

 

lv_select_arr.forEach(function(element, index) {

         lv_element.push(element);

         });

         DS_1.setFilter("0REGION", lv_element);

 

lv_element = [""];

 

lv_selecttext_arr.forEach(function(element, index) {

         lv_element.push(element);

         lv_text = lv_text + ", "+ element;

         });

 

TEXT_A_REG.setText(Convert.subString(lv_text, 1));


The last line of code shows the chosen entries in a TEXT element and takes away the extra first comma.

 

Since “All” was placed as an extra first option in the initial list, it’s been taken away again when multiple selection is made.

Also an extra TEXT element named All has an event and is added onto the top right of the LISTBOX.

 

TEXT_ALL_REGION On Select script.


LISTBOX_REGION.setItems(DS_1.getMemberList("0REGION", MemberPresentation.INTERNAL_KEY, MemberDisplay.TEXT, 20));

LISTBOX_REGION.addItem("All", "All regions", 0);

LISTBOX_REGION.setSelectedValue("All");

 

TEXT_A_REG.setText(LISTBOX_REGION.getSelectedText());

DS_1.clearFilter("0REGION");

me.setVisible(false);


This makes it possible to return to all entries after a multiple selection is made.

Visual BI Extensions - Using a "different" Table in SAP BusinessObjects Design Studio

$
0
0

Have you been looking for functionality with the crosstab in SAP BusinessObjects Design Studio but then noticed that the functionality wasn't there and you were looking perhaps for a slightly different table component ?

 

Let me give you an overview on some of the features and functions of our Table component as part of the Visual BI Extensions and why we decided to create the table component.

 

C4A_March_28_007.jpg

 

The first item you will notice in the Additional Properties of our table component is the fact, that it comes with lots of standard features out of the box without the need to write a single line of script, but instead just a simple click away.

 

The Table provides the option to activate Search, Sorting, Scrollbars if needed, Text Wrapping, Interactive Filtering, and the option to Freeze the header for larger tables and scrolling.

 

The option Repeat Members allows you to decide - in a situation where you for example use multiple dimensions in the table - if you would like to repeat the members of the outer dimension or not.


C4A_March_28_009.jpg


Above you can see a screenshot from the table component with the Search option being activated and you can also recognize that the sorting and the interactive filtering has been activated and the user can simply click on the icons in the column header.


C4A_March_28_008.jpg


Above you can see a screenshot of the interactive filtering, where the user is given a list of members based on the assigned data source and has the option to filter the data using a simple click and also has the option to enter a search criteria for that particular column to look for specific members.


C4A_March_28_010.jpg


The Conditional formatting options (Dynamic Alerts) provide the dashboard designer with the option to setup an alert either based on a single measure (example: Revenue > 1 Million), a Measure Calculation (example: Actual - Budget > 1 Million), or a Target Value option (example Cost is between 10 - 20% of the Revenue).


C4A_March_28_011.jpg

In my example I configured an alert based on measure Costs in comparison to measure Net Value and I can then decide if I would like to highlight the actual Value, the Background, or if I would like to add a Symbol to the column....


C4A_March_28_012.jpg

... and then I can setup multiple rules, like in the example where I define the different colors based on the percentage of Cost compared to the Net Value measure.


Another feature the table supports is the Paging that can be configured.


C4A_March_28_013.jpg

Here the user has the option to decide if the page navigation is going to be on the top of the bottom of the page and if the page navigator should be shown in form of buttons (iOS style) or as actual page numbers. In addition the user can decide to repeat the Page header on each new page.


C4A_March_28_014.jpg


And last but not least, the table provides all the formatting options directly in the Additional Properties - no need for trying to find out the style sheet classes - but instead a simple configuration in the Additional Properties can be used to format the table.


Most important - all these features are data source independent and work with BW, HANA, Universes, or spreadsheets as data source.




100 Things you can do with Visual BI Extensions and SAP BusinessObjects Design Studio


Design Studio SDK: Prototype - in 100 LoC to Google Chart

$
0
0

-- This is a prototyping blog, there is no out-of-the-box component from it --

 

I wanted to try including the google charts into Design Studio SDK (https://developers.google.com/chart/interactive/docs/gallery).

The reason was clear in a first view - a lot of nice out-of-the-box charts for visualization. My example was the candle chart (Candlestick Charts &amp;nbsp;|&amp;nbsp; Charts &amp;nbsp;|&amp;nbsp; Google Developers):

 

cand1.PNG

 

After some tries, I could get it (not too clean - but first version working). Therefore here a small how to. Pay attention to my last words why it is not a SDK component, event the license should be ok..

 

Getting Started

As usual, we have to create a component, but this was described a lot of time.

 

Now, the requirement is to add JS which is directly called from google server.

 

define([

  "sap/designstudio/sdk/component",

  "./GoogleCandleSpec",

  "../../../"+scn_pkg+"shared/modules/component.core",

  "../../../"+scn_pkg+"shared/modules/component.basics",

  "../../../"+scn_pkg+"shared/modules/component.prototypes",

  "https://www.google.com/jsapi"

  ],

  function(

  Component,

  spec,

  core,

  basics

  ) {

 

I have used the OLD api, because the new one

     https://www.gstatic.com/charts/loader.js

seems to be not compatible with the design studio requrie call (probably some config is required here). once we add the .js at the end of requrie statement, it calls the -min.js file and this leads to 404 response. W/o the .js ending, it tries to load it w/o ending and this is also 404. The old API seems to work, as it has no ending by default.

 

I would like to check later in time if the new API can also be somehow included into SDK framework, as this could be also a good use case for components which take the content from internal urls.

 

The Google Callback

Second step is the callback requirement when loading the chart API. The included file is actually only a LOADER, the chart libraries must be loaded by API call.

 

The difficulty here was, the loader is also async, therefore a kind of semaphore was required to assure that the afterUpdate method will be called. My semaphore is checking if the initialization is already done, then standard processing is made. In case it is not initialized yet, the afterUpdate call will be ignored.

 

// INIT method

      that.myCallback = function () {         that._chartLoaded = true;         that.processData(undefined, that.afterPrepare, that);         var content = {};         content.dummy = true;         org_scn_community_basics.resizeContentAbsoluteLayout(that, content, that.onResize);      };          that._options = {packages: ['corechart'], callback : that.myCallback};      google.load('visualization', '1', that._options);          that._myId = that.oControlProperties.id;

 

as last line, we have to read out the container ID to place the chart into the canvas

 

Rendering

The rendering is made in onResize() method which is a bit specific for our SCN repository - this method is called always when the canvas gets resized. It means this is similar to afterRendering() method from UI5 - and at this point it is assured that the DOM objects are already created.

 

// RENDERING

      // semaphore      if(that._chartLoaded == undefined) {         return;      }      // reading the array defined in design studio      var candles = that.getCandles();      candles = JSON.parse(candles);           var googleConformarray = [];      for (var cI in candles) {         var cO = candles[cI];                 googleConformarray.push(            [cO.text, cO.start1, cO.start2, cO.end1, cO.end2]         );      }      // google api for array conversion      that._data = google.visualization.arrayToDataTable(         googleConformarray      ,      // Treat first row as data as well.      true);      // clean up canvas      $(document.getElementById(that._myId)).empty();      // create new chart      that._chart = new google.visualization.CandlestickChart(document.getElementById(that._myId));      that._chart.draw(that._data, that._options);

 

Leassons Learned

In short,

* it is very easy to include google charts

* the API is really easy to understand

* google has indeed interesting license - only ONLINE use, see Last Words

 

More to Learn

* currently no events are implemented, here the difficulty will be to assure that the KEY can be found after the event.

 

Last Words

My question was how to make it offline - and the point is - it is not allowed ;-(

Frequently Asked Questions &amp;nbsp;|&amp;nbsp; Charts &amp;nbsp;|&amp;nbsp; Google Developers

 

[...]

Can I use charts offline?

Your users' computers must have access to https://www.google.com/jsapi in order to use the interactive features of Google Charts. This is because the visualization libraries that your page requires are loaded dynamically before you use them. The code for loading the appropriate library is part of the included jsapi script, and is called when you invoke the google.load() method. Our terms of service do not allow you to download the google.load orgoogle.visualization code to use offline.

 

Can I download and host the chart code locally, or on an intranet?

Sorry; our terms of service do not allow you to download and save or host the google.load orgoogle.visualization code. However, if you don't need the interactivity of Google Charts, you can screenshot the charts and use them as you wish.

[...]

 

by this, it is not possible to assure no data will left the company intranet. Of course it is only picking up the library from google servers, but by this "online" requirement and a call to google - it can potentially also push the reported data to google

 

It means, it is nice for any www projects where you have no problems with giving the data to google.

 

How does it look like?

And there is it - candle chart in design studio, directly online from google.

can2.PNG

 

Content in Repository

you can find the coded content in repository.

sdkpackage/src/org.scn.community.prototypes/res/GoogleCandle…

When we produce next version, it will be also in "prototypes".

 

Question to Community

I would be interested in following question - would it be an option to wrap some google charts on the current google license (only ONLINE use)? This means every APPLICATION will call google - I hope this does not ship the data to google, but who knows ;-)

 

Also, the charts can break any time - as the online version is out of the control.

 

What do you think?

BW RFC Connection Replacement

$
0
0

Dear Community,

 

Design Studio application designers, administrators and users who have this tool connected to a BW system and have already had some interaction with SAP Support, know that we (SAP) need the BW RFC Connection (SAP Note 195715) to connect our local Design Studio installations to the BW system at customer side for issues' analysis.

 

As of April 1st, 2016 the BW RFC connection type will be replaced by SAP NI Connection (SAP Note 2295147). It is an SAP proprietary protocol more advanced and secure than the old RFC and GUI connections. It has also the advantage of replacing both (RFC and GUI) in a single connection type (SAP NI).

More info on connection types at SAP Support Portal.

 

This is quite important and critical from a Support/SAP Development perspective when analyzing Design Studio customer issues, since more than 80% of the incidents we get in our queue involve BEx Queries. This connection is also used by other client tools like BEx Analyzer (Excel), Analysis for Office, WAD and Query Designer.

 

All the information regarding this connection configuration is contained in SAP Note 1718597.

 

In case of any question, let me know.

 

Thanks for your cooperation and Kind Regards,
Marcio

Continuous Lasso and Reverse Lasso in SAP Design Studio

$
0
0

Lasso and Reverse Lasso are important workarounds in SAP BusinessObjects Design Studio. Using the Lasso selection functionality allows you to select a particular chart area and zoom into it. Reverse lasso is unique because allows you to remove a particular selection from the chart.  Learn more about them from:

Lasso – http://scn.sap.com/community/businessobjects-design-studio/blog/2014/12/12/design-studio-14-chart-enhancements
Reverse Lasso – http://visualbi.com/blogs/design-studio/general/reverse-lasso-in-sap-businessobjects-design-studio/

We have already seen that Lasso and Reverse Lasso can be implemented separately. However, we had a requirement to implement both of them at the same time. i.e one after the other. One of the limitations we encountered was that the selection on a chart is retained once we lasso and unless we do a clearSelection(), but clearSelection() triggers the onClick() of the chart component, thus clearing the lasso filters.

One approach was to use multiple charts and toggle visibility, but since the application had performance issues due to the number of components, we had to find a workaround while using a single chart to implement the required functionality.

Since we have previous blogs on how to implement lasso and reverse lasso, this blog will focus on how to integrate lasso and reverse lasso together in a single chart component. The logic is to append the Lasso elements with the Reverse Lasso elements and pass on the combined elements as a filter to get the expected outcome.

var members = CHART_1.getSelectedMembers(“ZR_STOKY__ZR_STKEY”);           //Getting selected members of the chart
if ( RADIOBUTTONGROUP_1.getSelectedValue()==”Lasso”) //Lasso or reverse lasso selection
{
lasso = “”;                                              //String to store the elements to global variable lasso
members.forEach(function(element, index) {
if (Convert.indexOf(lasso, element.internalKey)==-1)             //To add an element to the Lasso string if its not present, else omit it
{
lasso = lasso + element.internalKey+”;”; //If multiple entries of same element are present , it throws error when filtered
}
});
if (lasso!=””)  //Clear Selection triggers onSelect to prevent the clearing of filters
{
DS_1.setFilterExt(“ZR_STOKY__ZR_STKEY”, lasso+revlasso);   //Set filter on the dimension that include the lasso and Reverse lasso elements
}
}
else
{
members.forEach(function(element, index) {
if (Convert.indexOf(revlasso, element.internalKey)==-1)    //To add an element to the Reverse lasso global variable string if it’s not present, else omit it
{
revlasso = revlasso + “!”+element.internalKey+”;”;
}
});
DS_1.setFilterExt(“ZR_STOKY__ZR_STKEY”, revlasso+DS_1.getFilterExt(“ZR_STOKY__ZR_STKEY”)); //Set filter on the dimension that include the lasso and Reverse lasso elements
}
CHART_1.clearSelection(); //Clears the selection on the chart

Let’s consider a simple scenario :-

In the initial view we have sales for all the states.

1.png

Lasso is selected from the radio button and few members are selected for Lasso

2.png

The Selected members are filtered out and zoomed.

3.png

Now selected Reverse Lasso and selected all but 2 members on the chart to remove them.

4.png

We get the elements that were not selected now zoomed in.

5.png

This procedure can be done infinite times as per the user requirement.

To reset the selections a button to clear the filter on the particular dimension can be provided.

 

 

Source : http://visualbi.com/blogs/design-studio/general/continuous-lasso-reverse-lasso-sap-businessobjects-design-studio/

ASUG Dashboard Special Interest Group (SIG) Promotions

$
0
0

The 2016 ASUG Annual Conference is getting closer each day (May 17-19). With so many sessions to choose from, your ASUG Volunteers have selected these sessions, highlighting SAP BusinessObjects Design Studio and I highly recommend those sessions.

 

 

Session ID

Title

A3744

Interactive ASUG Influence: Design Studio

A3747

Tetrapak BI Reporting Strategy and Business Empowerment with SAP BusinessObjects Design Studio

A3756

Road Map: SAP BusinessObjects Design Studio: The Road Ahead

A3757

On-Premise BI Versus SAP Cloud for Analytics: What’s In It for SAP Business Warehouse Customers?

A4061

Self-Service Dashboards: SAP BusinessObjects Design Studio and SAP Lumira

A4063

Are You Ready to Migrate from SAP BusinessObjects Dashboards to SAP BusinessObjects Design Studio?

A4108

Unlocking the Value of SAP BusinessObjects Design Studio with Callaway Golf

A5478

All About That Base: Precision Drilling Built Scalable Analytics with SAP BusinessObjects Software

A5821

ASUG Business Intelligence Community Meet-Up

A5840

SAP BusinessObjects Design Studio Deep Dive (Advanced Topics)

 

 

ASUG Annual Conference is once again co-located with SAPPHIRE® NOW, May 17-19th in Orlando, Florida, at the Orange County Convention Center. The following is a snapshot of the education sessions hosted by the ASUG BI Community


If you have already registered, great, we are looking forward to seeing you there. If you have not registered, take a look at the sessions and see how these sessions will help you and organizations now and into the future.  Browse both the ASUG Business Intelligence Session Schedule and Business Intelligence Community Brochure


Additionally, there is one pre-conference session on May 16th related to this theme as well:

https://scn.sap.com/community/businessobjects-design-studio/blog/2016/03/08/sapphire-asug-annual-conference--design-studio-full-day-pre-conference


 

Are you interested to learn more about Design Studio ?

$
0
0

Are you interested to learn more about Design Studio and to take your Design Studio skills to the next level ? If so, then you should consider to join us for our annual Pre Conference at the ASUG / SAPPHIRE Annual Conference.

 

You can find the Details for the Pre Conference here in the Analytics section:

 

http://events.sap.com/sapandasug/en/asugpreconf.html#section_7

 

We have been conducting these Pre Conference for several years now and this year will be the 6 th year in a row that I am honoured to create such a great workshops with my fellow SAP Mentors Tammy Powlas and Joyce Butler.

 

If you are completely new to SAP BusinessObjects Design Studio, then this might not be the "right" workshop for you, but if you already have basic skills in Design Studio and already created a few dashboard and want to now take a look at some additional topics - this is the place to be.

 

Here the agenda details:

 

Key Topics:

- Role of SAP BusinessObjects Design Studio in the SAP BusinessObjects BI portfolio

- SAP BusinessObjects Design Studio deployment options

- Creating a simple KPI dashboards

- Filtering your data using different options

- Using personalization and bookmarking

- Leveraging online composition as part of your dashboard

- Parallel process and background processing of data sources

- Using the geo map component to visualize geographic information

- Using global scripts

- Using the scorecard component

- Using profiling for your dashboard

 

 

We will also conduct a webinar on April 12 to provide more details on this Pre Conference and what will be covered in this great workshop.

 

Here the details on the webinar:

ASUG.com - Events


Upcoming ASUG BI webinars focused on Design Studio

$
0
0

Sometimes it is important to just hear from other teams and other customers about their experience and their approach to a certain problem or a certain product.

That is exactly where the ASUG webinars can help - sharing experience and sharing knowledge.

 

Here is a list of upcoming webinars with focus on SAP BusinessObjects Design Studio:

 


For all webinars :

  • Start Time : 11:00 AM (CT), 12:00 PM (ET), 10:00 AM (MT), 9:00 AM (PT)
  • Duration : 1 hour



April 12 - Preview of Pre-Conference Seminar at ASUG Annual Conference


Join this webcast for an introduction and preview to SAP BusinessObjects Design Studio Deep Dive (Advanced Topics),a hands-on Pre-Conference Seminarat 2016 ASUG Annual Conference.

 

SAP BusinessObjects Design Studio is SAP’s flagship product for the creation of dashboards and custom analytical applications. This full-day, hands-on workshop is a series of activities focused on SAP BusinessObjects Design Studio in combination with SAP BW powered by SAP HANA®.  Attendees will learn to use the different components in SAP BusinessObjects Design Studio and how to go from simple KPI dashboards to more complex, self-service style applications.

 

In this 30 minute session, see a preview of this session and why you should attend this hands-on session lead by SAP Mentor Ingo Hilgefort.

 

 

May 05 - Get Ready: BI/BITI Sneak Preview at ASUG Annual Conference

 

Please attend this webcast to get your BI/BITI Roadmap for the ASUG Annual Conference.  This webcast will provide conference information for all BI/BITI for both ASUG and SAPPHIRENOW and help you plan your conference agenda and maximize your conference experience.

 

 

May 10 - What's New with Design Studio 1.6 Feature Pack

 

Introduce features and functions what will be delivered with Design Studio Feature Pack.

 

 

June 08 - Are You Ready to Migrate from SBOP Dashboards to SBOP Design Studio?

 

Explore the main differences between SAP BusinessObjects Dashboards (formerly Xcelsius) and SAP BusinessObjects Design Studio, and get expert advice on how to migrate your existing SAP BusinessObjects Dashboards to SAP BusinessObjects Design Studio. Attendees will learn key differences between the tools and guidelines for transitioning.

 

Attendees will learn:

 

* Key differences between the tools in various areas such as data visualization, filter components, and mapping solutions

 

* Guidelines for transitioning components already built in Xcelsius or SAP BusinessObjects Dashboards to SAP BusinessObjects Design Studio

 

* Tips to ensure a smooth transition for your dashboard designers as well as your users and best practices on performance, such as design configuration tips and selecting the right data sources

 

 

July 12 - Tetrapak BI Reporting Strategy and Business Empowerment with SAP BusinessObjects Design Studio


Learn how Tetrapak is synergizing IT and business to drive agile business intelligence (BI) strategy using standardized, repeatable, and clearly understood processes across the organization. This session will present the key driving principles for deploying BI strategy within Tetrapak, where Performance = People+Process+Tools.

 

 

July 13 - SAP Runs SAP: Information Design at SAP • Framework on Reporting Principles


The International Business Communication Standards (IBCS) are proposals for the conceptual, perceptual, and semantic design of comprehensible business reports and presentations. The session will cover the selected approach to standardize reporting in the controlling department at SAP and the technical implementation in various SAP reporting tools.

 

 

Enjoy those sessions.

 


Visual BI Extensions - Period Selector

$
0
0

There are situation where you are looking to build a dashboard in SAP BusinessObjects Design Studio and you do require a time based filtering scenario.

 

You will notice that Design Studio out of the box does not provide any component focused on such a workflow. You have the "usual" candidates for filtering data, but nothing that is focused on a time based / period based scenario.

 

This is where the Period Selectos as part of the Visual BI Extensions can help.

 

Here are two of our common used Period Selectors

 

blog_001.jpg

 

blog_002.jpg

 

So why are they unique (and patented) ? Because they allow your business user to quickly select a month, a quarter, or a year and in case of the Multi-Select option they even allow to select across multiple years - so comparing for example your revenue  across several years in Q1 becomes something that is just a few clicks away.

 

In addition the period selectos also allow to specify the return format:

 

blog_003.jpg

 

 

In this scenario you can choose from a list of predefined formats but you can also specify your own return format using the typical abbreviations such as MM for a two digit month or YYYY for a four digit year.

 

If you are interested in time based filtering and want to provide your users with a easy to use and simple experience and save yourself from writing lots of scripting code - these components can be a great help.

 

100 Things you can do with Visual BI Extensions and SAP BusinessObjects Design Studio

Visual BI Extensions - Multi - Axis Charts

$
0
0

Somtimes you will need a chart that shows more than a single measure and sometimes these measures can be off very different scale. There might even be a situation where you will need more than two measure in the chart with very different scales.

 

In core Design Studio you will notice that there is a Combination chart but there are only limited dual axis charts and if you would like to go beyond two axis - there is nothing available to you.

 

This is where the Multi-Axis Chart as part of the Visual BI Extensions can help.

 

blog_004.jpg

 

Lets say we have these three measures and we do need them in a single chart but based on their scale with up to three different axis.

 

blog_005.jpg

 

 

By default our charts will show these measure, but because we have chosen the Multi-Axis chart we can configure the type of visualization......

 

blog_006.jpg

 

... as well as on which axis we would like to plot the information.

 

blog_008.jpg

 

.. resulting in a Multi-Axis Chart showing three measures on three separate axis.

blog_007.jpg

 

and in that way create a multi - axis chart


100 Things you can do with Visual BI Extensions and SAP BusinessObjects Design Studio

Context Menu: Activate and deactivate hierarchy display in table component

$
0
0

Problem

We are using an analysis table in Design Studio on which users can apply filters. Many dimensions are using hierarchies, therefore, filters can be applied on hierarchy nodes. In some scenarios, the users asked to switch from the hierarchy display to a flat presentation.

 

With the standard context menu, the only entry which could be used to achieve this is "Select Hierarchy". When you select "No Hierarchy" from the  hierarchy list, the analysis table will show the flat representation. But at the same time, all hierarchy node filters are discarded.

 

Solution approach

We enhanced the standard context menu with a custom setting to only deactivate the display hierarchy. The flat presentation is available and all hierarchy filters are maintained.

 

Steps

  1. Select the CONTEXT_MENU component
  2. In Properties, go to Custom menu options
  3. Create a new entry, name it "(De-)Activate Hierarchy"
  4. Click on "Edit Script" to open the editor
  5. Paste the code snippet
  6. Confirm all windows with "OK"

 

Code Snippet

if(me.getClickArea() == 'MEMBER' || me.getClickArea() == 'DIMENSION'){  //only execute the actions if Member or Dimension has been clicked
var context = me.getContext();  context.forEach(function(value, key) {   if(me.getDataSource().isHierarchyAssigned(key)){     //only continue if the dimension has a hierarchy assigned    if(me.getDataSource().isHierarchyActive(key)){         me.getDataSource().deactivateHierarchy(key);    } else {         me.getDataSource().activateHierarchy(key);    }   }  });
}else{  // if needed, add action or message if neither Member nor Dimension has been clicked
}

The above snippet will turn the display hierarchy on or off depending on the current state and only if a hierarchy is assigned.

 

Known issues

Display: As of now (we are working with BO Design Studio 1.6) it is not possible to turn this entry on or off dynamically per component. So once you implement this, the entry will show up for every context menu. Read more on context menu tweaking here: Design Studio 1.5: View on Context Menu Parameterization

 

BEx query structure: When executing this on a hierarchical BEx query structure, an error message will be generated because it is a Member and a hierarchy is assigned, but deactivation of the hierarchy is not possible.

Timer functionality in SAP Design Studio without SDK and real time package

$
0
0

Hi Everyone,

 

We all might have seen requirements where a timer functionality is required in our dashboards. We can achieve it using SAP provided SDK timer component or by installing real time package. But, it is not so easy always to install add-ins in server side frequently. Especially in organizations which are having BO systems with huge number of users and applications.

 

We were in a process of recreating one of our SAP Dashboard applications into SAP Design Studio. In our manufacturing environment, this particular SAP Dashboard application was doing a great job by providing real time data with charts and alerts and a data refreshing frequency of 15 minutes. Our BO admin team is not so interested in SDK or add-ins, because of the reasons mentioned already. I was trying an alternative way to achieve this with codes.

 

How to do it?


Running loops in background is not so good for the performance of dashboard. But here I am running an if..else loop in background with a condition which is our desired time delay in milliseconds.


getTickCount() and if()...else() loop


Two global variables, starttime and endtime are defined to capture time stamps and interval calculates the difference between both in milliseconds.

 

starttime captures time just after DS_1 load by keeping the code in "On result set changed".

 

End time is captured inside if() where a dummy variable dummy increments by 1 for each iteration and global variable interval calculates endtime - starttime.

 

Code inside if() runs until interval reaches the time delay which we have given in the if() condition.

 

Else()  contains the code to be executed periodically, in my case reloading DS_1.

 

Please make a note that getTIckCount() function is available from SAP Design studio 1.5 onwards.

 

 

Short video below shows the dashboard in action. reloads every 10 seconds based on the above code.

 

 

Is this a good solution?

 

Well, this may not be the best solution as there is calculation involved in every single iteration of loop and loop always runs in background.  But we could achieve our expected timer interval of 15 minutes with this solution without installing SDK or real time package.

 

P.S

 

SDK is a powerful option in SAP Design studio, but sometimes it is difficult and time consuming to use SDK components in productive use for each and every requirement, also not all BO admins encourage frequent requests to install add-ins in server side. I believe components like timer,  progress bar etc are basic requirement in a dashboard tool.

 

Can SAP make these basic components readily available like SAP Dashboard Design ( Xcelsius) to everyone ?

 

I welcome your feedback, suggestions and alternative ideas on this

 

Nikhil Joy

Viewing all 662 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>