Add Scroogle to your search area in Firefox 2.0 Install the 'Scroogle Scraper' search plugin.

software


Business Intelligence? More like Business Misinformation…

As CFO for a Salt Lake City eCommerce company (annual revenue 17 million), I am frequently asked about how we make and lose money, where we can save dollars and how we can increase profitability. Stakeholders want timely, actionable business intelligence (BI).

Based on my experience, stunningly enough, most companies (from large to small) have highly anemic BI systems. But BI is one of the most important business tools; effective biz-intel gives instant feedback to management about how the company is performing. Traditionally, we rely heavily on financial statements like the cash flow statement and the balance sheet and ad hoc reporting to provide business performance insight. These traditional methods are rendered less effective because of the time delay of financial statements and one-off report preparation. Financial statements are completed typically 1-2 weeks after a month is over. In many industries, that information is too stale for good decisions, and the feedback is too late for agile AB testing of business initiatives. In many cases, untimely intelligence is worse than no intelligence at all.

To better understand business reporting, I’ve broken it into three sections:

  1. Historic: Historical reporting is financial statements that are prepared by the accounting department. These are typically used for external entities like banking and investors.
  2. Current: Current reporting is much more effective for day to day business management. This is BI reports and managerial accounting.
  3. Future: Future reporting is projections and forecasting. This is for planning, acquisitions, and obtaining debt and equity financing.

Each of these categories is crucial for business success, but the #2 (current) is the one most neglected and yet most important for day-to-day business operations. Fast and accurate current reporting is a proven competitive advantage. Effective current reporting makes businesses more adaptable and nimble in the ever changing business environment. Many companies have initiative to create business intelligence, but most have been unsuccessful, wasting large sums of money. A quick brainstorm netted these 5 major obstacles to effective BI:

  1. PLANNING: BI needs to be a well thought-out plan that doesn’t necessarily require hundreds of thousands of dollars purchasing software and servers. It always seems like companies are just throwing money at the situation and still cannot create effective BI.
  2. KNOWLEDGE: BI is created by technical types. Techies are the ones that know how to create advanced queries and display the custom data, but techies are not usually trained on creating usable and intuitive reports. This was the biggest issue with my company. Techies created BI reports but they were very misleading (and often inaccurate). So in order for BI to be effective you need the fusion of technical know-how combined with skill in financial and business reporting.
  3. ACCESS: Real-time access to the underlining data is extremely important to creating effective BI. The I.T. department wants to protect its data for stability, and the finance department wants to protect its reports for privacy. Of course the data is confidential, but there are ways to summarize data and not provide all the details.
  4. DISPLAY: It is very important to display the data in an effective format. If all you display is a line graph of daily sales for the last month, that really doesn’t say much. Sales should be compared to the past – recent past and distant past – to give a comparison.
  5. SPEED: When creating a single dashboard that summarizes millions even billions of database records, speed becomes a major obstacle. On my next blog post I’ll talk about how I overcame report slowness.

STAY TUNED:

In the next installment, “Zero to DIY BI in 30 days”, I’ll explain how I surmounted these obstacles, and how we went from bad data to effective BI in 30 days. We’ll talk about integrations, real-time data, data warehousing, KPIs, and iterative development.

Matt Budd, CFO
With contributions by Ryan Byrd, CTO

picture credits: Confusion by Adi Ron (2005)

Here’s a quick example of weighted round robin in php.

//weighted round robin
 
define("START_WEIGHT", 1);
class printer
{
  private $name;
  private $weight;
  private $normalizedWeight;
  public function printer($name,$weight=START_WEIGHT)
  {
    $this->name=$name;
    $this->weight=$weight;
  }
  public function getName() { return $this->name; }
  public function getWeight() { return $this->weight; }
  public function setWeight($weight) { $this->weight=$weight; }
  public function getNormalizedWeight(){ return $this->normalizedWeight; }
  public function setNormalizedWeight($weight) { $this->normalizedWeight=$weight; }
 
}
 
$printerList=array();
$printerList[]=new printer("printer1",1);
$printerList[]=new printer("printer2",2);
$printerList[]=new printer("printer3",4);
$printerList[]=new printer("printer4",1);
 
$jobList=array('job1','job2','job3','job4','job5','job6','job7','job8','job9','job10','job11','job12','job13','job14','job15','job16');
 
$min=2147483647; //a large number
foreach($printerList as $printer)
{
  $min=($printer->getWeight()<$min)?$printer->getWeight():$min;
}
foreach($printerList as $printer)
{
  $printer->setNormalizedWeight($printer->getWeight()/$min);
}
 
$jobCount=count($jobList);
while($jobCount>0)
{
  foreach($printerList as $printer)
  {
    $jobCount=count($jobList);
    if ($jobCount>0)
    {
      $jobList=jobPush($printer,$jobList,$jobCount);
    }
  }
}
 
function jobPush($printer,$jobList,$jobCount)
{
  for($x=0;$x<$printer->getNormalizedWeight();$x++)
  {
    if ($jobCount>0)
    {
      $job=array_shift($jobList);
      $jobCount--;
      echo($printer->getName()." getting ".$job."\n");
    }
  }
  echo("\n");
  return $jobList;
}

Google just released their new browser, Chrome. You can read all about it, comic-style, on Google Books.

I just downloaded it. I’ll let you know how it goes

As you probably know, Microsoft released its long awaited XP successor, Vista. Some have asked what I think of it. I’ve played around with Vista a bit at work and my firm recommendation is to NOT UPGRADE TO VISTA. There is no compelling advantage. Indeed, I’m aware of many negative effects of upgrading: programs not running, device drivers not working etc.

As well, Microsoft recently released Office 2007, which contains new versions of Excel and Word. Here’s the catch: the default file format .xlsx and .docx ARE NOT BACKWARD COMPATIBLE! That is the epitome of stupidity. Purely retarded. Why would they do that?!?!?

My next desktop operating system will surely not be Vista. It will be a version of Linux. Linux has not, in my opinion, been ready for the desktop for some time, but it’s becoming better and better all the time. Stay tuned!

Over on my other site I just posted a blog entry about a Dominos pizza ad campaign where each day they release a word puzzle and if you solve the puzzle you get a link to an eBay auction where the first ten people that day (for only $9.99) can buy pretty cool stuff, like an iPod or a year’s worth of pizza.

The puzzles are one of three forms: Word Jumbles, CryptoQuips or Domino’s Trivia. The Word Jumble is just as it sounds; they scramble the letters of some Domino’s themed sentence around and you get to unscramble it. For example: MOIODSN HITNNYGA SOGE ALED

Here’s the link to my Word Jumble solver Domino’s Pizza Anything Goes Deal Helper Script

And here is the code:

if (isset($_REQUEST["word_jumble"])&&$_REQUEST["word_jumble"]!='')
{
 
$vocabArray=array('2-liter','a',...,'Vine-Ripened','wings');
 
$lookuptable=array();
foreach($vocabArray as $vocab)
{
  $str=strtoupper($vocab);
  $tempArray= array();
  for($i=0; $<strlen($str); $i++)
    {
      $tempArray[]=$str[$i];
    }
  sort($tempArray);
  $tempStr=implode('',$tempArray);
  $lookuptable[$tempStr]=$vocab;
}
$wordArray=explode(' ',$word_jumble);
foreach ($wordArray as $word)
{
  $str=strtoupper($word);
  $tempArray= array();
  for($i=0; $<strlen($str); $i++)
    {
      $tempArray[]=$str[$i];
    }
  sort($tempArray);
  $tempStr=implode('',$tempArray);
  $unscrambled = ($lookuptable[$tempStr]=='')?'?????':$lookuptable[$tempStr];
  echo($word." = ".$unscrambled."\n "); 
}

We all know that my laptop harddrive crashed. I ordered a new one and have been reinstalling my sofftware. Here’s a list of things I’ve installed so far:

  • all latest drivers
  • windowsupdate.microsoft.com
  • www.getfirefox.com
    • webdeveloper extension
    • add tabs for frequently used sites
      • gmail.google.com
      • www.google.com
      • www.slashdot.org
  • www.textpad.com
  • AVG
  • adaware
  • spybot search and destroy
  • hijack this
  • GAIM (if it ever stops crashing) or MSN IM
  • microsoft antispyware
  • putty
  • winscp
  • winrar or 7zip
  • googletalk
  • treenotes
  • badboy
  • microsoft office
    • setup outlook rules
  • sqlyog
  • oracle instant client
  • toad for oracle
  • adobe reader
  • adobe flash
  • quicktime

Send to a friend * Print this page * Join the club * Talk with my robot * Advertise here * Search this Site * Donate * Link to me


Web hosting by Utah Hub *  Powered by CreativeTap *  In association with Segomo
Unless otherwise noted, Copyright 2004-2013, Ryan Byrd. All Rights Reserved.
Ryan Byrd dot net -- probably the coolest site in Utah