Jedox.com, Salesforce.com and MS Excel – the ultimate sneak preview
or this tabular styled report
Salesforce.com and Excel
The post How to combine data from salesforce.com and Excel with Jedox OLAP appeared first on BInsights.

or this tabular styled report
The post How to combine data from salesforce.com and Excel with Jedox OLAP appeared first on BInsights.
Having worked on couple of projects in the past with Jedox and their implementations across several institutions, I realized a patten of one task which was common across all of them was pushing back the Jedox content to the relational database for multiple purposes. May it be for archiving, backup, referencing (as client can add their own groupings, elements and more).
So multiple times it was the case that we had to custom design the ETL’s to accomplish the same and often we were missing out on couple of Jedox elements (some time on the trivial one’s like attribute cube which are hidden) which weren’t being captured in the push back mechanism.
Hence in this post I am trying to present generic ETL which I have designed recently just to achieve the same, which is completely dynamic in nature and which has all the relevant checks in place to ensure blank content are not dumped and as soon as any data into the relevant element of Jedox starts to appear its included in the dump automatically. This is a metadata driven ETL. which also encapsulate the “fgrp“, “rgrp“, “Config” and “System” databases as well.
The ETL is a combinations of multiple components like extracts from metadata, dynamic variables driven extracts for cube, dimension and more coordinated by a main groovy script.
Feel free to tweak around and I hope this helps you to get more standard solutions across multiple installations.
Hope it helps !!!
Download:
http://www.amolpandey.com/downloads/blog21_download.zip
Refrence: http://www.amolpandey.com/2014/10/05/save-all-jedox-db-to-relational-db-etl/
The post Save All Jedox DB To Relational DB ETL appeared first on BInsights.
In this post I would like to introduce you to the new feature set provided by MSSQL server 2012 (syntax) for paged result sets using the “OFFSET FETCH” clause
http://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx
Now we got the SQL in place to provide the flexibility, so how we go about leverage it. For the same, I have sketched out a very user friendly interface with all the features of a paged report along with the features for the user to operate upon the rows:
The above report provided the functionalities of sorting, paging, user selections and operations upon the same with the help of dynamic sql constructed by the help of variables.
Give it a try with the code base provided in the download and I hope it provide you the infrastructure required to achieve similar for your feature rich reports.
Downloads:
http://amolpandey.com/home/downloads/blog22_download.zip
Refrence: http://www.amolpandey.com/2014/10/09/paged-report-in-jedox-web/
The post Paged Report in Jedox Web appeared first on BInsights.
Heutige Grafikkarten sind aufgrund ihres Aufbaus perfekt dazu geeignet, große Mengen an Zahlen parallel zu verarbeiten. Besonders Berechnungen wie Aggregationen, Rules oder Datenfilter, die im OLAP-Szenario häufig vorkommen, werden durch Grafikkarten signifikant beschleunigt, da hier meist dieselbe Rechenoperation auf einer großen Menge von Daten ausgeführt wird (Single Instruction, Multiple Data, SIMD).
Doch nicht nur bei einzelnen Abfragen, auch bei der Erstellung einer großen Menge an Berichten oder beim Datenimport, kann die Verwendung von Grafikkarten dazu führen, dass die Berechnungen nicht eine ganze Nacht in Anspruch nehmen, sondern bestenfalls nur die Mittagspause.
Im Durchschnitt werden derzeit Beschleunigungen zwischen fünf- und zehnfach erreicht.
Diese Frage ist jedoch pauschal nicht zu beantworten, da der Beschleunigungsfaktor gegenüber der CPU-Version des OLAP Servers von verschiedenen Umständen wie der Beschaffenheit und Größe des Datenmodells, der Art und der Anzahl der verwendeten Rules und auch der Komplexität der jeweiligen Anfrage abhängt.
In einzelnen Anfragen hat sich in Performanceanalysen eine über 70-fache Beschleunigung gegenüber der CPU-Version des OLAP Servers gezeigt.
Es existieren aber auch Worst-Case-Szenarien, bei denen die Verwendung des Jedox OLAP Accelerators keine, oder eine wenig signifikante Beschleunigung gegenüber der CPU-Version bewirkt.
Die größte Beschleunigung wird mit dem Jedox OLAP Accelerator erreicht, wenn große Datenmengen verarbeitet werden. Hier kann die GPU ihr volles Potential ausschöpfen, da ihre vielen Prozessorkerne die Daten parallel verarbeiten können und somit im Vergleich zur CPU-Version weniger Rechenschritte und somit weniger Zeit benötigt werden. Große Datenmengen werden insbesondere bei Berechnungen auf hochaggregierten Werten verarbeitet (in Würfeln mit ca. 10 Millionen oder mehr gefüllten Basiszellen), aber auch komplexe Rules und Datenfilter in Subsets können große Datenmengen verursachen und somit durch die Verwendung des Jedox OLAP Accelerators auch in kleineren Würfeln um ein vielfaches beschleunigt werden. Im Einzelfall lässt sich jedoch nur experimentell herausfinden, wie hoch die Beschleunigung durch den Jedox OLAP Accelerator ist.
In den meisten Fällen benötigt eine Würfelzelle 16 Byte im GPU-Speicher. Je nach Anzahl und Größe der verwendeten Dimensionen kann die Größe einer einzelnen Zelle auch 24, 32 oder mehr Bytes betragen. Somit hängt der Speicherbedarf des Datenwürfels auf der Grafikkarte von der Anzahl der tatsächlich existierenden (“gefüllten”) Zellen im Würfel ab. Geht man von einer Datumsgröße von 16 Byte aus, so würden beispielsweise auf eine NVIDIA Tesla C2070 mit 6 GB Grafikkartenspeicher (VRAM) rund 400 Millionen Datenzellen, auf eine NVIDIA Tesla K40 mit 12 GB VRAM entsprechend doppelt so viele, also rund 800 Millionen Zellen passen.
Es wird empfohlen, die verwendeten Grafikkarten nicht mit mehr als 75% des verfügbaren VRAMs zu befüllen, um noch genügend Platz für Berechnungen und Zwischenergebnisse zur Verfügung zu haben. In einigen Fällen, z.B. bei der Verwendung rechenintensiver Rules, könnte sogar eine maximale Befüllung von lediglich 50% des VRAMs sinnvoll sein. Dies sind jedoch lediglich Richtwerte und sollten für den Einzelfall geprüft werden.
Der Jedox OLAP Accelerator kann stets ohne funktionale Einschränkungen verwendet werden. Dieser beschleunigt automatisch die unterstützten Operationen mit Hilfe der Grafikkarte. In allen anderen Fällen greift der OLAP Server auf die CPU-Version der Operationen zurück.
Die unterstützen Operationen sind:
Aktuelle Handbücher finden Sie hier.
Einige Funktionen befinden sich derzeit in der Entwicklung und werden noch nicht beschleunigt, d.h. nicht von der Grafikkarte, sondern von der CPU berechnet.
Das sind konkret:
Es kann aber ohne funktionale Einschränkungen stets der Jedox OLAP Accelerator verwendet werden. Dieser greift in diesen Fällen einfach automatisch auf die CPU-Version des Jedox OLAP Servers zurück. In allen anderen Fällen wird die Grafikkarte und somit der Jedox OLAP Accelerator zur Berechnung verwendet.
Bei der Modellierung der Würfel sollte darauf geachtet werden, dass Dimensionen, bei denen bei der späteren Verwendung oft auf tiefaggregierte Elemente zugegriffen wird oder bei denen mittels Datenfilter der Elementbereich eingeschränkt werden soll, möglichst nach ihrer Größe geordnet an oberster Stelle im Würfel eingefügt werden.
Das Video unten präsentiert einen unterhaltsamen Vergleich zwischen CPUs und Grafikprozessoren.
The post Zünden Sie den Datenturbo – GPU FAQ appeared first on BInsights.
Hi,
A seemingly trivial looking task took me all over the board recently to figure out a solution for the business where users didn’t wanted to create consolidated nodes in the dimensions to get the aggregations, instead they wanted to get the aggregated results via subset which where filtered based upon the attributes flags, phew !!!
Ne ways I thought this should be achievable by some tips and tricks applied in the areas of excel based formulas and get the result. So instead of extending my words further I will first present you with the picture which would directly illustrate the problem and solution which I will describe below more:
From the above as you can see, the “Sum by Subset” row has the longest looking formula, but this formula once broken down to components is very easy to interpret.
This formula is initially using the PALO.TFILTER to generate the filter for the dimension year to include only the elements “2011” and “2012”.
This is then fed to the PALO.SUBSET formula which is responsible to generate the subset required to be fed into the PALO.DATAV (be careful this is DATAV not DATAC, which is array based retrieval of values from the cube via Excel)
Once we have got the PALO.DATAV working we wrap up the output into the Excel based SUM formula and enter the all content of the formula as array formula (Ctrl+Shift+Enter).
And there you go, you have got the result as desired aggregated summed values for the two years worth of data in excel spreadsheet, this can also be leveraged in paste view generated via Jedox add-in for excel.
Now what you have read so far is part of the story till Excel was in picture, but the same successful story is not so successful in Jedox web, because I do acknowledge that Jedox has made a smart and rich UI to replicate excel on web, but still some glitches are found, which actually elongated this story.
Jedox web is not so good as evaluating the nested array formulas as of yet and I expect it to be fixed up soon in next coming releases, once its done it awesomeness will be increased further…
So the solution to the rescue for Jedox Web for the similar to achive is the custom UDF via Macro.
<pre> function subset_sum($region,$yearPattern){ // Define constant variables. define('HOST', 'localhost'); define('PORT', '7777'); define('USER', 'admin'); define('PASS', 'admin'); // Establishes a new connection to the OLAP server. $connection = palo_init(HOST, PORT, USER, PASS); // create the variables db_name and cube_name $db_name = 'Demo'; $cube_name = 'Sales'; $tFilter = palo_tfilter(array($yearPattern),true); $ySubset = palo_subset($connection, $db_name,"Years",1,null,null,null,null,$tFilter, null); $ySubset = array_map(function($element){return $element['name'];}, $ySubset); array_unshift($ySubset,2,1); $val = palo_datav($connection, $db_name, $cube_name, "All Products",$region,"Year",$ySubset,"Actual","Units"); unset($val[0]); unset($val[1]); // Closes the established connection. palo_disconnect($connection); return array_sum($val); }
Attached along with this post are both the Excel and Jedox web based solutions… And I look forward to the comments if any thing better can be done !!!
Hope it helps…
Download:
http://amolpandey.com/home/downloads/blog23_download.zip
Refrence: http://www.amolpandey.com/2014/10/11/sum-over-subset-jedox/
The post Sum over subset… Jedox !!! appeared first on BInsights.
Hi,
Recently coming across this issue, and problems relating to it. I took upon a following approach which I would like to share across, helping a wider community and get reviews on the same:
Problem:
Many times designing the cubes there are situations in which the cube may not have all the dimensions required for the reporting purposes reason’s being, the planning users want to splash data only on certain limited set of dimensions, but for analytical purposes they need some additional dimensions (which may be attributes of previously used dimensions for planning cubes).
Or for many other reasons where there are lookups involved or complex computation is involved between the planning and reporting cubes. But the summary of the problem is, keeping the cubes in sync real time. So that the numbers remain homogeneous across the system and do not get out of balance, confirmed by many numerous reconciliation reports which are tedious to keep an eye always.
Some arguments do exist that Rules can help achieve this to link multiple cubes, but to my experience so far, Rules are great when used for computations upon variables within one cube itself (even good when cube sizes are relatively small with look up formulas), but as soon as lookup functions start to appear in the rules like “PALO.DATAC” that’s where none my rules were ever performant from usability of the system (as my projects involved large data set cubes), not just with Jedox event Microsoft confirms this nature of SSAS and suggest to keep the cubes comprehensive of data as far as possible.
Microsoft:
“Any calculation using the LookupCube function is likely to suffer from poor performance. Instead of using this function, consider redesigning your solution so that all of the data you need is present in one cube.”
http://msdn.microsoft.com/en-au/library/ms144720.aspx
Solution:
At work I realized always keep things configurable (Golden Rule), as every day some thing changes like rules, logic, constants. So the best mechanism I planned to suit the flexibility requirements to keep the cubes in sync was to leverage the Jedox ETL but custom designing the ETL project to keep the cubes in sync by the required variables, and kicking off the ETL by the web service triggered by the Supervision Server on the cell change event, this way we wont loose out on any cube change event and all the affected cubes are also synced up:
The configuration of the set up is as follows:
1. Configure the “PALO.INI” for monitoring cell change events via Supervision Server
Add the following command:
“use-cube-worker”
2. In the “SVS/sample_script” folder of Jedox create a copy of “sep.inc.on_cell_change.php” and place it in the “custom_script” folder by renaming it to your choice, in my case it is “sep.inc.on_cell_change_cube_sync.php”
Amend the code in the file as follows:
/** * Sample Script for cell change event in Jedox OLAP Server. Version 6.0.0 * SVN: $Id: sep.inc.on_cell_change.php 239 2013-02-12 14:52:17Z vmalicevic $ */ // adapt protocol, host, port here to match your setup define('ETL_URL','http://127.0.0.1:7775'); // wait for job to finish prior returning status define('WAIT_FOR_FINISH', true); // max execution time of script in seconds used in combination with WAIT_FOR_FINISH define('MAX_EXECUTION_TIME', 10); class SEPEventHandler extends SEPEventHandlerBase { public function OnUserLogin($username) { sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< User logged in: $username >>"); } public function OnUserLogout($username) { sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< User logged out: $username >>"); } public function OnUserAuthenticate($username, $password) { // bool sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< User authenticate >>"); return true; } public function OnUserAuthorize($username, $password, array& $groups) { // bool sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< User authorize >>"); return true; } public function OnWindowsUserAuthorize($domain, $username, array $winGroups, array& $groups) { // bool sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< User Windows authorize, domain $domain, username $username >>"); $groups = $winGroups; return true; } public function OnServerShutdown() { // void sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< Server shutdown handler >>"); } public function OnDatabaseSaved($database) { // void sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< Databased saved : $database >>"); } public function OnTermination() { // void sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< Termination handler >>"); } # setting the cubes or part of cubes which should be triggered public function InitCubeWorker($database,$cube) { if($database == "Demo") { # set triggering area for cube ‚Sales‘ if($cube == "Sales") { $AreaA = array(DIMENSION_TOTAL,DIMENSION_TOTAL,DIMENSION_TOTAL, DIMENSION_TOTAL,DIMENSION_TOTAL,array('Units','Turnover')); $this->WatchCubeArea($AreaA,'SalesCube'); } } } public function OnDrillThrough( $database, $cube, $mode, $arg ) { // string sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< OnDrillThrough >>"); return "not implemented;\r\n"; } public function InitDimensionWorker() { sep_log("<< USING SAMPLE SCRIPT PLEASE ADJUST TO MATCH YOUR CONFIGURATION >>"); sep_log("<< Get triggering dimensions >>"); } } function SalesCube($database, $cube, $areaid, $sid2, $coordinates, $value, $splashMode, $additive) { include_once('etl_code.php');</pre> <pre>$user = get_user_for_sid($sid2); // user who made the change $groups = get_groups_for_sid($sid2); // groups of the user who made the change if ($coordinates[5] == 'Units') { # read the Price of target product from it's attribute cube $unit_price = palo_dataa("SupervisionServer/$database", '#_Products',array('Price Per Unit',$coordinates[0])); # calculate turnover $turnover_cell = array ($coordinates[0], $coordinates[1], $coordinates[2], $coordinates[3], $coordinates[4], 'Turnover'); $turnover_value = $unit_price * $value; # starting to lock the database (needed to be allowed to change data) # (notice that the time the server will be locked for writing has been minimized to the minimum time needed) event_lock_begin($areaid,$sid2); # get old units value $oldUnitsVal = palo_data("SupervisionServer/$database", $cube, $coordinates[0], $coordinates[1], $coordinates[2], $coordinates[3], $coordinates[4], $coordinates[5]); # write original dataset at given coordinates in 'Sales' cube # (notice that in case of a triggered event you may decide yourself whether the input data should be written to # database or not. In case you want it written you must not forget to write it into the database) $write = palo_setdataa($value, FALSE, "SupervisionServer/$database", $cube, $coordinates); # write calculated turnover into column 'Turnover' in 'Sales' cube $write = palo_setdataa($turnover_value, FALSE, "SupervisionServer/$database",$cube, $turnover_cell); # ending lock of affected database event_lock_end(); } elseif ($coordinates[5] == 'Turnover') { # Throws a popup notice in Excel sep_error("Warning", "No one is allowed to change the Turnover"); } //Put the ETL Kickoff code at the bottom of the script so that once the changes intended by the user are saved to the cube can be picked up by the corresponding ETL event. //Location of ETL kick off code is vital to address the requirements. sep_log("ETL Function is about to be called !!!"); sep_log(dirname(__FILE__)); startJob(); }
Also addtionally in the same folder create the following file called “etl_code.php” for custom code relating to ETL kick off
</pre> function connectSoap() { $wsdl_url = ETL_URL . '/etlserver/services/ETL-Server?wsdl'; $server = @new SoapClient($wsdl_url, array('exceptions' => true, 'location' => $wsdl_url)); return $server; } function startJob(){ sep_log("ETL Function is called..."); $server = connectSoap(); $project = 'LearnDummy'; $type = 'jobs'; $name = '[J][JustFromEvent]'; $locator = "$project.$type.$name"; $response = $server->execute(array('locator' => $locator)); sep_log("ETL Kick off has now been called..."); }
3. Following the above changes amend the “SVS” configuration file for the script “sep.inc.php” to point to you new custom script:
include './custom_scripts/sep.inc.on_cell_change_cube_sync.php';
4. Finally restart the MOLAP service and , fire up a Jedox spreadsheet and with your inputs flowing in to the cube and keep an eye on the Jedox ETL log accumulating, indicating the process works and your ETL is being called upon any changes occurring in the targeted cube region. (In my case the ETL name was “LearnDummy” with the Job name as “[J][JustFromEvent]“)
Note: One thing to be very careful for this process is, to ensure that this mechanism is primarily built for user based inputs to the cube from spreadsheets, to track them and sync them over. But for any ETL based cube load, the SVS event must be ensured to be de-activated for the optimal performance in the nightly load processes, if missed can lead to huge overburdening of the process which it wasn’t designed to cater.
The main benefit I experienced from this solution is that its an async operations hence user don’t realised any performance impacts, as the user inputs trapped are only used for kicking off the ETL job which works on its own, effectively by queuing jobs under heavy loads and ensuring all operations are accomplished with the logs in place to review and audit.
Hope it helps, Enjoy !!!
Refrence: http://www.amolpandey.com/2014/10/18/cube-sync-real-time/
The post Cube Sync Real Time appeared first on BInsights.
Hi,
Working with Jedox and saying Grid is not enough is little sarcastic… There cells all over the places !!!
Well I thought to bring out this topic for a simple reason that though in the product such as Jedox there are enough grid to keep one busy, but by the nature of them they are still little limited to certain features which the power of widgets combined with JavaScript multiple mature grid components can spark life in your applications.
Limitations by not using Widgets/JS Grid Combo:
1. If you tend to use a vertical dyna-range (Jedox), it dynamically expands the whole set of rows across all columns (like insert row functionality) though good enough but from a ease of use design perspective it severely limits the report/app design, as many of the times when working with dyna-ranges with only small number of columns such as 2~5 we would had to leave the rest of the columns unused as when the report is rendered any content on the same will be pushed down as the dyna-range will insert set of rows to represent the table.
As you can see in the image above, the coloured area next to dyna-range is wasted real estate on the UI as we are unable to put any functionlaity as button or report
2. Advanced features such as paged report, which I have posted in my last articles is hard to get in practice as so many aspects of paging has to be taken care of when designing it manually, some thing off the self is more ease and robust to put in working.
3. Rich UI, Jedox in itself is a well designed product but at some places you need search functionality, richer UI and more features as business gets demanding.
And the list continues as you browse through the new flashy grid controls offered by the JavaScript technology.
Solution
So in order to over come the above limitations, I have built a sample report showcasing the usage of popular JavaScript Grids as follows:
1. Data Table
2. Handson JS Grid
3. ExtJS Grid
http://dev.sencha.com/extjs/5.0.0/examples/index.html
In all the above tables the data is sourced from Macro (except ExtJS, in which its local but can be easily amended to any source).
In the above file the widgets are driven by custom HTML code files to which the widget refers to and sends the data array to be displayed on the grid. Thus now you can more effectively use the UI area for user functionality and build comprehensive applications with good means of reporting as well.
This above method can greatly help you to develop richer UI’s and leverage more power of Jedox as BI portal.
Hope this trick helps !!!
Downloads:
http://amolpandey.com/home/downloads/blog24_download.zip
Refrence: http://www.amolpandey.com/2014/10/20/grid-is-not-enough-javascript-grids-for-your-reports/
The post Grid is not enough !!! Javascript Grids for your reports … appeared first on BInsights.
SAP-Systeme mit enormen Mengen an darin gespeicherten Geschäftsdaten sind die Arbeitsgrundlage vieler Unternehmen. Die Übertragung dieser wertvollen SAP-Daten in Jedox ermöglicht es, einfach und flexibel Planungs-, Analyse- und Reporting-Anwendungen aufzubauen.
Der Jedox SAP Connector ist der schnellste Weg, um Daten aus SAP-Systemen in Jedox zu transportieren. Die Installation ist einfach und der gesamte Extraktionsprozess kann im grafischen Web-Frontend von Jedox Web modelliert werden – ABAP-Kenntnisse sind dafür nicht erforderlich. Das leistungsstarke Werkzeug Jedox ETL, das für das Laden von Massendaten zum Jedox OLAP Server optimiert wurde, verarbeitet den Ladevorgang, ohne dass Zwischen-Flat Files erzeugt werden. Die Laufzeit der Extraktion ist daher besonders kurz.
Wo auch immer Ihre SAP-Daten liegen: Alle auf SAP-Netweaver basierten SAP-Systeme werden unterstützt und deren Sicherheitsanforderungen und Autorisierungsbedingungen beachtet. Für SAP ERP und SAP Business Warehouse (BW) gibt es einen speziellen Business Content für benutzerfreundliche Datenextraktionen.
Anbindung an SAP ERP
Mit Jedox SAP Connector können Sie sämtliche Daten aus allen SAP Modulen (z. B. FI, CO, MM, etc.) extrahieren. Technisch greift Jedox dabei auf RFC Funktionsbausteine (BAPI’s) und SAP Tabellen zurück und ergänzt diese mit eigens definierten Extraktionstypen, um Strukturen z. B. Kostenstellen, Kostenarten, Innenaufträge oder PSP Elemente, einfach auslesen zu können. Auf diese Weise konfigurieren Sie die Extraktion unkompliziert und ohne Kenntnisse der zugrunde liegenden SAP-Tabellen zu benötigen.
Anbindung an SAP BW
Mit SAP Standard-Tools kann das Erstellen flexibler Planungsanwendungen, auf Basis von SAP Business Warehouse, mühsam und zeitaufwendig sein. Jedox SAP Connector beinhaltet einen BW Business Content und ermöglicht so eine unkomplizierte und schnelle Extraktion von SAP BW Daten zu Jedox. Ob Sie BW InfoObjects, einschließlich Attributen und Texten, oder mehrere zeit- und versionsabhängige Hierarchien extrahieren und sie in eine Jedox OLAP Dimension laden: Mit dem Jedox BW Business Content arbeiten Sie schnell und zielorientiert. Dabei können die Massendaten sowohl aus dem Data Warehouse Layer durch Anschluss an SAP Data Store Objects (DSO) als auch aus SAP Infocubes extrahiert werden. Somit können Anwender des Jedox SAP Connectors ihre SAP BW Landschaft durch flexible Planungsprozesse selbstständig verbessern („Self-Service BI“).
Einfacher Aufbau von Hierarchien
Der komplizierteste Teil eines ETL-Prozesses für OLAP-Modelle besteht meist im richtigen Umgang mit den Stammdaten – komplexe Hierarchien mit mehreren Ebenen, Konsolidierungen und Attributen. Jedox ETL und auch Jedox SAP Connector haben diesen Vorgang optimiert und sind in der Lage, Hierarchien analyseorientiert aufzubauen. Der Business Content für SAP macht es darüber hinaus möglich, z. B. Profit-Center-Hierarchien aus SAP ERP oder InfoObject-Hierarchien aus SAP BW ohne Transformationen direkt in Jedox zu laden. Individuelle Konfigurationen, etwa das Beschreiben mehrerer Hierarchien oder eine Datenbereinigung, sind dennoch möglich.
The post JEDOX SAP CONNECTOR – EINFACHE ÜBERTRAGUNG, SCHNELLE ERGEBNISSE appeared first on BInsights.
Hi,
With my another addition to the series of blog’s, this time I am trying to leverage the .NET potential with Jedox. In this post I will be writing a custom .NET dll, and utilizing it in the Jedox Macro.
Solution:
Step 1: Create a “Class Library” C# project in your Visual Studio, remember to switch to the .NET version to 3.5 as the PHP likes it more, than version 4 and beyond. (Also remember, when you fire up your Visual Studio, Run it as Administrator)
Step 2: For you project generate a signing key which is require for you dll to be put into GAC (Global Assembly Cache, a .NET store for global library referencing This is the place where PHP will be looking for your dll)
Step 3: Navigate to your “AssemblyInfo.cs” file in your project, and change the following line, making your assembly as “ComVisible”.
// Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(true)]
Step 4: Now you are ready to jot down your .NET functionality, in your class file.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DotNetToJedox { public class JedoxInDotNet { public string GetData(string message) { return "Message:" + message; } } }
Step 5: Fire your “Command Prompt” as an admin, and run the following command:
C:\>gacutil -i “<<Path to your dll>>\DotNetToJedox.dll”
Note: In case if you command prompt suggest that it cant find gacutil, just add the relevant refrence account to your OS, for the path:
C:\Program Files\Microsoft SDKs\Windows\v6.0A
The following post can help you further on that:
http://stackoverflow.com/questions/3397479/where-is-gacutil-exe
The above will add your dll in your machine GAC, which is now ready for your PHP/Jedox installation to utilize.
You can check the physical assembly being present in GAC by navigating to the following path and confirming:
C:\Windows\assembly
Step 6: Now its time to write some PHP Macro for Jedox to utilize our dll, So the code in one of the spreadsheets is as follows:
function test_dotnet(){ $sampleClass = new DOTNET("DotNetToJedox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9fd42dd22c7fef0d, processorArchitecture=MSIL", "DotNetToJedox.JedoxInDotNet"); return __msgbox($sampleClass->GetData('Get me the message !!') , 'Dot Net To Jedox'); }
And the result is :
Note: This mechanism will work on single machine as GAC is system wide only. So if you need a .NET library functionality for you application, it has to be GAC deployed on the server where Jedox is installed.
Hope it helps !!
Downloads:
http://amolpandey.com/home/downloads/blog25_download.zip
Refrence: http://www.amolpandey.com/2014/10/22/dot-net-functions-for-jedox/
The post Dot Net functions for Jedox appeared first on BInsights.
After being out in the wild for over 12 months, the Performance Dashboard has been one of the most popular posts on our blog. As it was originally written for in Jedox 5.0, we have updating it to reflect the latest functionality in 5.1 SR2. New Features
NOTE: If you truncate your logs, please ensure you truncate the olap server log and the core log at the same time. As the Dashboard uses data from both logs so if they are out of sync, the numbers displays might not be correct. Installing the new Dashboard Download the .pb file here This is basically the same steps as the last Dashboard (which you can find here), but I will repeat the process for anyone doing it for the first time:
1. Log in to Jedox Web, and go to File Manager. Import the .pb file
2. Once imported, you should see the following:
3. Download the Jedox-Stats.xml. This is a Jedox ETL Project. Open ETL Manager and import the project.
4. Download the Jedox-Stats.zip. Unzip this file. This is a Jedox database that you need to add to your Jedox data folder (stop the Jedox MOLAP Service first).
5. Start the MOLAP Service. Note, you can now change the ETL parameters on the dashboard itself:
6. Click the Run Stats button on the Dashboard. This will populate your cube with the settings from your system.
7. Once you have ran the ETL, refresh the Performance Dashboard. It should look something like this:
You’re done! The idea of this Dashboard is to make managing your Jedox web reporting portal easier. If you know what reports are being used and which ones are not, you can manage report development and prioritise the types of reports that users are using.
The post Managing Web Reporting – Part 2 appeared first on BInsights.
Hi,
In one of the another exciting tweaks about Jedox for better scheduling of our resources, I like to present an outlook style calender format from our time management system.
Simple Calender View:
Calender with Dialog Box:
Coloured highlights of the scheduled resources:
The benefits of this UI layed out are as follows:
1. Easy and clean view of scheduled resources
2. Similarity with outlook style calender, and with custom Javascript the outlook format schedules can be exported out as *.vcf file
3. Great for planning resources ahead, as with the features of drag and drop the data can be pushed in the cube via custom php file called upon by the js widget
4.The calender can be driven via database/cube data via custom PHP JSON files, thus rendering an insight into the existing data.
The UI in another version is mixed with additional information presented in an overlay dialog box, driven by another javascript framework.
The screen presented in this blog are for demonstration purposes only, where the complete functionality discussed is not exhibited in the attached code as its needs customization according to the business specifics desired.
Hope it helps, enjoy !!!
Note: For demonstration purposes, I have created the hyper links to the widgets in the above case, as the contents were relatively big to fit in a report and clarity.
Frameworks:
http://leanmodal.finelysliced.com.au/
Downloads:
http://amolpandey.com/home/downloads/blog27_download.zip
Refrence: http://www.amolpandey.com/2014/10/28/schedule-up-calender-in-jedox/
The post Schedule Up !!! Calender in Jedox !!! appeared first on BInsights.
Hi,
In the consultancy business, an aching pain for the consultants is to fill out the time sheets. What was I doing 2 hours before ??, and a a day before ??, what was my task I was assigned ??, did I completed it ??, and the list goes on !!!
And to add to problems, there are no jazzy UI’s around to fill up the same and keep the motivation levels high enough (same old jQuery validated text boxes), so I though it would be a good addition to the system and keep our team happy (inc myself) to keep fiddling with our time sheet management system and keeping my time sheets in good shape.
So cutting out all the talk, here I present to you with another widget which would make your time entry more fun, quicker and smarter way of doing things.
In the above widget I have leveraged the following JavaScript framework to achieve the same:
http://haineault.com/media/jquery/ui-timepickr/page/
Hope it helps, Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog26_download.zip
Refrence: http://www.amolpandey.com/2014/10/28/time-sheets-its-fun-to-fill-them-up-now/
The post Time Sheets !!! its fun to fill them up now… appeared first on BInsights.
Hi,
In this post, I would like to highlight one of the most favoured feature of the BI universe is click filtering of dashboards, most commonly popularized by Qlikview systems which allow users to play with dashboards interactively by the user selections impacting the global dashboard filters.
I was wondering if it was achievable to some extent by Jedox as well, and here’s one of my attempts to bring out the same from Jedox. In Qlikview the filter process is two ways that selection of filters can affect the dashboard contents like graphs and tables, and vice versa as well in which the selection made on graphs and tables re-selects the filters affecting the selection. Its a very intuitive way of exploring the data and sampling the impacting drivers for the selections.
So I though if I could leverage some part of the Qlikview goodness to the Jedox reporting system and here I am proud to present the interactive dashboard for point and click filtration:
The core feature of the above dashboard are the filter for the list box selections and the interactive nature of selection changing the dashboard content.
The dashboard leverage’s the list box provided by
Hope you like it !!!
Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog29_download.zip
The post Dynamic Reporting, List Box Filtration for Dashboard – Point and Click appeared first on BInsights.
Hi
In another addition to my series of blog’s, here I would like to present you the real-time dashboard in which the interval frequency can be decided by you and obtain the following output.
Here I am using a custom widget to set a JavaScript poll to my custom defined macro to re-fresh the work book. Though I myself has created this up, I would not recommend it using it too much as a very similar functionality is also provided by Jedox natively but they restrict it to 10 seconds interval for a good reason.
As too much usage my methodology will get your infrastructure guys roasting food on the Jedox server (if you maintain the physical one !!) but jokes apart it would overload the server (Jedox core service) and thus reducing the optimal experience for all the other users.
But this widget I created for the users who love to visualize the real time data and its possibility with Jedox, These user base can mainly be targeted in the areas of finance (any thing that moves in finance impresses them) or any other domain as per the applicability.
Hope it helps.
Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog30_download.zip
Refrence: http://www.amolpandey.com/2014/11/02/real-time-dashboards/
The post Real Time Dashboards appeared first on BInsights.
Hi,
In this article I would like to draw your attention towards the back burner feature of Jedox called as “Analyzer Report”, Its one of the interesting and powerful features of Jedox which seems to me under utilized.
Reason’s being users are more fixated towards the standard/fixed reports which resolves their work issues and move on, or there’s no interest in the data discovery, or may be its developer centric feature to investigate the cube status, or putting it simple some say “its too complex“… Who knows !!!
But its been a great feature which provides a flexibility for one self to really slice and dice (core essence of BI) the segment’s across the cube and bring data discovery concept to the users, and leverage the potential of Jedox to the fullest.
http://knowledgebase.jedox.com/knowledgebase/example-jedox-analyzer-report/
But !!!
Until I stumble bled upon some thing like this,
I thought it would be really great to incorporate it on the Jedox portal to add more fun to the analyzer report. So far I have realized visualizations really excite people more than numbers. (seems there’s a kid within all of us)
And indeed its been a great add-on to the Jedox because it features all the functionalities in similar to the Excel based pivot table the summation/count/average of the fields and simultaneous visualizations are some of the benefits of the above add-on.
Experience it yourself and make the most of it !!!
Enjoy !!!
Note: In the above report, I have created a hyper link object to the webpage for the Pivot Report as
http://localhost:85/pr/custom/WebPivotTable-2.4.2-free/public/index.html
Downloads:
http://amolpandey.com/home/downloads/blog28_download.zip
The post Jedox Analyzer Report Or Pivot Table … Jazz it up !!! appeared first on BInsights.
Hi,
Today in this post, I would like to share an simulation strategy using Jedox spreadsheets, where business users can design models via formulas and upon which simulations can run, building upon the case list for statistical insight.
Background:
Many times in real-world scenario, the clients of any business have a profile (meaning they have their choices, preferences, and a business can have multiple types of different profiled client), on which the business has to price products for optimal profit.
Now some times in retailing the bundling of products is also required to attract more customers. So for further taking this post, I have build a case study for an Indian takeaway business where the owner can profile his diners and design bundled menus for optimal profit.
Model Question:
With my existing Indian take away menu, and the following customer profile :
Couple
Type: Vegetarian
Categories Opted: Entrée (Any), Two different main course dish, rice, bread and dessert
With all the possible combinations of my menu has to offer, to the above diner experience.
Which combination of items on the menu will give me the Maximum, Minimum and Average diner spending.
Model Answer:
The model in the post runs a 1000 combinations of all the random items with the relevant filter to generate the diner spending and archives the information. Upon which the statistics on the generated list is searched for the required insights.
Notes: In the workbook, there is a simulation worksheet, which is actually not necessary as for larger list of combination generation it would dramatically slow down the system and its not actually required by the user, so in the long term for such simulated models I would stored the data in an array itself only and dump the evaluated statics on that array, thus saving the workbook size and opening the doors for larger iteration simulations.
Also higher the count of simulations, more accurate your model results.
In this post I have used a very simple simulation model to exhibit the basics for the simulation strategy, but this can open doors to more complex evaluations of Monte Carlo Simulations and similar for option pricing and more, which I will plan to come up soon as well.
http://en.wikipedia.org/wiki/Monte_Carlo_method
http://en.wikipedia.org/wiki/Monte_Carlo_methods_for_option_pricing
Hope it helps !!!
Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog31_download.zip
Refrence: http://www.amolpandey.com/2014/11/09/simulation-strategy-jedox/
The post Simulation Strategy : Jedox appeared first on BInsights.
Hi,
In another series of my post, today, I would like to introduce you to the power of document management system and how it can greatly simplify the office workflow processes and document management in any enterprise.
And to add, how it can be easily integrated in your Jedox portal to add-on the power to your Jedox usage experience.
Q- So what is Document Management System, what are its features and benefits ?
A- One of the big questions revolve around any system (IT) to be incorporated in the main stream business, is it really worth investing the money, time, labour to achieve the benefits. And what are the benefits ?
Well in this case of incorporating any document management system, the benefits are enormous: To name few document version, security, template generation, preview (if your system offers), collaboration, auditing and more.
So being a developer, I like to follow a principle famous in the community DRY (Don’t repeat yourself). So in order to be efficient in this post for answering the above question, I providing some useful hyper links for viewers to gain the good insight into the feature’s of the product/system has to offer !!!
Links:
http://en.wikipedia.org/wiki/Document_management_system
Q- How would the Document Management System, integrate and add value with my existing Jedox installation ?
A- Now on this question I would like to elaborate in detail in this post and give more insight as the added value and benefits realized when document management system is incorporated along with your organisation BI platform.
Every Project/Task has a Paper Work: In any organisation, when dealt with any Projects which can include financial planning, invoicing, reports, approvals and much more.
Some things can be a system in itself, like approvals (or similar) can be built in another system like SharePoint forms, or custom HTML forms to eliminate the custom document/emails and stream line the process for more clarity.
But not every thing can be built out, no matter how simplified the form creation is, the office documents (in the form of Word, Excel, Outlook emails) makes their way in to fully efficient business system.
Some of the examples, are like organisations using email for approvals, reports stored on shared drives, custom word document with the first page dedicated to the a massive table listing the authors, and anonymous excel file all over the place…
Jedox Dimensions Drive Document Space: In many Jedox implementations, I have realised the of document generated by the business in the regular operation are usually categorised by the combination of Jedox dimension values
Example: For “Scenario” (Forecast_01 , Dimension) the “Department” (Sales , Dimension) for the “Year” (2012 , Dimension) the “Sales Report” (this is the document)
In the above conversation statement, the user has pronounced the double quoted dimension values identifying the document.
Security: In many organisations, still people use the shared folders to achieve the collaboration of documents across teams and individuals, via the file/folder permissions. Its good while it last unless things get little out of hand and disaster strikes. File is readable by all users of the organisation, because IT revised permissions of all folders, or hierarchy update of permissions are few to blame.
Standardization: I am the approval manager, and users send me documents of whole wide variety of colours, fonts, shapes…, driving me mad to the find the relevant information I am looking for approval and permission.
For the above background, I have evaluated multiple systems, with one to name in this post attracting my attention with its great features is “OpenKM”. I found this document management system, very good and I was very impressed by its features provided, much added benefits even with its paid competitors and clarity of usage and clean interface.
http://wiki.openkm.com/index.php/Main_Page
Picture speaks a thousand word !!!
There are a great set of API with OpenKM web service calls whose structure is in-line with Jedox, to integrate well with custom PHP scripts based on the needs.
Integration scenario: The OpenKM roles/groups can be matched with the Jedox and security protected directory structure can be generated based on dimensional elements via scripts where the the permissions are driven by Jedox (regular script sync) for providing the user their space for their document storage pertaining to their dimensional area (like forecasting, based on project name) operations, and can be shared on demand across users for efficient collaboration and notifications.
The integration between a Jedox model and OpenKM is purely business specific requirements based hence generic tool or utility wouldn’t be of much use, but in this post I am trying to highlight the added benefits of a document management system in relation to Jedox for bringing more organisation and features to the business process leveraged by Jedox.
Hope it helps !!!
Refrence: http://www.amolpandey.com/2014/11/09/document-management-system-bring-it-along-jedox/
The post Document Management System, bring it along Jedox !!! appeared first on BInsights.
Hi,
This post is especially geared for the investment banking domain, but all are welcome on-board always :).
Embarking on this topic is more mathematically challenging as the crux of this topic is more geared to wards advance maths. But putting that aside for a while in this post I am trying to achieve which is an eye candy for any investment banker/trader requirement for any system they adopt.
In order to simulate the stock prices close to reality on any system (or lets say excel only) a normal random function can not achieve the same.
Why, just plot the “RAND” function for 50~100 points on any chart and see if it by any means represent’s any stock price movement over the past few years.
The thing above lacks the “Drift” portion in the randomness, any stock price over the history is surly chaotic, but it has got some directional movement over the time, which the above chart lacks.
Thus to effectively simulate any stock price the mathematical model has to have a random/distortion and drift component to it. And this is where the complex mathematics start which I don’t want to delve in this post. But here are the links for the interested readers to dig in more.
http://en.wikipedia.org/wiki/Brownian_motion
http://en.wikipedia.org/wiki/Wiener_process
http://en.wikipedia.org/wiki/It%C5%8D’s_lemma
(Ito’s Lemma has got some thing to with rocket science, enough to get you excited until to land up to its wiki page)
So in order to achieve a nice simulated stock price for our future financial models, just by using the native formulas, below is the spreadsheet to achieve the same.
The above looks more like a stock price movement (see the directional movement, in addition to the randomness), so go ahead and change some parameters and run your own stock simulation models.
So the big question ???
Why, do we need to simulate the stock prices ?? Ain’t the real data of the world is worth enough to run off our models…
Answer is NO, because this stock price generation system will lay the foundation of the future financial models I will introduce, to price complex derivatives like options, futures and its variant’s. To give you an insight using the above model foundation we will run internally thousands and millions of simulations of stocks prices to price the optimal price of the derivative. Remember my simulation strategy post (link). The concept is similar.
Hope it helps !!!
Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog33_download.zip
Refrence: http://www.amolpandey.com/2014/11/11/brownianweiner-process-simulated-stock-prices/
The post Brownian/Weiner Process – Simulated Stock Prices appeared first on BInsights.
Hi,
In this post I would like to share, a technique which has been well rewarded to me in the past, is the extraction of foreign exchange rates from web into my financial models on demand.
Now some information in the world is never static (FX being one of them and the fastest moving information), and some times its not very fruitful to store the entire world data in your models/databases when you can get it on demand any time you need. (Let experts of their field manage their data, remember my DRY “Dont Repeat Yourself” principle)
This technique has been critical in some of my past projects for the reason of multi currency/country financial reporting. Many businesses now a days are not limited to their continent, they are spread across the world earning’s in multiple currencies thus bring a different set of challenges with itself for conversion complexities and reporting.
Thus to address all the above problems, here you go with the solution:
The above Jedox spreadsheet downloads the data for the selected currency against USD for the user selected time frames and renders a chart out of it. The above spreadsheet can be amended to download the latest data itself only, for accounting representation of into multiple currencies.
(Note: The data downloaded in the above spreadsheet, is dumped on the “data” sheet)
This is a reference technique only for illustration purposes, which can be amened to incorporate multiple data sources providing data sets like historical stock prices, macro economic data, custom web extractions, and similar. But ensure that the source is reliable and established in terms of their reporting format so that your model/extraction code continues to work depending upon the source.
Hope it helps !!!
Enjoy !!!
Downloads
http://amolpandey.com/home/downloads/blog32_download.zip
Refrence: http://www.amolpandey.com/2014/11/11/foreign-exchange-data-download-into-your-jedox-model/
The post Foreign exchange data, Download into your Jedox Model appeared first on BInsights.
Hi,
In this post, I would like to present you the “Option Pricing n Greeks” in Jedox.
Well continuing on my previous post, I would like to highlight the potential of Jedox in terms of number crunching capacity, where I have designed the macro for option pricing most commonly used in any front desk team of an investment bank.
For all the background about options derivatives used in the financial industry and the measures (the Greeks) incorporated in this model references are as below:
http://www.investopedia.com/university/options/
http://www.investopedia.com/university/option-greeks/
http://en.wikipedia.org/wiki/Option_(finance)
http://en.wikipedia.org/wiki/Greeks_(finance)
This model in Jedox computes the option prices and its greeks based on the user inputs and as the benefits of Jedox come along together the possibilities are enormous.
Code:
function dOne($S, $X, $T, $r, $v, $d){ $n1 = application()->Log($S / $X); $n2 = ($r - $d + 0.5 * pow($v , 2)) * $T; $d1 = $v * pow($T,2); $value = ($n1 + $n2) / $d1; return $value; } function NdOne($S, $X, $T, $r, $v, $d){ $nd = dOne($S, $X, $T, $r, $v, $d); $n1 = -1* (pow($nd , 2) / 2); $d1 = application()->sqrt(2 * application()->Pi()); $value = application()->Exp($n1) / $d1 ; return $value; } function dTwo($S, $X, $T, $r, $v, $d){ $value = dOne($S, $X, $T, $r, $v, $d) - $v * application()->sqrt($T); return $value; } function NdTwo($S, $X, $T, $r, $v, $d){ $value = application()->NormSDist(dTwo($S, $X, $T, $r, $v, $d)); return $value; } function OptionPrice($OptionType, $S, $X, $T, $r, $v, $d) { if($OptionType == 'C'){ $value = application()->Exp(-$d * $T) * $S * application()->NormSDist(dOne($S, $X, $T, $r, $v, $d)) - $X * application()->Exp(-$r * $T) * application()->NormSDist(dOne($S, $X, $T, $r, $v, $d) - $v * applica tion()->sqrt($T)); } elseif ($OptionType == 'P'){ $m1 = application()->Exp(-1*$r * $T); $m2 = application()->NormSDist(-1 * dTwo($S, $X, $T, $r, $v, $d)); $m3 = application()->Exp(-1 * $d * $T); $m4 = application()->NormSDist(-1 * dOne($S, $X, $T, $r, $v, $d)); $s1 = $X * $m1 * $m2; $s2 = $S * $m3 * $m4; $value = $s1-$s2; } return $value; } function OptionDelta($OptionType, $S, $X, $T, $r, $v, $d){ if($OptionType == 'C') { $value = application()->NormSDist(dOne($S, $X, $T, $r, $v, $d)); }elseif ($OptionType == 'P'){ $value = application()->NormSDist(dOne($S, $X, $T, $r, $v, $d)) - 1; } return $value; } function Gamma($S, $X, $T, $r, $v, $d){ $value = NdOne($S, $X, $T, $r, $v, $d) / ($S * ($v * application()->sqrt($T))); return $value; } function Vega($S, $X, $T, $r, $v, $d){ $value = 0.01 * $S * application()->sqrt($T) * NdOne($S, $X, $T, $r, $v, $d); return $value; } function OptionRho($OptionType, $S, $X, $T, $r, $v, $d){ if($OptionType == 'C'){ $value = 0.01 * $X * $T * Exp(-1 * $r * $T) * application()->NormSDist(dTwo($S, $X, $T, $r, $v, $d)); }elseif ($OptionType == 'P'){ $value = -0.01 * $X * $T * Exp(-1*$r * $T) * (1 - application()->NormSDist(dTwo($S, $X, $T, $r, $v, $d))); } return $value; } function OptionTheta($OptionType, $S, $X, $T, $r, $v, $d){ if($OptionType == 'C'){ $value = -(($S * $v * NdOne($S, $X, $T, $r, $v, $d)) / (2 * application()->sqrt($T)) - $r * $X * Exp(-1 * $r * ($T)) * NdTwo($S, $X, $T, $r, $v, $d)) / 365; }elseif ($OptionType == 'P'){ $value = -(($S * $v * NdOne($S, $X, $T, $r, $v, $d)) / (2 * application()->sqrt($T)) + $r * $X * Exp(-1 * $r * ($T)) * (1 - NdTwo($S, $X, $T, $r, $v, $d))) / 365; } return $value; }
Hope you like it.
Enjoy !!!
Downloads:
http://amolpandey.com/home/downloads/blog34_download.zip
Refrence: http://www.amolpandey.com/2014/11/11/option-pricing-and-greeks-jedox/
The post Option Pricing and Greeks – Jedox appeared first on BInsights.