QlikView for Developers - Miguel Angel Garcia - E-Book

QlikView for Developers E-Book

Miguel Ángel García

0,0
59,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Drive value and insight by developing business critical applications with QlikView 12

About This Book

  • Develop your own scalable and maintainable QlikView applications
  • Learn time-saving techniques for making your QlikView development more efficient
  • A one-stop guide to developing BI applications with QlikView

Who This Book Is For

This book is for anyone interested in working with QlikView or who has attended QlikView Developer training. The book caters for all QlikView developers, beginners and experts alike, and anyone who wants to improve their QlikView skills.

What You Will Learn

  • Understand important changes made in QlikView 12
  • Learn the techniques and best practices to transform data in QlikView via scripts
  • Load data from disparate sources to build an associative Data Model
  • Build robust data models and overcome common modeling challenges
  • Designing data visualization objects to present performance measures with charts and tables
  • Learn to use dimensions and expressions in QlikView objects
  • Utilize QlikView's built-in aggregation functions to achieve complex calculations
  • Create Point In Time reporting and achieving complex calculations using Set Analysis
  • Create a consistent and interactive user interface
  • Ensure your QlikView applications and data are protected
  • Optimize the QlikView Data Model
  • Constructing a data architecture that supports scalable QlikView deployments
  • Learn time-saving techniques for making your QlikView development more efficient

In Detail

QlikView is one of the most flexible and powerful Business Intelligence platforms around. If you want to build data into your organization, build it around QlikView. Don't get caught in the gap between data and knowledge – find out how QlikView can help you unlock insights and data potential with ease.

Whether you're new to QlikView or want to get up to speed with the features and functionality of QlikView, this book starts at a basic level and delves more deeply to demonstrate how to make QlikView work for you, and make it meet the needs of your organization. Using a real-world use-case to highlight the extensive impact of effective business analytics, this book might well be your silver bullet for success.

A superb hands-on guide to get you started by exploring the fundamentals of QlikView before learning how to successfully implement it, technically and strategically. You'll learn valuable tips, tricks, and insightful information on loading different types of data into QlikView, and how to model it effectively.

You will also learn how to write useful scripts for QlikView to handle potentially complex data transformations in a way that is simple and elegant. From ensuring consistency and clarity in your data models, to techniques for managing expressions using variables, this book makes sure that your QlikView projects are organized in a way that's most productive for you and key stakeholders.

Style and approach

This book will help you learn QlikView Development from a basic to a practitioner level using a step-by-step approach. It is smartly built around a practical case study – HighCloud Airlines – to help you gain an in-depth understanding of how to build applications for Business Intelligence using QlikView.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 662

Veröffentlichungsjahr: 2017

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Table of Contents

QlikView for Developers
Credits
About the Authors
Acknowledgements
About the Reviewer
www.PacktPub.com
Customer Feedback
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Downloading the color images of this book
Errata
Piracy
Questions
1. Meet QlikView
What is QlikView?
How does QlikView differ from traditional BI?
Associative user experience
Technology
Adoption path
Exploring data with QlikView
Getting QlikView
Navigating the document
Slicing and dicing your data
Listboxes
Selections in charts
Search
Bookmarking selections
Creating a new bookmark
Retrieving a bookmark
Undoing selections
Changing the view
Cyclic groups
Drill down groups
Containers
But wait, there's more!
The technology and components behind QlikView
The way the data flows
When QlikView use expands
Create content
Reload, publish, and distribute content
Consume content
Meet HighCloud Airlines
Summary
2. What's New in QlikView 12?
How is QlikView 12 different from QlikView 11?
Common QIX Engine
64-bit only
Online documentation
Security improvements
Mobile touch improvements
Improved clustering and scaling
Clustering improvements in QlikView 12.1
What is new in the Qlik product portfolio?
Qlik Sense Enterprise and the Qlik Analytics Platform
In what way are QlikView and Qlik Sense similar?
In what way do QlikView and Qlik Sense differ?
What does this mean for users?
What is the Qlik Analytics Platform?
Qlik NPrinting
Qlik Web Connectors
Qlik GeoAnalytics
Qlik DataMarket
How do the products in the Qlik product portfolio fit together?
What is new in QlikView 12 for Developers?
Summary
3. Seeing is Believing
What is a SiB?
Preparing the workspace
Setting up the folder structure
Creating the QlikView document
Creating the app
The requirements
Constructing the data model
What is a data model?
Loading the fact table
Playing with listboxes
Associating additional tables
Structuring the script
Creating the dashboard tab
Creating and positioning the filters and user controls
Optimizing the screen space
Number of flights over time
One chart and multiple analyses with cyclic expressions
Adding a time drill-down group
Top 10 routes
Summary
4. Data Sources
Using ODBC and OLE DB drivers
Installing the drivers
Accessing custom data sources
Accessing web resources via APIs
Qlik Web Connectors
Qlik REST Connector
Reading table files
Extracting data – two hands-on examples
Extracting data from MS Access
Configuring the driver
How to set up an ODBC connection
Creating the OLE DB connection string
Querying the database
The Create Select Statement wizard
Adding the airport tables
Reloading the script
The resulting data model
Loading a table file
Specifying the file attributes
The CSV attributes
A word on quoting
Previewing
The transformation step
Refining the input table
The Where clause wizard
The crosstable
The resulting script
QVD and QVX files
QVD files
QVX files
Loading an Inline table
Summary
5. Data Modeling
Dimensional data modeling
Back in the day
Relational databases and ER modeling
Dimensional modeling
The star schema
The snowflake schema
Creating the dimensional model
Dealing with multiple fact tables
Dimensional models in QlikView
The associative data model
Guidelines for table associations
How associations are created
Renaming fields
Renaming fields with the Qualify statement
Avoiding data model conflicts
Dealing with synthetic keys
Creating a composite key
Dealing with circular references
The Table Viewer window
Table information
Field information
Table preview
Table viewer menu
Summary
6. Styling Up
Design requirements
The Document Properties window
The Sheet Properties dialog
Setting the object properties
Caption colors and style
Changing the caption colors
The Color Area and Color dialog windows
Setting the caption font
Setting the content font
Setting the global font
Propagating the object appearance
Setting the default Sheet Object Style
Hiding captions
Working with listboxes
Adding listboxes
The List Box Properties dialog
The General tab
The Expressions tab
The Sort tab
The Presentation tab
The Number tab
The Font tab
The Layout tab
The Caption tab
The Multi Box
The Current Selections Box
Making selections from the Current Selections Box
Adding a Bookmark Object
Aligning and resizing sheet objects
Selecting objects
Moving objects
Resizing objects
Resizing a Multi Box
Aligning sheet objects
Do a little house keeping
Creating and applying a default color map
Defining chart colors
Setting the default color map
Summary
7. Building Dashboards
User types
Dashboard users
Analysts
Report users
Applying the DAR principle to Airline Operations
Document requirements
Creating the Analysis sheet
Adding a new chart
Bar Chart
Additional bar chart properties
Style
Presentation
Expressions and the Edit Expression window
Expressions
The Edit Expression window
Fields
Functions
Variables
Images
The Expression Overview window
Line Chart
Additional line chart properties
Expressions
Style
Presentation
Combo Chart
Container
Scatter Chart
Button
Statistics box
Creating the new Dashboard sheet
Linked Objects
Gauges
Cloning the object for re-use
Adding Air Time %
More Gauge styles
Adding a Text object
Using a Text Object to display an image
Adding actions to a Text object
Adding a Pie chart
Dimension Limits
Adding the dimension value to the data point values
Creating the Reports sheet
Variables
The Expression Overview window in action
Copying sheets
KPIs per airline, origin, and destination country
Cyclic and Drill-down groups
Straight table
Not all expressions are numbers
Pivot tables
Auto minimize
The Report Editor window
Other charts
Radar Chart
Mekko Chart
Grid Chart
Funnel Chart
Block Chart
Trellis Chart
Summary
8. Scripting
The Script Editor
Menu and toolbar
Script pane
Tool pane
Script statements
Building the aircraft dimension table
Loading the aircraft information
Adding the aircraft groups
Loading the second aircraft table
Making it all right
Manipulating tables
The JOIN statement
The KEEP statement
The CONCATENATE statement
The NOCONCATENATE statement
Using MAPPING tables
Adding comments
Storing tables
Renaming tables and fields
Deleting tables and fields
Setting variables
Controlling script flow
Conditional functions
Dealing with different data types
Strings
String operators
String functions
Numbers and numeric functions
Date and time functions
Debugging script
Syntax check
Saving logs to disk
The script debugger
Using breakpoints
Limited load
Tracing script
Standardizing and organizing script
Using tabs
Comments
Adding an information tab
Script layout
Naming conventions
Table naming conventions
Field naming conventions
Re-using scripts
Subroutines
Including script files
Managing file locations and connection strings
Summary
9. Data Modeling Best Practices
Data consistency
Dealing with dimensions without facts
An alternative approach
A solo exercise
Dealing with facts without dimensions
Reducing storage requirements
Using number-based key fields
Removing unused fields
Splitting high-cardinality fields
Design challenges of data modeling
The Airline Employment statistics table
Concatenating fact tables
Structural asymmetry
Natural and forced concatenation
Natural concatenation
Forced concatenation
Concatenating the Employment Statistics table
Working with link tables
A link table example
Creating a link table in the Airline Operations document
Finding a balance
The master calendar
A final note on data modeling
Summary
10. Basic Data Transformation
Changing the source table structure
"Cleansing" a dirty table
File contents
Working with the Transformation Step wizard
Throwing out the garbage
Unwrapping table contents
Filling missing cells
The final result
Other transformation tricks
Loading a Crosstable
A Crosstable example
Working with the Crosstable Wizard
A solo exercise
Expanding a hierarchy
A hierarchy example
Working with the Hierarchy Wizard
The tree-view list-box
Generic load
Loading a generic table into QlikView
Summary
11. Advanced Expressions
Using variables
Creating a variable
Using variables in charts
Interactively changing a variable's value
Using the Input Box object
Using the Slider object
Using variables based on expressions
Using variables to store expressions
Variable naming convention
The Dollar Sign Expansion syntax
Dollar Sign Expansion with parameters
Double Dollar Sign Expansion
Using the TOTAL qualifier
The Aggr function
Using Aggr for nested aggregation
A word on calculated dimensions
Aggregations over the Aggr output
A word on using the Distinct qualifier
Getting the Average Load Factor per Route per Airline
Conditional functions
The If function
The syntax
A use case
Heat charts
A solo exercise
Building a heat chart with the Colormix wizard
Numeric versus text comparisons
The Class function
A solo exercise using the Class function
The Pick function
Using Pick with Dimensionality
A tip on copying expressions
Summary
12. Set Analysis and Point In Time Reporting
The magic of Set Analysis
What is it for?
Syntax and examples
Using variables in set expressions
Dynamic record sets
More assignment operators
Set operators
Using element functions
Point In Time Reporting
The challenge
Defining the set modifiers
Obtaining the base period record set
Obtaining the compare-to period record set
Constructing the expressions
Enabling additional period comparisons
More Point In Time Reporting examples
Storing set expressions into variables
Set expressions with parameters
Portable set expressions
Set variables and the Master Calendar
Comparative analysis with alternate states
A comparative analysis example
Alternate states step-by-step
State-based expressions
Combining alternate states and the default state
Applying alternate states to layout objects
Document navigation with alternate states
Clearing selections in an alternate state
Always validate
Summary
13. Advanced Data Transformation
Data architecture
Two-stage architecture
Three-stage architecture
Setting up our environment
Loading data already stored in QlikView
Cloning a QlikView data model
Loading from RAM
Resident load
Aggregating data
Aggregating the Flight Data table
The Transformation output
Aggregation functions
Sorting tables
Ordering the Order-By fields
The Peek function
Merging forces
A refresher
The objective
Getting it done
Loading the table
Sorting the table
Peeking previous records
A solo exercise
Dealing with slowly changing dimensions
The Carrier Decode table
IntervalMatch magic
Expanding the intervals
Some considerations
Applying IntervalMatch to the Carrier Decode table
Ordering, peeking, and matching all at once
The use case
Incremental loads
Summary
14. More on Visual Design and User Experience
Creating a consistent QlikView UI
Screen resolution
Background image
Themes
Applying themes
Creating themes
Adding document properties
Adding sheet properties
Adding sheet object properties
A solo exercise
Additional interactivity
Triggers
Document triggers
Sheet triggers
Actions
Advanced search expressions
A solo exercise
Dynamic bookmarks
Alerts
Conditionally showing and calculating objects
Summary
15. Security
Hidden script
Section access
Section access fields
Reduction fields
Initial data reduction
Omitting fields
Document-level security
Sheet-level security
Summary
Index

QlikView for Developers

QlikView for Developers

Copyright © 2017 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

First published: June 2017

Production reference: 1280617

Published by Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham B3 2PB, UK.

ISBN 978-1-78646-984-7

www.packtpub.com

Credits

Authors

Miguel Ángel García

Barry Harmsen

Reviewer

Steve Dark

Commissioning Editor

Veena Pagare

Acquisition Editor

Meeta Rajani

Content Development Editor

Aishwarya Pandere

Technical Editor

Dinesh Pawar

Copy Editor

Safis Editing

Project Coordinator

Nidhi Joshi

Proofreader

Safis Editing

Indexer

Pratik Shirodkar

Graphics

Tania Dutta

Production Coordinator

Deeplika Naik

Cover Work

Deepika Naik

About the Authors

Miguel Ángel García is a business intelligence consultant and Qlik Solutions Architect from Monterrey, Mexico. Having worked throughout many successful Qlik implementations, from inception to implementation, and performed a wide variety of roles on each project, his experience and skills range from pre-sales to applications development and design, technical architecture, system administration, as well as functional analysis and overall project execution. He currently holds the QlikView Designer, QlikView Developer, and QlikView System Administrator certifications.

His early-found passion for QlikView led him to create and host the iQlik blog, which you can find at https://aftersync.com/blog and has been proved to help many developers, both newcomers and experienced, in their everyday development challenges. You can follow his blog updates via Twitter on @GarciaMMiguel and @iQlik.

He also delivers advanced online Qlik training at https://q-on.bi and https://masterclass.bi, so be sure to check out the courses there to continue learning QlikView and Qlik Sense development.

I also want to thank my family for their understanding and support throughout all the projects and endeavors I undertake. This book is dedicated to them.

Barry Harmsen is a business intelligence consultant based in the Netherlands. Here, he runs Bitmetric (http://www.bitmetric.nl), a boutique consulting firm specialized in the Qlik product suite. Originally from a background of traditional business intelligence, data warehousing, and performance management, in 2008 Barry made the shift to Qlik and a more user-centric form of business intelligence. Since then, he and his team have helped many clients get the most out of their investments in the Qlik platform.

Barry is one of the four Qlik experts teaching at the Masters Summit for Qlik (http://www.masterssummit.com), advanced training for experienced Qlik professionals. He also runs the Amsterdam chapter of the Qlik Dev Group (http://qlikdevgroup.com/), an open and informal gathering where Qlik professionals can share knowledge and experiences.

For his contributions to the Qlik ecosystem, Barry has been accredited by Qlik as a Qlik Luminary since 2014.

Barry and his colleagues regularly post Qlik tips, tricks, and tutorials at the QlikFix blog (http://www.qlikfix.com). He can also be found on Twitter as @meneerharmsen.

I want to thank my daughter Lucie, my sons Lex and Bob, and especially my wife Miranda for the support and patience during the writing and updating of this book.

I also want to thank the team at Bitmetric: Wesley Smit, Rik Cramer, Johan van den Bosch, and Vincent Hayward.

Acknowledgements

Writing a book is not a solo or duo exercise. This result could not have been achieved without the contributions of a great team.

Steve Dark performed the technical review of this book. His insightful comments and suggestions have added an extra dimension of quality to the book. For that we thank him. We also wish to thank Ralf Becher and Stephen Redmond, who did the technical review on the previous edition of this book.

We also want to thank Packt's team: Aishwarya Pandere, content development editor, and Dinesh Pawar, technical editor. Their guidance kept us focused and on track.

About the Reviewer

Steve Dark heads up Quick Intelligence, a business intelligence consultancy with 100 percent focus on the Qlik platform. With clients in sectors as diverse as manufacturing, pharmaceuticals, and finance, we cover and support the entire Qlik project lifecycle and ecosystem for our customers. Through the numerous successful implementations and challenges met for these clients, Steve has in depth expertise and a wealth of experience in QlikView and more recently Qlik Sense.

It is this experience that Steve shares through his blog at http://www.quickintelligence.co.uk/qlikview-blog/ and via other channels, such as Qlik Community. This sharing of knowledge and enthusiasm for the Qlik platform has been recognized by Qlik, as they made Steve a Luminary and a Community MVP.

Steve has also been on the technical review team for QlikView 11 For Developers, QlikView 11 For Developers Cookbook, QlikView Scripting, and QlikView Server and Publisher. All of these titles are published by Packt Publishing.

I would like to thank all those colleagues and clients who have allowed me to keep doing the work that I enjoy for so long.

www.PacktPub.com

Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <[email protected]> for more details.

At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.

https://www.packtpub.com/mapt

Get the most in-demand software skills with Mapt. Mapt gives you full access to all Packt books and video courses, as well as industry-leading tools to help you plan your personal development and advance your career.

Fully searchable across every book published by PacktCopy and paste, print, and bookmark contentOn demand and accessible via a web browser

Customer Feedback

Thanks for purchasing this Packt book. At Packt, quality is at the heart of our editorial process. To help us improve, please leave us an honest review on this book's Amazon page at https://www.amazon.com/dp/1786469847.

If you'd like to join our team of regular reviewers, you can e-mail us at [email protected]. We award our regular reviewers with free eBooks and videos in exchange for their valuable feedback. Help us be relentless in improving our products!

Dedicated to our families.

Miguel Ángel García

Barry Harmsen

Preface

The need for business intelligence (BI) solutions and data analysis has always existed, and so have different approaches to fulfill this need. Traditional BI software has heavily relied on techniques that have been around and persisted through the decades, but newer technologies have emerged in recent times that have been proven to be more flexible and, therefore, more adequate for the evolving environment in which they are used. QlikView is an example of these disruptive technologies, a kind of software that changes the rules of the game.

QlikView is different; that's a fact. It's different in an advantageous way. If you have worked with traditional BI software before, it might be necessary to let go of some of the preconceptions you may have regarding how BI solutions are built. If, on the other hand, you are a newcomer to the BI landscape, we will help you get the basics in order so that you get up-to-speed. In any case, rest assured that you are on the right track by having picked QlikView as your tool and this book as your guide.

The good news is, the material between these covers has been written in such a way that newcomers, BI professionals experienced in other tools, and even seasoned QlikView practitioners will find useful. This book will provide you with the knowledge required to understand how QlikView works, and the skills needed to build QlikView documents from start to finish—from loading data to building charts. Even if you have worked with QlikView before, you will find that the exercises presented in each chapter, and the recommended practices we discuss, will help you extend your knowledge and become more proficient with QlikView.

Among other features you will find on this book, some of the most important are as follows:

The book is practical and hands-on. It is filled with examples that will let you take the theory into practice right away. We support this hands-on experience by providing a full dataset used across the entire book, and around which we build a fully-functional QlikView document that contains a dashboard, various analyses (both basic and complex to build), and reports using the Dashboard-Analysis-Reports (DAR) approach.In every chapter, a piece of a final QlikView document is built, which allows you to follow its evolution from start to finish. It also enables us to cover different development challenges that you may encounter in a real-world QlikView project.We made sure to cover both backend and frontend development, so you will find that all 15 chapters cover different topics, from scripting and data extraction to data modeling, design, charts and expressions, as well as security, and everything in between. We also talk about various best practices related to each of these topics.

All of the examples discussed in the book are complemented with solution files for the reader to follow the exercises and compare your work. The QlikView files we provide are Personal Edition enabled, which means that a purchased QlikView license is not required to open them.

Although the case and story used in the book are built around a fictional company, the data we use in our examples and final application is real. Thanks to the Open Government initiative and the Bureau of Transportation Statistics of the United States, which compiles and maintains a complete dataset about airline operations in the US, you will be able to work with real data and build a QlikView application to analyze flights, enplaned passengers, cargo, and many others across multiple dimensions, such as carriers, airports, cities, and aircraft types.

Congratulations on taking a step towards learning to develop BI applications with QlikView. Are you ready for take off? Qlik on!

What this book covers

Chapter 1, Meet QlikView, introduces QlikView and shows how it can be used to explore data. We will also learn about the technology and components behind QlikView and will be introduced to the case that is used throughout the book: HighCloud Airlines.

Chapter 2, What's New in QlikView 12, presents a summary of the changes in the QlikView software, as well as in the Qlik ecosystem in general, that happened since the previous version of this book was published in 2012. In this chapter, we will bring you up to speed with the changes over the past few years.

Chapter 3, Seeing Is Believing, help us get hands-on with QlikView by building a simple QlikView document. We will learn what dimensions and expressions are, in the context of a QlikView document. We will also learn how to build simple charts to visualize and aggregate data, and how to design a basic user interface for navigating through the QlikView document.

Chapter 4, Data Sources, will help us learn how to load data from different sources and how to extract data using the built-in wizards. We will also take a closer look at QlikView's proprietary data files.

Chapter 5, Data Modeling, explains which type of data model is best suited for QlikView. We will see which rules need to be followed when designing a QlikView data model, and will also learn how best to take advantage of the associative data model to make our documents highly dynamic.

Chapter 6, Styling Up, will help us learn how to style our QlikView documents. We will learn about the various document and sheet properties and will use them to manage the visual style of our document. We will also take a closer look at some of the most fundamental objects and learn how we can change their appearance.

Chapter 7, Building Dashboards, introduces us to the three basic types of QlikView users, and how we can best cater to their needs. We will learn about the various charting options that are available in QlikView, and will see how we can add interactivity to our QlikView documents. We will also be introduced to basic calculations.

Chapter 8, Scripting, introduces us to the QlikView scripting language and editor. We will learn about the most important script statements, and how we can use them to manipulate data and control the flow of the script. We will also be introduced to some of the most important operators and functions for dealing with various data types. Finally, we will look at the options for debugging scripts, how to organize and standardize script, and how we can reuse our scripts.

Chapter 9, Data Modeling Best Practices, expands on the knowledge about data modeling and scripting we gained in earlier chapters. We will learn how to make sure that data models are consistent and how to work with complex data models and multiple fact tables. We will also learn how to reduce storage requirements for a dataset and how best to deal with date and time information.

Chapter 10, Basic Data Transformation, focuses on how to deal with unstructured data and how to transform it for use in our QlikView data model. We will learn about basic data transformation subjects, such as cleansing data and how to restructure pivoted and hierarchical tables for inclusion in the QlikView data model.

Chapter 11, Advanced Expressions, discusses the use of variables. We will also learn how to use conditional functions and how to handle advanced aggregations.

Chapter 12, Set Analysis and Point In Time Reporting, takes a closer look at Set Analysis and will explain how it can be used for Point In Time Reporting. We will also learn about comparative analysis using alternate states.

Chapter 13, Advanced Data Transformation, returns to the topic of data transformation. We will learn about the most commonly used data architectures that can ease QlikView development and administration. Next, we will take a close look at aggregating and sorting data in the data model. In the final part of the chapter, we will learn how to take advantage of some of QlikView's most powerful data transformation capabilities.

Chapter 14, More on Visual Design and User Experience, takes another look at the visual design of our QlikView documents, and will learn how to create a consistent user interface. The second part of the chapter introduces us to some additional manners of adding interactivity to our documents.

Chapter 15, Security, shows how to secure our QlikView documents. We will see how we can allow only authorized users to open our documents and will learn how we can limit what a user can do and see within our document.

What you need for this book

To use this book, you primarily need the QlikView Desktop software. With regards to computer requirements, you will need a PC with at least Windows XP (or better), 2 GB of hard disk space, and 2 GB of RAM. A 64-bit machine is required if you want to use QlikView 12 or a higher version, and is the recommended environment for this book and QlikView development in general. If you prefer to use a 32-bit machine, you can install QlikView 11 instead.

For best understanding, a general knowledge of BI and its terminology is required. Basic understanding of databases and SQL is preferred, but not compulsory for this book.

Who this book is for

This book is aimed at developers and power users who want to learn how to develop BI applications with QlikView. Developers who have already been using QlikView for some time may find that this book contains useful tips and best practices to make more effective use of QlikView.

This book only covers QlikView Desktop; deployments to QlikView Server and Publisher are beyond the scope of this book. The book is not aimed at QlikView Server administrators.

Conventions

In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.

Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: "Before continuing, make sure a database file named Dimension Tables.mdb is in the Data Files\MDBs folder."

A block of code is set as follows:

LOAD `%Origin Airport ID`, `Origin Airport`; SQL SELECT `%Origin Airport ID`, `Origin Airport` FROM `Origin Airports`;

New terms and important words are shown in bold. Words that you see on the screen, for example, in menus or dialog boxes, appear in the text like this: "The example we will be using is the Movies Database, which is an example document that is supplied with QlikView."

Note

Warnings or important notes appear in a box like this.

Tip

Tips and tricks appear like this.

Reader feedback

Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.

To send us general feedback, simply e-mail <[email protected]>, and mention the book's title in the subject of your message.

If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.

Customer support

Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.

Downloading the example code

You can download the example code files for this book from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.

You can download the code files by following these steps:

Log in or register to our website using your e-mail address and password.Hover the mouse pointer on the SUPPORT tab at the top.Click on Code Downloads & Errata.Enter the name of the book in the Search box.Select the book for which you're looking to download the code files.Choose from the drop-down menu where you purchased this book from.Click on Code Download.

You can also download the code files by clicking on the Code Files button on the book's webpage at the Packt Publishing website. This page can be accessed by entering the book's name in the Search box. Please note that you need to be logged in to your Packt account.

Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:

WinRAR / 7-Zip for WindowsZipeg / iZip / UnRarX for Mac7-Zip / PeaZip for Linux

You can access http://www.qlikviewfordevelopers.com/codebundle/ to register and download the zip package with the data and example files used throughout this book. The code bundle for the book is also hosted on GitHub at https://github.com/PacktPublishing/QlikView-for-Developers. We also have other code bundles from our rich catalog of books and videos available at https://github.com/PacktPublishing/. Check them out!

Downloading the color images of this book

We also provide you with a PDF file that has color images of the screenshots/diagrams used in this book. The color images will help you better understand the changes in the output. You can download this file from https://www.packtpub.com/sites/default/files/downloads/QlikViewforDevelopers_ColorImages.pdf.

Errata

Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the Errata Submission Form link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.

To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.

Piracy

Piracy of copyrighted material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.

Please contact us at <[email protected]> with a link to the suspected pirated material.

We appreciate your help in protecting our authors and our ability to bring you valuable content.

Questions

If you have a problem with any aspect of this book, you can contact us at <[email protected]>, and we will do our best to address the problem.

Chapter 1. Meet QlikView

Congratulations on your decision to start learning QlikView development! You are now well on your way to building and delivering analytical applications that will help you and your organization quickly gain new insights and make fact-based decisions.

Before we dive in and start building all sorts of wonderful things, we first need to review some of the basics. This first chapter introduces us to the business end of QlikView. We will discover what QlikView is, how it's different from other tools, and how we can explore and interact with our data within a QlikView document. Of course, this being a technical book, we will also be looking at the various technical components that QlikView consists of. This chapter concludes with an introduction to HighCloud Airlines, the practical case we will be working on throughout the book in the form of hands-on exercises.

In this chapter, specifically, we will look at:

What is QlikView?Exploring data with QlikViewThe technology and components behind QlikViewHighCloud Airlines and why QlikView might be just the tool they need

First, let's look at what QlikView is, what we can do with it, and how it differs from other solutions that are available on the market.

What is QlikView?

QlikView is part of the product portfolio developed by Qlik, a company formerly known as QlikTech that was founded in Sweden in 1993 and is currently headquartered in the US. QlikView is a tool used for Business Intelligence (BI). BI is defined by Gartner, a leading industry analyst firm, as:

An umbrella term that includes the application, infrastructure and tools, and best practices that enable access to and analysis of information to improve and optimize decisions and performance.

Following this definition, QlikView is a tool that provides access to information and enables its exploration and analysis via a user-friendly interface, which in turn improves and optimizes business decisions and performance.

Historically, BI has been very much IT-driven. IT departments were responsible for the entire BI life cycle, from extracting the data to delivering the final reports, analyses, and dashboards. While this model works very well for delivering predefined static reports, most businesses find that it does not meet the needs of their business users. As IT tightly controls the data and tools, users often experience long lead-times whenever new questions arise that cannot be answered with the standard reports.

How does QlikView differ from traditional BI?

Qlik prides itself in pioneering an approach to BI that is different from the way other BI tools have been traditionally developed and implemented, essentially introducing a new paradigm to the BI industry which, in time, other vendors followed. With QlikView and the rest of Qlik's product portfolio, Qlik aims to put the tools in the hands of business users, allowing them to become self-sufficient and less dependent on IT to perform their own analyses.

Independent industry analyst firms have noticed this new paradigm as well. In 2011, Gartner created a subcategory for data discovery tools in its yearly market evaluation, the Magic Quadrant for Business Intelligence and Analytics Platforms. QlikView was named the poster child for this new category of BI tools. Over subsequent years, the market experimented a steady shift of focus from IT-led reporting to business-led self-service analytics. Gartner identified 2016 as the year the tipping point had been passed and redefined the vendor landscape on its Magic Quadrant based on this new perspective.

Besides the difference in who uses the tool—IT users versus business users—there are a few other key features that differentiate QlikView from other solutions.

Associative user experience

The main difference between QlikView and other BI solutions is the associative user experience. Where traditional BI solutions use predefined paths to navigate and explore data, QlikView's associative architecture allows users to take whatever route they want. This is a far more intuitive way to explore data. Qlik describes this as working the way your mind works.

An example is shown in the following diagram. While, in a typical BI solution, we would need to start by selecting a Region and then drill down step-by-step through the defined drill path, in QlikView we can choose whatever entry point we like—Region, State, Product, or Sales Person. We are then shown only the data related to that selection, and in our next selection we can go wherever we want. It is infinitely flexible.

Additionally, the QlikView user interface allows us to see which data is associated with our selection.

For example, the following screenshot shows a QlikView dashboard in which two values are selected. In the Quarter field, Q3 is selected and in the Sales Reps field, Cart Lynch is selected. We can see this because these values are green, which in QlikView means that they have been selected. When a selection is made, the interface automatically updates to not only show which data is associated with that selection, but also which data is not associated with the selection. Associated data has a white background, while non-associated data has a gray background. Sometimes the associations can be pretty obvious; it is no surprise that the third quarter is associated with the months July, August, and September. However, at other times, some not-so-obvious insights surface, such as the information that Cart Lynch has not sold any products in Germany or Spain. This extra information, not featured in traditional BI tools, can be of great value, as it offers a new starting point for investigation.

Technology

QlikView's core technological differentiators are:

It uses an in-memory data modelIt uses an associative architecture

The fact that it uses an in-memory data model means it stores all of its data in RAM instead of using disk. As RAM is much faster than disk, this allows for very fast response times, resulting in a very smooth user experience.

The associative architecture is what makes the associative user experience, discussed in the previous section, possible. It associates every single data point in the data model with every other data point at all times throughout the entire analysis process.

Because the associative engine is built entirely in memory, every association with every data point is processed dynamically with every click.

In a later part of this chapter, we will go a bit deeper into the technology behind QlikView.

Adoption path

There is also a difference between QlikView and traditional BI solutions in the way it is typically rolled out within a company. Where traditional BI suites are often implemented top-down—by IT selecting a BI tool for the entire company—QlikView often takes a bottom-up adoption path. Business users in a single department adopt it and its use spreads out from there.

Note

QlikView is free of charge for single-user use. This is called the Personal Edition (PE). Documents created in PE can be opened by fully-licensed users or deployed on a QlikView server. The limitation is that, with the exception of some documents enabled for PE by Qlik, you cannot open documents created elsewhere, or even your own documents if they have been opened and saved by another user or server instance

Often, a business user will decide to download QlikView to see if he can solve a business problem. When other users within the department see the software, they get enthusiastic about it, so they too download a copy. To be able to share documents, they decide to purchase a few licenses for the department. Then other departments start to take notice too, and QlikView gains traction within the organization. Before long, IT and senior management also take notice, eventually leading to enterprise-wide adoption of QlikView.

QlikView facilitates every step in this process, scaling from single laptop deployments to full enterprise-wide deployments with thousands of users. The following diagram demonstrates this growth within an organization:

As the popularity and track record of QlikView have grown, it has gotten more and more visibility at the enterprise level. While the adoption path described before is still probably the most common adoption path, it is not uncommon nowadays for a company to do a top-down, company-wide rollout of QlikView.

Exploring data with QlikView

Now that we know what QlikView is and how it is different from traditional BI offerings, we will learn how we can explore data within QlikView.

Getting QlikView

Of course, before we can start exploring, we need to install QlikView. You can download QlikView's Personal Edition from http://www.qlik.com/us/download. You will be asked to register on the website, or log in if you have registered before.

Note

Registering not only gives you access to the QlikView software, but you can also use it to read and post on the Qlik Community (http://community.qlik.com), which is the Qlik's user forum. This forum is very active and many questions can be answered by either a quick search or by posting a question.

Installing QlikView is very straightforward, simply double-click on the executable file and accept all default options offered. After you are done installing it, launch the QlikView application. QlikView will open with the start page set to the Getting Started tab, as seen in the following screenshot:

The example we will be using is the Movies Database, which is an example document that is supplied with QlikView. Find this document by scrolling down the Examples list (it is the second one on the list) and click to open it. The opening screen of the document will now be displayed:

Navigating the document

Most QlikView documents are organized into multiple sheets. These sheets often display different viewpoints on the same data, or display the same information aggregated to suit the needs of different types of users. An example of the first type of grouping might be a customer or marketing view of the data, while an example of the second type of grouping might be a KPI dashboard for executives, with a more in-depth sheet for analysts.

Navigating the different sheets in a QlikView document is typically done by using the tabs at the top of the sheet, as shown in the following screenshot. More sophisticated designs may opt to hide the tab row and use buttons to switch between the different sheets.

The tabs in the Movie Database document also follow a logical order. An introduction is shown on the Intro tab, followed by a demonstration of the key concept of QlikView on the How QlikView works tab. After the contrast with Traditional OLAP is shown, the associative QlikView Model is introduced. The last two tabs shown in the following screenshot show how this can be leveraged by showing a concrete Dashboard and Analysis:

Slicing and dicing your data

As we saw when we learned about the associative user experience, any selections made in QlikView are automatically applied to the entire data model. As we will see in the next section, slicing and dicing your data really is as easy as clicking and viewing!

Listboxes

But where should we click? QlikView lets us select data in a number of ways. A common method is to select a value from a listbox. This is done by clicking in the listbox.

Let's switch to the How QlikView works tab to see how this works. We can do this by either clicking on the How QlikView works tab on the top of the sheet or by clicking on the Get Started button.

The selected tab shows two listboxes, one containing Fruits and the other containing Colors. When we select Apple in the Fruits listbox, the screen automatically updates to show the associated data in the Colors listbox: Green and Red. The color Yellow is shown with a gray background to indicate that it is not associated, as seen in the following screenshot, since there are no yellow apples. To select multiple values, all we need to do is hold down Ctrl key while we are making our selection, as shown in the following screenshot:

Selections in charts

Besides selections in listboxes, we can also directly select data in charts. Let's jump to the Dashboard tab and see how this is done. The Dashboard tab contains a chart labeled Number of Movies, which lists the number of movies by a particular actor. If we wish to select only the top three actors, we can simply drag the pointer to select them in the chart, instead of selecting them from a listbox, as shown in the following screenshot:

Because the selection automatically cascades to the rest of the model, this also results in the Actor listbox being updated to reflect the new selection, as shown in the following screenshot:

Of course, if we want to select only a single value in a chart, we don't necessarily need to lasso it. Instead, we can just click on the data point to select it. For example, clicking on James Stewart leads to only that actor being selected.

Search

While listboxes and lassoing are both very convenient ways of selecting data, sometimes we may not want to scroll down a big list looking for a value that may or may not be there. This is where the search option comes in handy.

For example, we may want to run a search for the actor Al Pacino. To do this, we first activate the corresponding listbox by clicking on it. Next, we simply start typing and the listbox will automatically be updated to show all values that match the search string. When we've found the actor we're looking for, Al Pacino in this case, we can click on that value to select it, or simply hit Enter, as shown in the following screenshot:

Sometimes, we may want to select data based on associated values. For example, we may want to select all of the actors that starred in the movie The Godfather. While we could just use the Title listbox, there is also another option: associated search.

To use associated search, we click on the chevron on the right-hand side of the search box. This expands the search box and any search term we enter will not only be checked against the Actor listbox, but also against the contents of the entire data model. When we type in The Godfather, the search box will show that there is a movie with that title, as seen in the following screenshot. If we select that movie and click on Return, all actors that star in the movie will be selected, as shown in the following screenshot:

Bookmarking selections

Inevitably, when exploring data in QlikView, there comes a point where we want to save our current selections to be able to return to them later. This is facilitated by the bookmark option. Bookmarks are used to store a selection for later retrieval.

Creating a new bookmark

To create a new bookmark, we need to open the Add Bookmark dialog. This is done by either pressing Ctrl + B or by selecting Bookmarks | Add Bookmark... from the menu.

In the Add Bookmark dialog, seen in the following screenshot, we can add a descriptive name for the bookmark. Other options allow us to change how the selection is applied (as either a new selection or on top of the existing selection) and if the view should switch to the sheet that was open at the time of creating the bookmark. The Info Text allows for a longer description to be entered that can be shown in a pop-up when the bookmark is selected.

Retrieving a bookmark

We can retrieve a bookmark by selecting it from the Bookmarks menu, seen here:

Undoing selections

Fortunately, if we end up making a wrong selection, QlikView is very forgiving. Using the Clear, Back, and Forward buttons in the toolbar, we can easily clear the entire selection, go back to what we had in our previous selections, or go forward again. Just like in our internet browser, the Back button in QlikView can take us back multiple steps, as shown in the following screenshot:

Changing the view

Besides filtering data, QlikView also lets us change the information being displayed. We'll see how this is done in the following sections.

Cyclic groups

Cyclic groups are defined by developers as a list of dimensions that can be switched between users. On the frontend, they are indicated with a circular arrow. For an example of how this works, let's look at the Ratio to Total chart, seen in the following screenshot. By default, this chart shows movies grouped by duration. If we click on the little downward arrow next to the circular arrow, we will see a list of alternative groupings. Click on Decade to switch to the view to movies grouped by decade.

Drill down groups

Drill down groups are defined by the developer as a hierarchical list of dimensions that allows users to drill down to more detailed levels of the data. For example, a very common drill down path is year > quarter > month > day. On the frontend, drill down groups are indicated with an upward arrow.

In the Movies Database document, a drill down can be found on the tab labeled Traditional OLAP. Let's go there.

This drill down follows the path Director > Title > Actor. Click on the A. Edward Sutherland to drill down to all movies that he directed, shown in the following screenshot. Next, click on Every Day's A Holiday to see which actors starred in that movie. When drilling down, we can always go back to the previous level by clicking on the upward arrow, located at the top of the listbox in this example.

Containers

Containers are used to alternate between the display of different objects in the same screen space. We can select the individual objects by selecting the corresponding tab within the container. Our Movies Database example includes a container on the Analysis sheet.

The container contains two objects, a chart showing Average length of Movies over time and a table showing the Movie List, shown in the following screenshot. The table is shown by default and you can switch to the Average length of Movies over time by clicking on the corresponding tab at the top of the object.

But wait, there's more!

After all of the slicing, dicing, drilling, and view-switching we've done, there is still one question on our minds: how can we export our selected data to Excel? Fortunately, QlikView is very flexible when it comes to this; we can simply right-click on any object and choose Send to Excel, or, if it has been enabled by the developer, we can click on the XL icon in an object's header, as shown in the following screenshot:

Click on the XL icon in the Movie List table to export the list of currently selected movies to Excel.

Note

A word of warning when exporting data

When viewing tables with a large number of rows, QlikView is very good at only rendering those rows that are presently visible on the screen. When Send values to Excel is selected, all values must be pulled down into an Excel file. For large datasets, this can take a considerable amount of time and may cause QlikView to become unresponsive while it provides the data.

The technology and components behind QlikView

Now that we have seen how QlikView works from the point of view of a business user, it is time to get a little more technical. Let's take an in-depth look at the various components that QlikView consists of.

One of the key elements of QlikView is that it utilizes an in-memory database. Compared with a disk-based database, this offers a great advantage when it comes to performance. While disk-access time is measured in milliseconds, RAM access time is measured in nanoseconds, making it many orders of magnitude faster.

But hold on... you may say, "my hard-disk has much more space than I have RAM in my PC; won't that mean that I can only load limited amounts of data into memory?"

This is a very valid question. Fortunately, there are two factors which counter this potential problem:

Cheap memory and the advancement of 64-bit processors and operating systems: While 1 MB of memory, in 1957, would have cost a staggering US $411 million, nowadays, a gigabyte can be had for less than US $5. Coupled with 64-bit operating systems, which can address much larger amounts of RAM than 32-bit systems (up to 4 TB on Windows 2012, and up to 24 TB on Windows 2016), it is feasible and (relatively) affordable to load huge amounts of data into RAM.Clever compression: QlikView utilizes some sophisticated compression algorithms (and some common sense, such as de-duplicating data) to significantly reduce the amount of memory that is required to store data. Typically, on-disk data is compressed to 10 percent of its original size when it is loaded into QlikView.

These two factors make it possible to create QlikView applications that contain hundreds of millions—even billions—of records.

The way the data flows

While the in-memory database is excellent technology, it cannot function on its own. Functionally, data flows through QlikView in the following manner:

It starts with the source data. QlikView can load data from a large variety of sources, including ODBC, OLEDB, flat files (Excel, CSV, and so on), XML, and REST interfaces (for extracting data from web-based APIs). There are also many different connectors, ranging from big enterprise applications such as SAP to social networks such as Twitter.The data is loaded into QlikView using a load script. This script can be used to extract, transform, and load data into the in-memory data model or to store it to the disk in intermediary data files called QVD files.Data in the in-memory database is stored in an unaggregated format, meaning all aggregations are calculated on the fly. This simplifies data modeling in QlikView, as there is no need for separate aggregation tables.Selections made by the user automatically cascade throughout the entire data model and these changes are shown by QlikView's presentation engine.QlikView applications can be presented in multiple clients. The Windows application we used earlier is an example of a client; other similar examples will be covered in the next section.

When QlikView use expands

While QlikView deployments within an organization often start with a single (or few) local installations, they often do not stay that way. As the use of QlikView expands, keeping track of different versions, dealing with huge amounts of data, reloading and distributing applications, and making sure that only the right people have access to applications becomes increasingly hard when using only the Windows client.

Fortunately, Qlik offers a large range of components that ensure that QlikView can scale from a local deployment on a laptop all the way to an enterprise-wide solution. These components can be classified into three classes:

Create contentReload, publish, and distribute contentConsume content

It is also shown in the following screenshot:

Create content

The Windows application we used earlier to navigate and analyze the data in Movies Database cannot only be used to consume content, but it is also the main tool with which to create QlikView documents. As this book is focused on developers, this will be the main focus for the remaining chapters.

Reload, publish, and distribute content

When QlikView deployments expand, it becomes impractical to update and distribute files manually. Also, data is loaded into RAM when using a local Windows application to open QlikView files. When working with huge amounts of data, each PC would also need a huge amount of RAM. This might work for developer PCs, but it is hardly a cost-effective solution to outfit each user in the organization with large amounts of RAM.

Fortunately, QlikView has three components to mitigate these potential roadblocks to broader adoption:

QlikView Publisher: This component can take care of reloading, reducing, and distributing the QlikView documents. Jobs can be scheduled or triggered by external events. When QlikView Publisher has not been licensed, QlikView Server can handle the task of reloading QlikView documents.QlikView Server: This is a centralized server which can load QlikView documents into memory and allows clients to interact with these documents remotely by using one of the QlikView clients. In addition to providing a central place where documents are stored, this also has the advantage of clients not needing huge amounts of RAM and CPU cores. The clients do not need to load all of the data locally and the processing power of the server is used for calculating and aggregating data.QlikView Access Point: This is a portal through which users can access their documents

Consume content

QlikView documents can be consumed in multiple ways. While this book mainly focuses on the QlikView desktop Windows application, it is interesting to take note of the other possibilities for deployment:

Web browser (IE plugin or AJAX client): When accessing a QlikView document through the web browser, the AJAX client is a safe option as it offers great flexibility as it does not require any software to be installed and works with most modern browsers. The second option is the Internet Explorer plugin. As its name implies, it is a plugin (ActiveX object) made to be used with Microsoft's Internet Explorer. While this plugin offers an experience that is closest to the native Windows application, it only works in Internet Explorer and requires the QlikView plugin software to be installed on each client PC.iPad and other tablets: Tablets can access QlikView by using the AJAX client in their browser. The AJAX client automatically detects when a tablet is being used and switches to a touch-enabled interface. This makes it possible to develop a single QlikView document which can then be rolled out to both regular computers and mobile devices.iPhone, Android, and other smartphones: Mobile devices with a smaller screen, such as most smartphones, can use a special version of the AJAX client: the small device version. Instead of displaying complete worksheets, which would be unreadable on a small screen, this client shows each of the objects (chart, table, and so on) one by one.QlikView Workbench: Using QlikView Workbench, objects from QlikView documents can be embedded within .NET-based web solutions

When going through this list of clients, you probably noticed that the AJAX client is the most versatile of all clients. While it hasn't always been that way, nowadays, the visual and functional differences between the AJAX client and the ActiveX client are small enough for the AJAX client to be considered the preferred client for the consumption of QlikView documents by users.

Meet HighCloud Airlines

It's a typical Monday morning at the office. Sara, an executive at HighCloud Airlines, arrives early to begin a busy week. Work has been hectic lately.

Ever since the start of the Euro crisis, the market for air travel and cargo in HighCloud's home market in Europe has been steadily declining. As a result, HighCloud's financial results have also been sloping downward.

A few weeks ago, in an effort to turn the company around, Steve, the CEO, launched an initiative to investigate the company's expansion into other markets. Sara and her team have been tasked with investigating the US airline market. It's a project that, if done well, might really raise the profile of Sara and the team.

Unfortunately, data from many different sources, complicated query tools, and dozens of spreadsheets have made progress slow so far. Even worse, each presentation of preliminary results has triggered a wave of new questions that cannot be answered by the existing reports and analyses. Morale within the team has been steadily dropping and Sara has noticed that Steve is increasingly annoyed by the lack of results.