{"id":1949,"date":"2021-06-28T16:44:29","date_gmt":"2021-06-29T00:44:29","guid":{"rendered":"https:\/\/younite.us\/?page_id=1949"},"modified":"2021-09-22T15:27:54","modified_gmt":"2021-09-22T23:27:54","slug":"quick-cost-benefit-analysis","status":"publish","type":"page","link":"https:\/\/younite.us\/ja\/quick-cost-benefit-analysis\/","title":{"rendered":"Quick Cost Benefit Analysis"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1949\" class=\"elementor elementor-1949\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3393b53 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3393b53\" data-element_type=\"section\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b6468ff\" data-id=\"b6468ff\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b65bd66 elementor-widget elementor-widget-html\" data-id=\"b65bd66\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- \nYOUnite Simple Cost Benefit Analysis TOol\n-->\n\n<!-- Start CSS -->\n<style>\n    * {\n      box-sizing: border-box;\n    }\n    .column {\n      float: left;\n    }\n    .row {\n      display: flex;\n    }\n    .left {\n      position: relative;\n      padding-right: 10px;\n    }\n    .right {\n      float: left;\n      width: 75%;\n      text-align: left;\n      padding-left: 10px;\n    }\n    \/* Clear floats after the columns *\/\n    .row:after {\n      content: \"\";\n      display: table;\n      clear: both;\n    }\n    .cost-input {\n        width: 7em;\n    }\n    table {\n        border-collapse: collapse;\n        border-width: 0px;\n    }\n    td {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: rgb(77,131,195);\n        border-width: 0px;\n    }\n    td:nth-child(1) {  \n        background-color: #ffffff;\n        width: 2em;\n    }\n\n    td:nth-child(2) {  \n        background-color: rgb(77, 131, 195);\n        color: #ffffff;\n    }\n    tr:nth-child(2) {  \n        background-color: rgb(77, 131, 195);\n        color: #ffffff;\n    } \n    tr:nth-child(1) {  \n        background-color: #ffffff;\n    }\n    .notint {\n        background-image: url('\/images\/noIntegration.png');\n        background-repeat: no-repeat;\n        background-position: center;\n    }\n    .check {\n        background-image: url('\/images\/integration.png');\n        background-repeat: no-repeat;\n        background-position: center;\n    }\n    .svgContainer {\n        display: block;\n        position: relative;\n        width: 100%;\n        padding-bottom: 100%;\n        vertical-align: top;\n        overflow: visible;\n    }\n    .svg-content {\n        display: inline-block;\n        position: absolute;\n        top: 0;\n        left: 0;\n    }\n    #cost-table {\n        border-collapse: collapse;\n        border-width: 0px;\n    }\n    #cost-table-td-upper-left {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: #ffffff;\n        font-weight: bolder;\n        background-color: rgb(77,131,195);\n        border-width: 0px;\n        border-top-width: 1px;\n        border-top-color: rgb(77,131,195);\n        border-bottom-width: 1px;\n        border-bottom-color: rgb(200,200,200);\n    }\n    #cost-table-td-col {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: #ffffff;\n        font-weight: bolder;\n        background-color: rgb(77,131,195);\n        border-width: 0px;\n        border-top-width: 1px;\n        border-top-color: rgb(77,131,195);\n        border-bottom-width: 1px;\n        border-bottom-color: #ffffff;\n    }\n    #cost-table-td-row {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: #ffffff;\n        font-weight: bolder;\n        background-color: rgb(77,131,195);\n        border-width: 0px;\n        border-bottom-width: 1px;\n        border-bottom-color: rgb(200,200,200);\n    }\n\n    #cost-table-td {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: rgb(30,30,30);\n        background-color: #ffffff;\n        border-top-width: 0px;\n        border-bottom-width: 1px;\n        border-bottom-color: rgb(240,240,240);\n        border-left-width: 0px;\n        border-right-width: 1px;\n        border-right-color: rgb(240,240,240);\n    }\n    \n    #cost-table-td-bold {\n        width: 145px;\n        height: 42px;\n        padding: 1px;\n        text-align: center;\n        color: #04AA6D;\n        background-color: #ffffff;\n        border-top-width: 0px;\n        border-bottom-width: 1px;\n        border-bottom-color: rgb(240,240,240);\n        border-left-width: 0px;\n        border-right-width: 1px;\n        border-right-color: rgb(240,240,240);\n        font-weight: bolder;\n    }\n     \n<\/style>\n<!-- End CSS -->\n\n<!-- Start HTML -->\n\n<!-- Page: Opening & Get Number of Servers -->\n<br><br><br>\n<h3 style=\"text-align:center;color:rgb(77,131,195);font-size:2.5em; font-style:normal; font-weight:700;font-family: Montserrat,san-serif\">Cost Benefit Analysis<\/h3>\n\n<div id=\"topText\"  style=\"text-align:left; padding:0px 20% 0px 20%\">\n\n <p style=\"text-align:left;\">Since most data integration efforts happen organically, the true costs and lack of integration features are often not considered.<\/p>\n\n <p style=\"text-align:left;\">This simple comparison exercise will give you an idea of how federated data unification can not only save money but provide data tier unification features that ad-hoc and older technologies cannot provide.<\/p>\n\n How many servers in your enterprise will need to be integrated over the next five years?<br><br>\n\n <div style=\"text-align:center\">\n  <input id=\"numServers\" type=\"text\" name=\"rows\" value=\"8\" autofocus\/><br \/>\n  <p><\/p>\n  <input name=\"generate\" style=\"text-align: center\" type=\"button\" value=\"NEXT >\" onclick=\"getServers()\" \/>\n <\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<!-- End HTML -->\n\n<!-- Start Javascript -->\n<script src = \"https:\/\/d3js.org\/d3.v7.min.js\"><\/script>\n<script>\n\n  function numberWithCommas(x) {\n     return x.toString().replace(\/\\B(?<!\\.\\d*)(?=(\\d{3})+(?!\\d))\/g, \",\");\n  }\n   \n  \/\/ Page: Get Server Names\n  function getServers() {\n    var n = 20;\n    var numServers = document.getElementById(\"numServers\").value;\n    var par = parseInt(numServers);\n    \/\/ par !== par is a test for NaN\n    if (par !== par ||  par < 2 || par > n) {\n        alert(\"Enter a number between 2 and \" + n);\n    }\n    else {\n        var content = \"<b>Number of servers: <\/b>\" + numServers + \"<br><br><b>Enter the names of the servers to be integrated:<\/b><br>(default names will be used if none are entered)<br><br>\";\n\n        var inputContent = \"\";\n        for (var i=0; i< numServers; i++ ) {\n            inputContent = inputContent + \"<input type=\\\"text\\\" size=32 maxlength=32 id=\\\"server_\" + i + \"\\\" placeholder=\\\"Enter Server Name\\\" value=\\\"\\\" \/><br>\"\n        }\n        var button = \" <p><\/p><input name=\\\"generate\\\" style=\\\"text-align: center\\\" type=\\\"button\\\" value=\\\"NEXT >\\\" onclick=\\\"createServerMatrix(\"+par+\")\\\" \/>\";\n\n        var container = document.getElementById(\"topText\");\n        container.innerHTML = content + inputContent + button;\n    }\n  }\n\n  var names = [];\n\n  \/\/ Page: Render Server Matrix\n  function createServerMatrix(par) {\n\n    for (var i = 0; i < par; i++) {\n        var str = \"server_\" + i;\n        if (document.getElementById(str).value == \"\") {\n            names[i] = str;\n        }\n        else {\n            names[i] = document.getElementById(str).value;\n        }\n    } \n\n    var table = \"<table class=table>\";\n    for (var i = 0; i <= names.length + 1; i++) {\n      table += \"<tr>\";\n      for (var j = 0; j <= names.length + 1; j++) {\n        \/\/ Handle the first row\n        \/\/ -- blank first cells\n        if (i == 0 && j <= 1) {\n            table += \"<td style=\\\"background-color:rgb(243,244,245);\\\"><\/td>\"; \n            continue;\n        }\n        \/\/ -- checkboxes\n        if (i == 0) {\n            table += \"<td style=\\\"background-color:rgb(243,244,245);\\\"><input type=\\\"checkbox\\\" checked onclick=\\\"togcol(this.parentElement)\\\"><\/td>\";\n            continue;\n        }\n        \/\/ handle the second row\n        \/\/ -- blank first cell\n        if (i == 1 && j == 0) {\n            table += \"<td style=\\\"background-color:rgb(243,244,245)\\\"><\/td>\"; \n            continue;\n        }\n        \/\/ -- source\/destination\n        if (i == 1 && j == 1) {\n            table += \"<td style=\\\"background-color: white;border: 1px solid rgb(77, 131, 195);\\\"> <img  src=\\\"\/images\/sourceDestination.png\\\" alt=\\\"source\/destination\\\"> <\/td>\";\n            continue;\n        }\n        \/\/ -- server names\n        if (i == 1) {\n            table += \"<td style=\\\"color:#ffffff\\\"> \"+ names[j-2] +\"<\/td>\";\n            continue;\n        }\n        \/\/ handle all remaining rows\n        \/\/ -- checkbox\n        if (j == 0) {\n            table += \"<td style=\\\" text-align:right; padding-right: 1em; background-color:rgb(243,244,245);\\\"><input type=\\\"checkbox\\\" checked onclick=\\\"togrow(this.parentElement)\\\"><\/td>\";\n            continue;\n        }\n        \/\/ -- graybox\n        else if (j == 1) {\n             table += \"<td style=\\\"border: 1px solid rgb(77,131,195);\\\"> \"+ names[i-2] +\"<\/td>\";\n             continue;\n        }\n        \/\/ -- clickables\n        else if (i == j) {\n          table += \"<td style = \\\"background-color: lightgray\\\"> <\/td>\";\n        }\n        else {\n          table += \"<td class = \\\"check\\\" onclick=\\\"tog(this)\\\">  <\/td>\";\n        }\n      }\n      table += \"<\/tr>\";\n    }\n    table += \"<\/table>\";\n    \n    var inputs = \"<br><p><b>Factoring the types of data (e.g. customers, parts, employees, etc) and quantity....<\/b><\/p>\";\n    \n    inputs+=\"<div class=row> <div class=\\\"column left\\\"> <input class=cost-input type=number size=8 maxlength=9 min=0 id=implementationcosts value=25000 \/> <\/div> <div class=\\\"column right\\\">Typical cost to implement and deploy each integration<\/div> <\/div><br>\";\n\n    inputs+=\"<div class=row> <div class=\\\"column left\\\"> <input class=cost-input type=number size=8 maxlength=9 min=0 id =annualcosts value=25000 \/> <\/div> <div class=\\\"column right\\\">Typical annual costs for each integration (software, hardware, subscription, cloud, etc)<\/div> <\/div>\";\n\n    var button = \" <p><\/p><input name=\\\"generate\\\" style=\\\"text-align: center\\\" type=\\\"button\\\" value=\\\"NEXT >\\\" onclick=\\\"createGraphics()\\\" \/>\";\n\n  \n    document.getElementById(\"topText\").innerHTML = table + inputs+ button;\n  }\n\n  function tog(a) {\n    a.classList.toggle('notint');\n    a.classList.toggle('check');\n  }\n  \n  function togrow(a) {\n      var x = FindRowPos(a);\n      var tab = document.getElementsByClassName(\"table\");\n      var table = tab[0];\n      if (a.children[0].checked) {\n        for (var i = 2; i < (names.length)+2; i++) {\n            if (i != x) {\n              table.rows[x].cells[i].classList.remove(\"notint\");\n              table.rows[x].cells[i].classList.add(\"check\");\n            }\n        }\n      }\n      else {\n        for (var i = 2; i < (names.length)+2; i++) {\n            if (i != x) {\n              table.rows[x].cells[i].classList.remove(\"check\");\n              table.rows[x].cells[i].classList.add(\"notint\");\n            }\n        }\n      }\n  }\n  \n  function togcol(a) {\n      var x = FindColPos(a);\n      var tab = document.getElementsByClassName(\"table\");\n      var table = tab[0];\n      if (a.children[0].checked) {\n        for (var i = 2; i < (names.length)+2; i++) {\n            if (i != x) {\n              table.rows[i].cells[x].classList.remove(\"notint\");\n              table.rows[i].cells[x].classList.add(\"check\");\n            }\n        }\n      }\n      else {\n        for (var i = 2; i < (names.length)+2; i++) {\n            if (i != x) {\n              table.rows[i].cells[x].classList.remove(\"check\");\n              table.rows[i].cells[x].classList.add(\"notint\");\n            }\n        }\n      }\n      \n  }\n\n  \/\/ Page: Render YOUnite\/Ad-hoc Graphs\n  function createGraphics() {\n\n    var younitematrix = [];\n\n    for (var i = 0; i < names.length; i++) {\n      younitematrix[i] = [];\n      for (var j = 0; j < names.length; j++) {\n\n        younitematrix[i][j] = 0;\n      }\n    }\n \n    var checks = document.getElementsByClassName(\"check\");\n\n    for (var i = 0; i < checks.length; i++) {\n      younitematrix[FindRowPos(checks[i])-2][FindColPos(checks[i])-2] = 1;\n    }\n\n    var younite = {};\n\n    for (var i = 0; i < names.length; i++) {\n      younite[names[i]] = 0;\n      for (var j = 0; j < names.length; j++) {\n        if (younitematrix[i][j] == 1) {\n          if (younite[names[i]] == 2) {\n            younite[names[i]] = 3;\n            break;\n          }\n          else {\n            younite[names[i]] = 1;\n          }\n        }\n        if (younitematrix[j][i] == 1) {\n          if (younite[names[i]] == 1) {\n            younite[names[i]] = 3;\n            break;\n          }\n          else {\n            younite[names[i]] = 2;\n          }\n        }\n      }\n    }\n    \n    var integrationcost = 10000;\n    var annualcost = 10000;\n    \n    if (document.getElementById(\"implementationcosts\").value != \"\") {\n        integrationcost = document.getElementById(\"implementationcosts\").value;\n    }\n    if (document.getElementById(\"annualcosts\").value != \"\") {\n        annualcost = document.getElementById(\"annualcosts\").value;\n    }\n    \n\n    \/\/clear topText inner html\n    var container = document.getElementById(\"topText\");\n    document.getElementById(\"topText\").innerHTML = \"\";\n    \/\/ calculate width and height for first svg, used in setting bottom-padding\n    var width = 100*names.length + 36;\n    var height = 300;\n    \/\/ add new div to contain svgs\n    var content = \"<br><h4>YOUnite Federated Data Unification Model<\/h4>\";\n    var paddingBottom = Math.round(100*height\/width);\n    var svgContainer = \"<div id=\\\"svgContainer1\\\" class=\\\"svgContainer\\\" style=\\\"padding-bottom:\" + paddingBottom + \"%\\\"><\/div>\";\n    container.innerHTML = content + svgContainer;\n\n      var viewbox = \"0 0 \" + width + \" \" + height;\n      \/\/Create YOUnite SVG\n      var yn_svg = d3.select(\"#svgContainer1\") \/\/ADDED\n              .append(\"svg\")\n              .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\n              .attr(\"viewBox\", viewbox)\n              .classed(\"svg-content\", true);\n\n      yn_svg.append(\"rect\")\n              .attr(\"x\", 2)\n              .attr(\"y\", 20)\n              .attr(\"rx\", 10)\n              .attr(\"ry\", 10)\n              .attr(\"width\", width-20)\n              .attr(\"height\", 100)\n              .attr(\"fill\", \"white\")\n              .attr(\"stroke-width\", 1)\n              .attr(\"stroke\", \"gray\");\n\n      yn_svg.append('image')\n        .attr('xlink:href', '\/resources\/images\/YOUnite.png')\n        .attr('width', 223)\n        .attr('height', 57)\n        .attr('x', 50*names.length - 100)\n        .attr('y', 45);\n\n      for(var i = 0; i < names.length; ++i) {\n          x = 60+i*100;\n          yn_svg.append(\"circle\")\n              .attr(\"cx\", x)\n              .attr(\"cy\", 221)\n              .attr(\"r\", 40)\n              .attr(\"fill\", \"rgb(77,131,195)\");\n\n          yn_svg.append(\"text\")\n              .attr(\"x\", x)\n              .attr(\"y\", 223)\n              .attr(\"stroke\", \"white\")\n              .attr(\"fill\", \"white\")\n              .style(\"font-size\", 13)\n              .style(\"text-anchor\", \"middle\")\n              .text(names[i]);\n\n          \/\/ add arrows between rect and circles\n          if (younite[names[i]] == 1) {\n              drawUpArrow(yn_svg, x);\n          } else if (younite[names[i]] == 2) {\n              drawDownArrow(yn_svg, x);\n          } else if (younite[names[i]] == 3) {\n              drawUpArrow(yn_svg, x);\n              drawDownArrow(yn_svg, x);\n          }\n      }\n\n      content = \"<br><br><h4>Ad-Hoc Connection Model<\/h4>\";\n      svgContainer = \"<div id=\\\"svgContainer2\\\" class=\\\"svgContainer\\\"><\/div>\";\n      container.innerHTML += content + svgContainer;\n\n      \/\/ Create P2P SVG\n      \/\/ equation to define the size based on amount of names\n      var size = 4*(names.length)*(names.length) + 240;\n      var offset = size \/ 2;\n      var radius = offset - 50;\n      viewbox = \"0 0 \" + size + \" \" + size;\n\n      var p2p_svg = d3.select(\"#svgContainer2\")\n              .append(\"svg\")\n              .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\n              .attr(\"viewBox\", viewbox)\n              .classed(\"svg-content\", true);\n      \/\/ Create outer circle\n    \/\/   p2p_svg.append(\"circle\")\n    \/\/           .attr(\"cx\", offset)\n    \/\/           .attr(\"cy\", offset)\n    \/\/           .attr(\"r\", radius)\n    \/\/           .attr(\"width\", size-20)\n    \/\/           .attr(\"height\", 100)\n    \/\/           .attr(\"fill\", \"white\")\n    \/\/           .attr(\"stroke-width\", 1)\n    \/\/           .attr(\"stroke\", \"gray\");\n\n      \/\/ Create inner circles\n      var arrowCoords = [];\n      for (var i = 0; i < names.length; i++) {\n        arrowCoords[i] = [0, 0];\n      }\n      var r = 40;\n      var angle = 0; \/\/ angle in radians\n      for (var i = 0; i < names.length; ++i) {\n          angle = 2*i*Math.PI \/ names.length; \/\/ calculates angle at which to draw the circle\n          var x = offset + radius * Math.sin(angle);\n          var y = offset - radius * Math.cos(angle);\n          arrowCoords[i] = [x, y];\n          \/\/ draw circle\n          p2p_svg.append(\"circle\")\n            .attr(\"cx\", x)\n            .attr(\"cy\", y)\n            .attr(\"r\", r)\n            .attr(\"fill\", \"rgb(77,131,195)\");\n\n          p2p_svg.append(\"text\")\n            .attr(\"x\", x)\n            .attr(\"y\", y+2)\n            .attr(\"stroke\", \"white\")\n            .attr(\"fill\", \"white\")\n            .style(\"font-size\", 13)\n            .style(\"text-anchor\", \"middle\")\n            .text(names[i]);\n      }\n      \/\/ draw arrows\n      for (var i = 0; i < names.length; ++i) {\n          for (var j = 0; j < names.length; ++j) {\n              if(i != j && younitematrix[i][j] == 1) {\n                  drawArrow(p2p_svg, arrowCoords[i], arrowCoords[j]);\n              }\n          }\n      }\n      \n      \/* AADI EDIT HERE *\/\n      \/\/ content = \"someHTMLcode\";\n      \/\/ container.innerHTML += content;\n      \n    var youniteconnections = 0;\n    var adhocconnections = 0;\n      \n    for (var i = 0; i < names.length; i++) {\n        if (younite[names[i]] == 1 || younite[names[i]] == 2) {\n            youniteconnections += 1;\n        }\n        else if (younite[names[i]] == 3) {\n            youniteconnections += 2;\n        }\n    }\n    \n    for (var i = 0; i < names.length; i++) {\n        for (var j = 0; j < names.length; j++) {\n            if (younitematrix[i][j] == 1) {\n                adhocconnections +=1;\n            }\n        }\n    }\n    \n    var adhocdeploy = adhocconnections *integrationcost;\n    var younitedeploy = youniteconnections *integrationcost;\n    var adhocannual = adhocconnections *annualcost;\n    var youniteannual = youniteconnections *annualcost\n    var adhocfive =  ((adhocconnections *integrationcost) + ((adhocconnections *annualcost) * 5) );\n    var younitefive = ((youniteconnections *integrationcost) + ((youniteconnections *annualcost) * 5) );\n    var deploysaving = adhocdeploy - younitedeploy;\n    var annualsaving = adhocannual - youniteannual;\n    var fivesaving = adhocfive - younitefive;\n    \n    content = \"<br><br><h4>Total Integration Cost Estimates<\/h4>\";\n    content += \"<b>Total ad-hoc integrations needed&nbsp;&nbsp;&nbsp;:&nbsp;<\/b>\" + adhocconnections;\n    content += \"<br><b>Total YOUnite integrations needed:&nbsp;<\/b>\" + youniteconnections;\n    content += \"<br><br><b>Estimated cost per integration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp:&nbsp;<\/b>$\" + numberWithCommas(integrationcost);\n    content += \"<br><b>Estimated annual integration cost:&nbsp;<\/b>$\" + numberWithCommas(annualcost) + \"<br><br>\";\n    if (younitedeploy < adhocdeploy && youniteannual < adhocannual) {\n        content += \"<table id=cost-table><tr><td id=cost-table-td-upper-left><\/td><td id=cost-table-td-col>Ad-Hoc<\/td><td id=cost-table-td-col>YOUnite<\/td><td id=cost-table-td-col>Savings<\/td><\/tr><tr><td id=cost-table-td-row>Cost to Implement and Deploy<\/td><td id=cost-table-td>$\"+ adhocdeploy.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td>$\"+ younitedeploy.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td-bold>$\"+deploysaving.toLocaleString(\"en-US\")+\"<\/td><\/tr><tr><td id=cost-table-td-row>Annual Costs<\/td><td id=cost-table-td>$\"+ adhocannual.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td>$\"+ youniteannual.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td-bold>$\"+annualsaving.toLocaleString(\"en-US\")+\"<\/td><\/tr><tr><td id=cost-table-td-row>Total costs over 5 years<\/td><td id=cost-table-td>$\"+ adhocfive.toLocaleString(\"en-US\")+\"<\/td><td id=cost-table-td>$\"+ younitefive.toLocaleString(\"en-US\") +\"<\/td><td  id=cost-table-td-bold>$\"+fivesaving.toLocaleString(\"en-US\")+\"<\/td><\/tr><\/table>\";\n    }\n    else {\n        content += \"<table id=cost-table><tr><td id=cost-table-td-upper-left><\/td><td id=cost-table-td-col>Ad-Hoc<\/td><td id=cost-table-td-col>YOUnite<\/td><\/tr><tr><td id=cost-table-td-row>Cost to Implement and Deploy<\/td><td id=cost-table-td>$\"+ adhocdeploy.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td>$\"+ younitedeploy.toLocaleString(\"en-US\") +\"<\/td><\/tr><tr><td id=cost-table-td-row>Annual Costs<\/td><td id=cost-table-td>$\"+ adhocannual.toLocaleString(\"en-US\") +\"<\/td><td id=cost-table-td>$\"+ youniteannual.toLocaleString(\"en-US\") +\"<\/td><\/tr><tr><td id=cost-table-td-row>Total costs over 5 years<\/td><td id=cost-table-td>$\"+ adhocfive.toLocaleString(\"en-US\")+\"<\/td><td id=cost-table-td>$\"+ younitefive.toLocaleString(\"en-US\") +\"<\/td><\/tr><\/table>\";\n    }\n    content += \"<br><br><h4>Feature Comparison<\/h4>\";\n    content += \"It's possible that your enterprise has partially implemented some of these features on an ad-hoc basis with your existing integrations. With YOUnite you get unified federated data routing, data access and single pane views across the entire data tier for the following:<br><br>\"\n    content += \"<table id=cost-table><tr><td id=cost-table-td-upper-left>Feature<\/td><td id=cost-table-td-col>Ad-Hoc<\/td><td id=cost-table-td-col>YOUnite<\/td><\/tr><tr><td id=cost-table-td-row>Event-Drive, Real-Time Data Unification\/Router<\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr><tr><td id=cost-table-td-row>Fine-Grained Data Governance\/Firewall<\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr> <tr><td id=cost-table-td-row>Data Lineage<\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr> <tr><td id=cost-table-td-row>Enterprise-Wide Federated Data Access (REST API, GraphQL, Lucene, JDBC)<\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr> <tr><td id=cost-table-td-row>Enterprise Wide Data Quality <\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr> <tr><td id=cost-table-td-row>Global Match\/Merge\/Data Exceptions<\/td><td id=cost-table-td>?<\/td><td id=cost-table-td-bold>Yes<\/td><\/tr><\/table>\";\n    \n      content += \"<br><h4>Want a More Detailed Analysis?<\/h4>\";\n      \n      content += \"<p>We have developed additional tools to get more precise cost comparison estimates.<\/p><p>What becomes clear is that as the enterprise moves from ad-hoc integrations to enterprise unification, costs go down and the overall quality of the data, governance and access increases.<br><br>\";\n      \n      content += \"<input name=generate style=\\\"text-align: center\\\" type=button value=\\\"Request Analysis\\\" onclick=\\\"window.location.href=\\'younite.us\/?page_id=3446\\';\\\" \/>\";\n    \n    container.innerHTML += content;\n  }\n\n  \/\/ draws an arrow at given x, y, and type (\"up\" or \"down\")\n  function drawUpArrow(svg, x) {\n      \/\/ line\n      svg.append(\"line\")\n        .attr(\"x1\", x)\n        .attr(\"y1\", 123)\n        .attr(\"x2\", x)\n        .attr(\"y2\", 179)\n        .attr(\"stroke-width\", 1.3)\n        .attr(\"stroke\", \"rgb(224,156,52)\")\n        .attr(\"marker-start\", \"url(#triangle)\");\n      \/\/ head\n      svg.append(\"svg:defs\").append(\"svg:marker\")\n        .attr(\"id\", \"triangle\")\n        .attr(\"refX\", 11)\n        .attr(\"refY\", 6)\n        .attr(\"markerWidth\", 30)\n        .attr(\"markerHeight\", 30)\n        .attr(\"orient\", \"auto-start-reverse\")\n        .append(\"path\")\n        .attr(\"d\", \"M 0 0 12 6 0 12 3 6\")\n        .style(\"fill\", \"rgb(224,156,52)\");\n  }\n  \/\/ draws an arrow at given x, y, and type (\"up\" or \"down\")\n  function drawDownArrow(svg, x) {\n      \/\/ line\n      svg.append(\"line\")\n        .attr(\"x1\", x)\n        .attr(\"y1\", 123)\n        .attr(\"x2\", x)\n        .attr(\"y2\", 179)\n        .attr(\"stroke-width\", 1.3)\n        .attr(\"stroke\", \"rgb(224,156,52)\")\n        .attr(\"marker-end\", \"url(#triangle)\");\n      \/\/ head\n      svg.append(\"svg:defs\").append(\"svg:marker\")\n        .attr(\"id\", \"triangle\")\n        .attr(\"refX\", 11)\n        .attr(\"refY\", 6)\n        .attr(\"markerWidth\", 30)\n        .attr(\"markerHeight\", 30)\n        .attr(\"orient\", \"auto-start-reverse\")\n        .append(\"path\")\n        .attr(\"d\", \"M 0 0 12 6 0 12 3 6\")\n        .style(\"fill\", \"rgb(224,156,52)\");\n  }\n\n  \/\/ draws arrow from first set of coords to second\n  function drawArrow(svg, startCoords, endCoords) {\n      \/\/ modify start & end coords\n      var x1 = 0;\n      var y1 = 0;\n      var x2 = 0;\n      var y2 = 0;\n      var angle = 0;\n      var precision = 0.001;\n      if(Math.abs(endCoords[0] - startCoords[0]) <= precision) { \/\/divide by zero\n          if (endCoords[1]-startCoords[1] > 0) {\n            angle = Math.PI\/-2;\n          } else {\n            angle = Math.PI\/2;\n          }\n      } else {\n          angle = Math.atan((endCoords[1]-startCoords[1])\/(endCoords[0]-startCoords[0]));\n      }\n      if(Math.abs(startCoords[0] - endCoords[0]) <= precision) { \/\/ if vertical\n          x1 = startCoords[0];\n          y1 = startCoords[1] - 40 * Math.sin(angle);\n          x2 = endCoords[0];\n          y2 = endCoords[1] + 40 * Math.sin(angle);\n      } else if(startCoords[0] > endCoords[0]) { \/\/ if pointing left\n          x1 = startCoords[0] - 40 * Math.cos(angle);\n          y1 = startCoords[1] - 40 * Math.sin(angle);\n          x2 = endCoords[0] + 40 * Math.cos(angle);\n          y2 = endCoords[1] + 40 * Math.sin(angle);\n      } else if (startCoords[0] < endCoords[0]){ \/\/ if pointing right\n          x1 = startCoords[0] + 40 * Math.cos(angle);\n          y1 = startCoords[1] + 40 * Math.sin(angle);\n          x2 = endCoords[0] - 40 * Math.cos(angle);\n          y2 = endCoords[1] - 40 * Math.sin(angle);\n      }\n      x1 = x1.toFixed(2);\n      y1 = y1.toFixed(2);\n      x2 = x2.toFixed(2);\n      y2 = y2.toFixed(2);\n      \/\/ line\n      svg.append(\"line\")\n        .attr(\"x1\", x1)\n        .attr(\"y1\", y1)\n        .attr(\"x2\", x2)\n        .attr(\"y2\", y2)\n        .attr(\"stroke-width\", 1.3)\n        .attr(\"stroke\", \"rgb(224,156,52)\")\n        .attr(\"marker-end\", \"url(#triangle)\");\n      \/\/ head\n      svg.append(\"svg:defs\").append(\"svg:marker\")\n        .attr(\"id\", \"triangle\")\n        .attr(\"refX\", 11)\n        .attr(\"refY\", 6)\n        .attr(\"markerWidth\", 30)\n        .attr(\"markerHeight\", 30)\n        .attr(\"orient\", \"auto-start-reverse\")\n        .append(\"path\")\n        .attr(\"d\", \"M 0 0 12 6 0 12 3 6\")\n        .style(\"fill\", \"rgb(224,156,52)\");\n  }\n\n  function FindColPos(element) {\n    \/* find column position *\/\n\n    var colPos = 0;\n    var prev = element.previousSibling;\n\n    while (prev) {\n      if (prev.nodeType == 1 && prev.nodeName.match(\/t[dh]\/i)) {\n          colPos++;\n      }\n      prev = prev.previousSibling;\n    }\n\n    return colPos;\n  }\n\n  function FindRowPos(element) {\n    \/* find row position *\/\n\n    var rowPos = 0;\n    var prev = element.parentNode.previousSibling;\n\n    while (prev) {\n      if (prev.nodeType == 1 && prev.nodeName.match(\/tr\/i)) {\n          rowPos++;\n        }\n        prev = prev.previousSibling;\n      }\n\n      return rowPos;\n  }\n<\/script>\n<!-- End Javascript -->\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Cost Benefit Analysis Since most data integration efforts happen organically, the true costs and lack of integration features are often not considered. This simple comparison exercise will give you an idea of how federated data unification can not only save money but provide data tier unification features that ad-hoc and older technologies cannot provide. How many servers in your enterprise will need to be integrated over the next five years?<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_mi_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-1949","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/pages\/1949","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/comments?post=1949"}],"version-history":[{"count":1154,"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/pages\/1949\/revisions"}],"predecessor-version":[{"id":4008,"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/pages\/1949\/revisions\/4008"}],"wp:attachment":[{"href":"https:\/\/younite.us\/ja\/wp-json\/wp\/v2\/media?parent=1949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}