Clojure FOR BI PROS Tableau
Tableau Data Extract koans
May 7, 2015
0
, , , , , , ,

Clojure IconProgramming is a way to express ourselves, is a form of art if you do it with style and do it properly. The source code is a literature. However, the programming language determines the genre, you can write heroic poems in C or ASM, zen koans in Lisp/Clojure, contemporary farout stories in Haskell or write the next Game of Thrones in Elixir. However, with Java whatever you do, the result will be some romantic wordy crap with boring sceneries. Tableau is about Zen: be expressive, pithy and beautiful.

But how can we generate tableau extracts in this Zen way?

First of all we must chose a programming language. It should be clean, short and and functional. Each and every characters must have a meaning. It should be functional as functional languages are designed to work with data more efficiently. Since in essence everything in functional languages are data it become very easy to handle and manipulate data. The same set of functions used to manipulate data structures work the same on all data structures, so you can transform data from one structure to another and still apply the same functions. We can consider D, F#, Haskell, Clojure, Erlang or Elixir. Erlang and Elixir are overkill for simple extract creation, D is not clean enough, F# is too microsoft and Haskell generally sucks in IO with its idiomatic monads.

So lets use Clojure.

I made a simple  library which wraps the Java functions into a clojure namespace. It is simple, the complete library is smaller than 100 lines of code.

Lets see an example how it generates and extract:

Create extract from test data set

Create extract from test data set

Again, every character, every closure make sense. table-definition  defines the structure of the extract. You do not need to create new object instances just to call setter methods to pass the stuff to an another object. Just define the table without any unnecessary characters, that’s it. The test-data function follows a different functional pattern. repeatedly takes a function and executes it infinity time in a lazy way. Theoretically it returns a vector with infinity number of elements, however, it will calculate the values for the elements on their first read value operation.

The “main” function is clean and easy to read as well. The with-extract  closure ensures that the TDE file will be closed when the execute will go out of scope.  The threading macro ( -> ) instructs the compiler to take the result from the previous command and push it as the first argument for the next function in scope. table tries to open a table, return it’s definition if exists or create if not.  add-rows  takes 10 rows from test data. Again, test-data  is an infinite sequence, but we “take” only 10 from that never ending sequence.

No objects, no lengthy parameter passing and return code mungling and no variables at all. This immutable world with short form expressions are the nirvana, source of programmers’ peace.

 

Tamás Földi

Tamás Földi

Director of IT Development at Starschema
Decades of experience with data processing and state of the art programming. From nuclear bomb explosion simulation to distributed file systems. ethical hacking, real time stream processing practically I always had a great fun with those geeky ones and zeros.
Tamás Földi

Related items

/ You may check this items as well

Pasted image at 2018_01_09 04_59 PM

Python Experiments in Tableau 1. – Add live currency conversion to Tableau Dashboards using TabPy

Programming is a way to express ourselves, is a fo...

Read more
Tableau Docker

HOWTO: Tableau Server Linux in Docker Container

Programming is a way to express ourselves, is a fo...

Read more
Tableau Consistency Checker

Tableau Filestore Consistency Checker – How Repository Maps to Filestore

Programming is a way to express ourselves, is a fo...

Read more