An Embedded Challenge

It started with a tweet:

Okay, this actually seemed pretty simple and straightforward to me, and I said as much. I don’t use Tableau, I use LogiAnalytics, but a javascript embed string is a javascript embed string. A string is a string. Isn’t that the basis of string theory?

Plus, I had already done something similar to build a very light presentation engine using web pages and Logi reports. We had built two different solutions.

The specs are these:

1) A way to use the embed code for LogiAnaylitics or Tableau in a presentation, typically PowerPoint. (My first thought was to use MS Access since it has a web browser object available in the forms toolset.)

2) “Share links” were not an adequate solution because they pull the entire page, not just the report/visualization. (This doesn’t actually apply to Logi. Logi is a BI engine based in .Net and the resulting in XML files are processed through a server application overlaying IIS, and it is fed with a report definition and all requisite parameters processed as a URL querystring. ie )

3) It has to be easy to use, not requiring any scripting – by the user.

A quick web search turns up Live Web which is promising. A little more searching and one finds this is not the first attempt to address the challenge – here is a step-by-step approach that may meet Jon’s needs, except he would need to code it. It also uses the links instead of the embed code, so it probably doesn’t give exactly what he wants. But…why do this? Since I am not a Tableau user, why do I care?

As I said, there are similarities in using Logi and Tableau, and there is something powerful about doing a data-heavy presentation without relying on either static images or exiting to a web browser. This is why I created a web-based presentation model to give presentations off the SCHEV Research web site using a defined series of live pages with predetermined parameters for the default views of each page. We built the Pathways model to focus on delivering sequential Logi reports that needed only parameter changes (handle via global variable settings) to be updated while having the flexibility of using existing report objects or creating new objects that could be used elsewhere.  The slick thing about the embed code is being able to frame around an active BI object and explore the data while in the midst of a presentation without losing the rhythm of progress forward.

I downloaded LiveWeb after my first attempts with MS Access 2013 failed. I kept running into an inability to load the web browser object….let me explain the problem with 2013.

I isolated the project into two parts, storage and display. Any project that comes along, what’s the first thing to be done? Why, build a database! Actually, all that is needed is a table and this could be in Excel. Of course, it could also be in just a text file, but I am database guy. So, I built a table to hold the embed codes and associate them with username and a presentation name, so that multiple users could use this tool for multiple presentations.

I then created a form in Access and added the web browser control to it and it failed. I did some research and found registry settings that I would need to change in Windows to make this work and then tried again with Access  2010 since the web pages  I had found suggested it was a security change in 2013 creating the problem and I wanted to keep the solution as simple as possible. So, I tried 2010 and could install the browser control. Unfortunately, it was limited in that it has to be passed a URL, not just HTML code. The easiest solution would be something that allows passing something like this:

<HTML><BODY><div id="divFA19_Report" data-applicationUrl="" data-report="FA19_Report" data-autoSizing="height" data-linkParams="{'lbUNITID':'XXXALL', 'lbFTEGRP':'1'}" ></DIV></BODY></HTML>


<HTML><BODY><script type='text/javascript' src=''></script><div class='tableauPlaceholder' style='width: 1024px; height: 694px;'><noscript><a href=''><img alt='Dashboard 1 ' src='' style='border: none' /></a></noscript>  </div></BODY></HTML>

Even better would be to lose the need to wrap the code with the HTML and BODY tags.

I created a model that did exactly that. My approach is to coding is to take advantage of all sorts of tools I have available. One of which is that I have multiple web servers under my control and thus it is way easy to create a very simply Classic ASP page that received the embed code as a request variable (in the URL querystring), place it in the page, and execute it. Unfortunately, the Tableau code tends to exceed the limits that a number of browsers will allow for that, servers as well, as a good security measure. So, enter the database.

We have a table with codes. We simply need to access that, pull one row at a time, load it in the page, and execute the page and we are done. I moved the data to a table on SQL Server and created a simple stored procedure.

 [key] [int] IDENTITY(1,1) NOT NULL,
 [usrname] [varchar](50) NULL,
 [presentation_name] [varchar](50) NULL,
 [slide_title] [varchar](50) NULL,
 [slide_order] [int] NULL,
 [embed_code] [varchar](max) NULL,
 [embed_type] [varchar](50) NULL

The stored procedure is, as I said, quite simple:

ALTER proc [dbo].[sp_embed_slideshow] @UserNM as varchar(5), @prestitle as varchar(50), 
@slide as int
Select key, usrname, presentation_name, slide_title, slide_order, embed_code, embed_type 
from slideshow
where usrname=@userNM and presentation_name=@prestitle and slide_order=@slide

The next piece is a simple Classic ASP web page using VBScript:

<!--#INCLUDE VIRTUAL="/someconnection.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body bgcolor="#ffffff">
 cmdtext="exec sp_embed_slideshow '" & user_name & "','" & presentation_name & "'," & slide_num
 dim rget
 set rget =CreateObject("ADODB.Recordset") cmdtext, someconnection
 do while not rget.eof
response.write (embed_code)
<!--THIS IS FOR LOGIANALYTICS applications only-->
<script src="" type="text/Javascript"> </script>

Once I had downloaded LiveWeb and loaded into a presentation, all I had to was step through it’s wizard and load the following URLS:

These next links use code from Jon’s site:

Clearly, this is not the solution desired. It requires some programming skills (although all the real work is done and anything else is window-dressing or ease-of-use enhancements). It also requires access to a web server and database server.


One can create this in MS Access and then activate IIS (or install it if it is not already installed on your WIndows machine) and use your desktop or laptop for a local user. I don’t really recommend this approach as learning IIS 7 and above is an unnecessary pain for just this project. The alternative is to download UltiDeve Cassini. install it, create a data connection between Cassini and Access, use the ASP code above, and you’re off to the races!

Some night this week I will try to finish off the Access model for download for those that wish to play.

There are probably dozens of other ways to do this, perhaps one or two very easy ways that I missed. Maybe I will create a private service for institutional researchers to use for a very modest fee if there is interest.

I’m interested in any reactions or alternatives.

Will, this is the post I suggested you might want to share.

UPDATE: The needed solution was actually much simpler, once I understood the real problem.

2 thoughts on “An Embedded Challenge

  1. Thanks, Todd. This is interesting, although maybe a bit above my head.

    I was looking for something like this Prezi, Emaze, or where they purport to take embed codes, but limit the code to certain types not including Tableau. There must be an online slide tool that allows any sort of embed code.

    This is what happens when I insert a url instead of the embed code

    And others have already shown how to embed a Tableau workbook in PPT.

    • Jon,

      I looked at your page and what I see is:

      The first three settings regarding allowing full-screen load of the iframe cause me to wonder if they need explicit values. Do you have any idea what the default value might be? Are you using the free version or paid version? There might be differences in what is allowed.

      The second link you provided I had referenced in my post.

Be nice. It won't hurt either of us.

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s