Sie sind auf Seite 1von 131

1.ODBC AND OLEDB differences.

ODBC(1992):
ODBC drivers can access SQL based data sources like(MS-SQL,MSMYSQL,Oracle).
OLEDB(1996):
OLEDB drivers uses ODBC drivers to access SQL based data sources (Relational
databases) .
OLEDB drivers can access NON-SQL based data sources like(Directory services,
XML files, MS-EXCHANGE server).
ADO(1996).
ADOC applications can access any data sources through OLEDB.
2) Issues while loading through ODBC.
Connection error
Missing data while loading,
Lock tables,
Bug 47189,
ODBC read failed.
QVX_PIPE_ERROR,
Reload failed.
Not able to connect to the oracle provider for OLEDB..
Error while fetching tables through ODBC connection.
4. difference between qlikview 10 and 11
1) QMC and QEMC are taken as one QMC.

2)Comparitive analysis.

3)Expand QlikView usage to additional devices, including smartphones, with


mobile Business Discovery.

4)Granuler chart is introduced in Qv11.

5)Dimension Limits tab also included.

6) QlikView 11 introduces important changes to the QlikView Publisher


component.
7) AccessPoint Redesign Helps IT Better Support Business Users.
8)Container object enhancements
9) Conditional enabling of dimensions and expressions improves the user
experience.
10) Annotations improve context and establish a record of how decisions were
made.

The main differences from an application development perspective are...

Alternate States. This allows users to answer queries such as How do sales of
products A,B,C compare to X,Y,Z.

Dimension Limits. This makes charts showing Top N, or sales above or below a
value easier to create.

Conditional expressions. Expressions can now be enabled or hidden easily.

There are examples of these in the What's New in QlikView 11 example document,

5) differebce between list box and multibox.


In list box we can select single field.
In multi box we can select multiple fields .
And it reduces size expanding in runtime.
6) What is QVD?
QVW: is called Qlikview Working file: it contains data as well as the UI.

QVD: Qvd is Qlikview Data file. it contains qlikview readable data. data extraction
from qvd is very fast as compare to other sources that is why we try to save our
data in qvd format

QVX: called qlikview extension file which is used for 3rd party integration. it
contains data which can be used by the 3rd part tools.

10 to 100 times fast to generating reports.

Analysis part 80% and reporting 20%.

It reduces burden on database.

It reducing network traffic.

Implementation of incremental load.


7.What Is optimized QVD load?
Optimized load is much faster and therefore preferable, especially for larger data
sets.

Optimized loads are possible if no transformations (calculations) are made during


the load, and no (almost) filtering is done in a WHERE clause.

The only acceptable filter is using function Exists:

WHERE Exists(Field)

So for example this load can't be optimized:

Load * From ... WHERE Country = 'US'

but this load can:

Load * From ... WHERE EXISTS(Country)


================================
On the other hand, the only time you want the load not to be optimized, is if you
load a Mapping table from a QVD file. In this case, Optimized load doesn't quite
work, so you want to make the load non-optimized deliberately.

8) Synthetic Key ? Various ways to remove it..


When two or more than one field is associated between tables then synthtic key
and table is formed .
it is better to avoid it
various ways we can avoid it.
1)renaming the fields
2) commenting the filelds.
3)joining
4)concatenate
5)complex keys
6)link table find attached ppt will be helpful to you.

if more than one column linked between two tables its create sythetic key.

and you remove it using qualify/unqualify.


qualify all the fields
and unqulify the key field.
synthetic key creates synthetic tables in Contol +T(table viewer)
sythetic table tells you how many fields creates synthic key

9) 3 tier architecture?
Data Source

- 1 Tier

Data model

- 2 Tier

Qvd

- 3 Tier

Binary Load - 4 Tier

In First Tier:
Data is loaded from the Database and stored in QVDs.

In Second Tier:
Data is loaded from QVDs and tranform the data based on business needs.

In Third Tier:
Using the Binary load the Qlikview file created in Tier II is loaded in to the
Qlikview file and all chart objects are created in this Tier.

12) What is CALs.

All users need license from the QlikView Server to access or open a
document/qvw. This license is referred as CALs i.e. Client Access License.
This license is required when user or developer access qvw in QlikView desktop or
through Access point url.
CALs are acquired with the purchase of the QlikView Server and therefore are
server based not client based.Since CALs come with the server, they are specific to
the Server.
CALs types Following types of CALs are available in QlikView
1. Named User CAL
2. Document CAL
3. Session CAL
4. Usage CAL
Named User CAL
Named user CAL is specific to the user or the machine. It cannot be shared, but
user with this type of license can access any number of documents and for
unlimited duration. This type of license is best suited for the developers and
designers, creating the dashboard or dedicated users who need 24 * 7 access to the
dashboarding application.

Document CAL
Document CAL associates user to the document instead of the QlikView Server. It
allows user to access only one QlikView document.This type of license is good for
the users who are interested in only one specific document.
Session CAL
Session CAL is not tied to a specific user or a machine. Session CALs allows a
single user to access multiple document. Session CALs are used in a setup when
there are large number of non-frequent users. Users can use the license as long as it
is available. A Session CAL is locked for a minimum of 15 minutes, when used. If
a specific user is not accessing a document for over 15 minutes then this CAL is
available and can be used by other users.
Usage CAL
A Usage CAL gives a user the ability to initiate one session i.e. accessing one
document per running 28-day period.This license is also not tied to a specific user.
Usage CAL and Session CAL can be used in combination.
Leasing of QlikView License
QlikView developer/user can lease a license from the server so that the user can
work offline for a period of 30 days. The QlikView client once connected to the
server will obtain a Named User CAL. A user can lease a license from the Server
by opening a qvw on the server from QlikView desktop.

13) How to assign call?

To assign Named CALs go to the QlikView Enterprise Management Console,


System tab, "Licenses" menu, click on QlikView Server and on the right pane
select "Client Access Licenses (CALs)" tab, Assigned. There you can specify in the
form DOMAIN\USERNAME the users in your domain you want to have a Named
CAL assigned to them.

To assign a Document CAL, go to the QEMC, Documents, click on the document


you want the users to access, and on the right part you will see a tab "Document
CALs". Likewise add your users in the form DOMAIN\USERNAME

Make sure you do not delete or rename files before removing the license
assignments, or you may lose them. Note that in case you missed the username in
favor of another username, you will have to wait 24 hours before change the
assignment to the correct user.

15) what is incremetal load .

Large transactional tables can be significantly time consuming in a reload. Taking


advantage of Qlikviews incremental load logic can reduce that time considerably.
An incremental load is a process of simply appending new records or updating
specific records in an existing QVD. There are three key scripting options available
for incremental loads.

Insert Only

Insert & Update

Insert, Update, & Delete


For a detailed review of QVDs and the concept of incremental loads, please review
the following article

18) Alternate states

an Alternate state holds a set of selections.


selections in an alternate state will not affect the selections in other states.

so we can create two or more alternate states with different selections for same
data.

It is useful for creating Comparative Analysis.

we can create alternate states in Settings menu - Document propeties - general tab alternate states button.

19) Peek And Previous Functions?

"..the Peek() function allows the user to look into a field that was not previously
loaded into the script whereas the Previous() function can only look into a
previously loaded field."

Previous from Help:


The previous function may be nested in order to access records further back. Data
are fetched directly from the input source, making it possible to refer also to
fields which have not been loaded into QlikView, i.e. even if they have not
been stored in its associative database.

You can easily demonstrate this with a Where clause:

LOAD F1, F2, Peek(F1) as PeekVal, Previous(F2) as PrevVal Where F2 >= 200;
LOAD * INLINE [
F1, F2
A, 100
B, 200
C, 150
D, 320
];

is to work on input data(sourse) is similar to recno in DB

peek is output data(data is not loaded into the script).is similar to row no in db.

20) Aggr()
Aggr() function is a very powerful function in QlikView.
It comes under advanced Aggregation and provides great flexiblity to the developer
and user.
What is Aggr( )
1. Let you perform Aggregation over a set of dimensions
2. It creates kind of a temp table of results from which you can select and perform
more aggregations

3. Can be used with expressions and dimensions


4.Result of Aggr can be used in other aggregated functions
5. Similar to Group By clause in SQL
6. Similar to chart expression based on different chart dimensions
Understanding Aggr()
1. let us find out the Cost per product per customer in a given month.
We will create this using normal aggregation in a chart with Dimensions as
Month,CustomerName and Product with expression as Sum(Cost). We will also
create this using Aggr(). Both will give same output
Aggr() expression will look like
Aggr(Sum(Cost),Month,CustomerName,ProductName)

Normal aggregation Sum(Cost) and Advanced Aggr() produce same results.


This is also similar to SQL statement
Select Month,CustomerName,ProductName, Sum(Cost) from myTable
Group By Month,CustomerName,ProductName;
2. To understand more of Aggr(), let us find out Cost of a product for each
customer and month and also the maximum Cost for any Customer for the same
product and month. In this query, we are discarding Customer dimension to get
Maximum cost by Month and Product.
To achieve the above results, we need to first calculate Cost per month,per
customer and product and then from this result get the Maximum cost per month
and product.
First we will calculate Aggr(Sum(Cost),Month,CustomerName,ProductName)
which is similar to the above output
then we will get the Maximum of this result i.e.
Max(Aggr(Sum(Cost),Month,CustomerName,ProductName))

This calculation will not change the result as Max is also calculating within the
dimension of the charti.e. for Month,Customer and Product but for our
requirement we need to calculate Maximum Cost per month and Product
For this we will use Total qualifier with Max.Total qualifier will disregard any or
all chart dimension. Since we have to just disregard Customer dimension, we will
explicitly state which dimensions we want to include with the Total aggregation.
To include Month and ProductName and disregard Customer, our expression will
be
Max(Total<Month,ProductName>
Aggr(Sum(Cost),Month,CustomerName,ProductName))
Total<Month,ProductName> will make sure that in the calculation of Max,
Month and ProductName dimensions are included.
Our Output will look like

Summary :
From the above examples, we can see that
- Aggr() function is similar to Group by function in Sql.
- It is also similar to applying aggregation in a chart with set of dimensions.
- The power of Aggr() lies in the fact that it provides a temp table from which you
can select the results and apply further aggregation to arrive at meaningful results.
- In the absence of Aggr you may need to write complex scripts or sql queries to
achieve similar results.

24) RecNo() RowNo()

Do you know the difference between the RecNo() and the RowNo() functions?
You may think that you can use these interchangeably to count the records or rows
in a table but these functions differ slightly. The RecNo() function will return an
integer for the record currently being read from the source table starting with
number one. The RowNo() function also returns an integer but it represents the
position of the row in the resulting QlikView internal table. So while RecNo()
counts from the source table, RowNo() counts from the resulting table.

In the script below the fields from the Temp table are loaded along with fields to
represent the RecNo and the RowNo. A Where clause is used to load all records
where Number does not equal 3.

The resulting table below shows the results of this script. In the RecNo field we
see values 1 through 10 excluding 3. This is because the script excluded records
where Number = 3 so while that record was read, it was excluded from the results.
In the RowNo field we see values 1 through 9 for the position of each row in the
results table. The fact that some rows were excluded does not affect the RowNo
field because we are only looking at the internal table that is created. The RecNo

field indicated the order in which the records were read from the source table and
the RowNo field indicates the positon of the record in the internal table.

To see an example, check out my technical brief that includes the QVW and
detailed descriptions of these functions. In the technical brief, I also discuss the
IterNo() function and the FieldValueCount() functions.

25) Interval Match.

The Interval Match is one of the functions in QlikView that can be used to match a
numeric value in a single table, such as date, timestamp, score, percent or any
number, to an interval or duration in a second table. The IntervalMatch function
discreet data to one or more dimensions that are changing over time. It can be us
for resolving slowly changeing dimensions by linking the specific key fields to the
appropriate numeric intervals. It can be used with LOAD, Inline and SQL select
statements.
Note

A major and important point is that when we apply the IntervalMatch function to
tables, it is necessary that the tables have numeric values.
Advantage
There are given many advantages of the IntervalMatch function.
Save time: It saves the time of the QlikView application because joins are
not used with the IntervalMatch function.
Save memory: It saves the memory of the QlikView application because it
avoids loading all the possible numeric values into a fact table.
It avoids the case statements concepts
26) Link Table ? How to Use that?
Link tables are generally used for linking the two table or the fact tables.
Let us go with an example..
As we know that when we are designing the datamodel synthetic keys and circular
loop are common.
For fixing this problems we use the link table concept.
You can also use concatenation ,but it always not give the appropiate result.
Concatenation works well enough when we have all the fields same.

With the use of link tables, its possible to keep the facttables separated from each
other. The advantage of this solution for choosing this method is to keep the
datamodel a logical one.

27) Extension Objects?

1. With extensions you can create custom charts written in javascript, flash or vb.
Once integrated this visualizations can take advantage of QV's capabilities.
2. The .qar files can be used by double clicking them, by doing this you will install
them and be able to see them while in web view.

3. The .qar file is like a Qlikview zip that has all of the information needed to
display the extension (script, definition, icon, properties and/or external files)
4. If you go to the qlikview page, click on find training and search for extensions,
there's very helpful information there.

28) Why to delete Temporary table?(Eg.Resident table)


we can use drop option to delete temporary tables why because to save memory.
29) What is total qualifier?
Suppose you have the following data

Year, Sales
2013, 200
2012, 100

Suppose if you use Year as Dimension and

If you use Sum(Sales) in expression then for


2013 - Sales = 200
2012 - Sales = 100

If you use Sum(TOTAL Sales) in expression then for

2013 - Sales = 300


2012 - Sales = 300

If you use TOTAL it ignores the expression, so in every row you will get the
overall total.

TOTAL is a useful qualifier that can be added to an aggregation function (such as


Sum, Count, and Avg) to tell QlikView to ignore the dimensions of a chart in the
calculation. By default, it ignores all the dimensions, but we can be more specific
and tell it to ignore some while respecting others.

For this we will use Total qualifier with Max.Total qualifier will disregard any or
all chart dimension. Since we have to just disregard Customer dimension, we will
explicitly state which dimensions we want to include with the Total aggregation.
To include Month and ProductName and disregard Customer, our expression will
be
Max(Total<Month,ProductName>
Aggr(Sum(Cost),Month,CustomerName,ProductName))
Total<Month,ProductName> will make sure that in the calculation of Max,
Month and ProductName dimensions are included.
Our Output will look like

30) Use of variable


Variables in QlikView
are very useful in data transformations and Calculations.
Variables can be defined by SET and LET statements.
Variables can be defined in script editor or by going into menu -> settings/variable
overview.
Set and Let
The Set statement is used for defining Script variables
e.g. Set vMinDate = 10/31/2008 ;
Set vMaxdate = 12/31/2020 ;
The Let statement evaluates the expression on the right side of = and assigns it to
the variable on the left side of =
Let vToday = Today();
After you run your script, you can see all your defined variables, under menu
Settings/variable Overview. New Variables can also be defined here.

Some uses of Variables


Variables are used when you want to perform a calculation once and use it in
multiple charts.Variables are also used when you want to perform calculations
dynamically.
Create a variable, assign it to a calculation. To create variable go to menu
settings/Variable overview. Click on Add.

Use variable in the chart calculation

Use variable in Set Analysis.


Create a variable vCategory as vCategory = Category in a similar fashion as
vFreight is defined above.
Now use this variable in Set Analysis expression. CategoryName will be replaced
based on the user selection

Tip : Expressions in Variables can be defined by prefixing with = sign or without =


sign. When variable expression is prefixed with = sign, for example, vTotalFreight
= Sum(Freight) then this variable caculation will be performed globally i.e. for
entire data set. If used in charts,all dimensions will be ignored and it will return the
same values.
If you want your calculation to align with the dimensions of the chart or selections
then use variable expression without = prefix.
Variables provide lot of flexibility when you have to do calculations dynamically.
You can also use Variables to set your global variables at document level. Like
setting the path of your qvd files or include files etc.

31) Input Box(OBJECt)

The values entered in the input box are usually assigned to variables and qlikview
saves only the information about server objects, and not the data itself, in the
.shared files .

Safest approach is to save the input values into a external file, reinitialize the input
fields and load the saved values.

Input Field populating with random data

33) Project Process(SDLC)

QlikView Development LifeCycle


Organizations may follow different development lifecycle depending on the
organizations requirements,size and development methodology but most of the
organizations utilising QlikView may follow a similar development style.
I am writing this blog to give novice developers an idea on how QlikView
environments work.

QlikView development Life Cycle involve :


- Interacting with Business Analysts and Business users to understand the
dashboarding,reporting and BI requirements
- Developer working with the users will create a mockup of the dashboard to show
the users how the data will be presented on the screen. Also discussions should
take place on the type of device(Laptop,Desktop,Ipad etc.) and screen resolution
where this dashboard will be displayed
- After finalizing the requirements, developer will analyze the datasource to get
more info on the data elements required to fulfill users requirements. DataSource
can be relational database,data warehouse schemas ,excel files or text
files. QlikView can source data from any other kind of data sources like
SalesForce.com,Google analytics or SAP
- After the data source and data elements are identified, developer will create a
datamodel and visualizations using QlikView Desktop.To create robust and
optimized datamodel, developer may create n-tier QVD architecture. Datamodel
should be created by following best practices recommended by QlikTech
- Visualizations should be created by following visualization best practices. While
creating visualizations, focus should be on the data. Any object which does not
provide insights into data should not be present in the dashboard
- During the course of development,developer should work closely with the users
to take care of any changes or expectations
- After application is developed, it should go through a certification process.
Certification process is a review process of the application to see if the dashboard
follows best practices
Things to know in Deployment
Once QlikView dataload and visualizations are created , they should be deployed
on the server. These QVWs will be executed on the server so that user can view
dashboards/visualizations onaccess point.

Access Point is a web portal and the single point of entry for Business users. It
presents a list of QlikView documents to the users according to their authorization
and access rights.
In deployment 2 folders/documents are of significance Source document/Folder
and User document/Folder
Source document/folder contains the Source document/QVWs supplied by the
developer
User document/folder After a distribution tasks executes on QVW in Source
document folder, it gets transformed to User document and gets stored into User
document folder. A document can be simple reduced or can split up into several
small documents by using reduce or loop and reduce settings.User document is a
document which user sees when accessing a document through access point.
Deployment Steps
- Once the QVWs are created, developer will copy it into the Source document
folder. Source document will be a physical windows folder
- QlikView Management Console (QMC) is used to get access to the QlikView
Server and Publisher components
- Developer or any user (with access rights to server) will use QMC to access
QVWs in the Source document folder. QVWs will be given appropriate security
based on the security rules of the organization
- In QMC, data reload and distribution tasks will be created which will make sure
that data is loaded in the QVWs/QVDs and dashboard get distributed to the
appropriate users. These dataloads and distribution tasks can be scheduled
- Once distribution tasks is executed, the dashboards will arrive in the User
document folder. Users while accessing the dashboard on the access point will be
accessing the dashboards from the user document folder

(Or)
I'm not clear what you're asking for here. Just general words of advice for the
whole software development life cycle in QlikView?
Treat your QVDs as a data warehouse rather than making application-specific
loads. To the extent possible, PLAN how you want them to look and interact
rather than just letting them come together organically. Do NOT build everything
at once - only build what you need when you need it, but have a vision of where
you're headed in the long term.
Understand and work towards a reasonable overall system architecture from the
very beginning. A consultant might show up at your company and create a
working dashboard in only two hours, but don't base your entire architecture on a
two hour prototype, no matter how impressive.
As a developer, even if you don't understand what the users want, don't be afraid to
create and install a simple prototype. Putting something in front of the users, even
something wrong, is a great way to prompt user feedback. In my experience, I
usually get far better requirements from just installing a prototype than I get from
asking users directly about what they want. (Edit: To clarify, installing a prototype
is not a replacement for talking to the users. You still need to talk to them about
their needs.)
QlikView development is a highly iterative process, much more so than other
software development that I've done.
QlikView development is almost never done. The frequency of requests merely
diminishes over time as the application gets better and better.
Set analysis is NOT the solution to every problem. Yes, yes, I know you love set
analysis. It's a wonderful tool, and when you master that tool, you may find
yourself wanting to use it everywhere. Where you get into trouble is when you
start doing things with set analysis that can instead be done with the data model
itself. Data model solutions, where they are practical alternatives, are often faster
to execute, as well as allowing the charts in your application to be better integrated
with each other.

If complexity is required, put it in the script, not in the charts.


On the other hand, beware complicated data models and script. I violate this
principle all the time, but after a year or two, I often don't remember exactly what I
was doing and why, and find it more time consuming than it should be to make
changes. I can only imagine the pain of other developers trying to maintain my
script many years down the road. At the very least comment your code as clearly
as possible.
Never aggregate in script except as the very last resort. If you're aggregating in
script, you've lost the flexibility and power that QlikView provides for you.
However, you often CAN do things in script that will significantly speed up your
chart aggregations without actually aggregating. Consider carefully how you can
split responsibility for calculations between script and your charts.
Take the time to read a book or two on dashboard design, displaying quantitative
information visually, that sort of thing. Your job is not to IMPRESS your users
with your amazing artistic prowess, or even your mastery of all of QlikView's ins
and outs. Your job is to INFORM your users by providing the data they need as
clearly and obviously as possible. Simpler is usually better.

Our company has no intermediate database between QlikView and our ERP. The
QVDs basically serve this function for us. However, I suspect the best approach
depends on your environment. For us, we make sure we have well-written SQL
using appropriate indexes to read our live transactional data, which combined with
some hardware and licensing peculiarities results in very little impact on the
transactional systems. People with other environments might well need to stage
the data coming out of the transactional systems. I'm not really sure.
I suppose that just means that I'm the wrong person to answer this particular
question, as while I'm technically a consultant, I've only worked with a single

client on QlikView. I can't provide a more balanced perspective to this issue like I
suspect most QlikView consultants could.

36) Dimension limits and rank function why y dimension limits y rank?

rank() and Dimension limits


For Eg: if we need top 5 we can use dimension limits instead of Rank function (but
in pivot table dimension limits not available).

Is there any special use of rank function other than this??

Based on scenarios, either dimensional limits or rank can be used to achieve the
desired result. Recent post where rank function is used to achieve the top N limit
is Show only the 10 largest ABSOLUET values

For straight forward scenarios you can make use of Dimensional Limits.

Is there a way to show in a graph the 10 largest absolute values? (indeed I have
positive and negative value in my bar chart).

Please check the attached app.

Try to use calculated dimension as below

=aggr(if(rank(fabs(Sum(Value)))<=10,Dimension),Dimension)

Keep the Label as "Dimension", also check the "Suppress When Value is Null" in
the same properties pane for Dimension
In the "Expressions" use "Sum(Value)" with respective Label "Value"

Finally in the "Sort" properties pane, use Expression as sort order for Dimension,
with the below expression
rank(fabs(Sum(Value)))
Order as Ascending

Kindly replace the Dimension and Value with your required dimension and fact
values

have crated three charts of aim is top 5 sales

1)using dimension limits

2)=aggr(if(rank(sum(Sales))<=5,Country),Country)----On dimension-

3)=If(Aggr(Rank(Sum(Sales)),Country)<=10,Sum(Sales))---on expression--memory is like

which one is better and performance wise and memory wise.

i want to know how the Qlikview evaluates in this scenarios.

Batch
A
A
A
A
A
B
B
B
B
B

Sub
Batch
A_6
A_8
A_9
A_5
A_7
B_5
B_1
B_2
B_4
B_3

Value
0.30
0.30
0.79
0.86
0.92
0.29
0.40
0.43
0.44
0.97

Rank
1
2
3
4
5
1
2
3
4
5

Norm_Rank
0.2
0.4
0.6
0.8
1
0.2
0.4
0.6
0.8
1

C
B_6
0.25 1
0.2
C
B_7
0.30 2
0.4
C
B_2
0.79 3
0.6
C
B_3
0.84 4
0.8
C
B_4
0.97 5
1
This is the table that I have. What I am trying to do is have a trellis by Batch and
create Rank on the fly and use Norm_Rank as the dimension.
=aggr(rank(sum(Value),1,1),Batch) gives me duplicate values in Rank
=aggr(rank(sum(Value),1,1),[Sub Batch]) gives me rank of the total population (1
to 15)
Can you help me get the rank as shown in the table.
I have a *.qvw attached where I'm trying to rank on multiple dimensions. All I'm
trying to do is literally take the Baseline chart and add another column that shows
the rank (1-10). I thought this could be done by using the rank function (attempted
in the "Rank Example" chart) but it's the "# Valid Consumer Submissions" by id
and region instead of just ranking by the "#Valid Consumer Submissions" column.
I understand why it's doing that, but I don't know how to adjust my chart so my
rank is based on "# Valid Consumer Submissions".
Anyone have any thoughts?
37) Comparitive nalysis?

'
ll try to explain the concept and the thechnical side of it,

Let's say we want to analyse the conection between two products we sale,
and we want to analyse it dinamcly between any products wh own,

In QV it's now realy easy to make a kind of duplicate the set of the data we have,
Actually we know that if we choose one product from a ListBox we will see the
information abuot the product we chose,now we can declar thet we want same
selections on another ListBox with the same Dimmension- product- refer to anoter
side of the data we have (duplicate set the data) ,

Thechnicaly, you can create a set of data by settings->document properties>Alternate States.


We know that the $ sign mean that we want consider all the selection of our datathe dafult,
And the the expriesion is :
Function({$}field_name) ->sum({$}Sales)

Now after we declar anoter state, lets say we called it Group1, we can use in Set
Analysis :
Function({[State Identifier]}field_name) ->sum({[Group 1]} Sales)

Its important to understand that itlike s behave another set of data (theoreticly).

38) components in set analysis?

One of the best practices I follow while preparing any report / dashboard is to
provide a lot of context. This typically makes a dashboard lot more meaningful and
action oriented. For example, if you just provide number of units sold by a product
line in a month, it is good information, but it is not-actionable. If you add
comparison against same month last year, last month or average of relevant product
lines in this month, you have added context to the number. The business user can
take more meaningful actions out of this report / dashboard.
QlikView has feature called SET ANALYSIS that provides us a way to add this
context. Set analysis predefines the SET OF DATA that our charts / tables use. So,
using a Set Expression, we can tell our object (chart / table) to display values
corresponding to various sets of data (e.g. a pre-defined time-period, geographic
region, product lines etc.). All of the examples, I mentioned above as part of
adding context can be accomplished using Set Analysis in Qlikview.

Most of the QlikView Professionals think that SET ANALYSIS is a complex


feature. Through this post, I am trying to change their conviction towards it.
What is SET ANALYSIS ?
Set Analysis can be understood by a simple analogy of how Qlikview works. We
make selections on certain variables and the changes reflect in the entire
application. This happens because through our selection, we have created a set of

data which we want to use. In a similar fashion, using Set Analysis feature, we can
pre-define the data to be displayed in our charts.
Some features and characteristics for Set analysis are:

It is used to create different selection compared to the current application


selections

Must be used in aggregation function (Sum, Count.).

Expression always begins and ends with curly brackets { }

Example dataset:

SET ANALYSIS syntax broken down into three components:

Identifiers:
Identifier
0
1
$
$1
Bookrmark0
1

Description
:Represents an empty set, no records
:Represents the set of all the records in the application
:Represents the records of the current selection
:Represents the previous selection
:Represents the set of all records against bookmark ID or
the bookmark name

Examples:-

In below example, Current year selection is 2012 and previous selection was 2013.

Operators :

It works on set identifiers

Operator Operator Name


+

Union

Exclusion

Intersection
Symmetric
Difference

Description
Returns a set of records that belongs to union of
sets.
Returns records that belong to the first but not the
second
Returns records that belong to both of the set
identifiers.
Returns a set that belongs to either, but not both of
the set identifiers.

Examples:-

In below example, I have created a bookmark BOOKMARK_1 for company


selection A, B and C.

Modifiers:

Modifiers are always in angle brackets <>.

It consists multiple fields and all fields have selection criteria.

Condition of fields within modifiers bypass the current selection criteria.

Dollar Sign Expansion:


If we want to compare current year sale with previous year, previous year sales
should reflect values in relation to current selection of year. For example if current
selection of year is 2012, previous year should be 2011 and for current selection of
year 2013, previous year is 2012.
=Sum ({$<Year = {$ (=Max (Year)-1)} >} Sale)
Above expression always returns sale for previous year. Here $ sign (Font color
red) is used to evaluate the value for previous year. $ sign is used to evaluate
expression and to use variables in set modifiers. If we have variable that holds last
year value (vLASTYEAR) then expression can be written as:
=Sum ({$vLASTYEAR)} >} Sale)

Indirect SET ANALYSIS: Function P() and E()

Let us take a scenario, where we want to show current sales of the companies who
had sales last year.
Expression should be similar like:
=sum({$<Year={$(=Max(Year))},Company_Name={Companies who had sales
last year}> } Sale)
First we have to identify companies who had sales last year. To fix this problem,
we will use function P() that is used to identify values within a field and function
E() that exclude values within a field.

Finally, we have expression:


=sum({<Year={$(=Max(Year))},Company_Name=P({<Year={$(=Max(Year)1)}>}Company_Name)>}Sale)
This post was an example where we have brought out methods to use SET
ANALYSIS in Qlikview. Have you used this feature before? If yes, did you find it
useful? Do you have more nifty tricks to make Set Analysis more interesting? If
not, do you think this article will enable you to use Set Analysis in your next
dashboard?
Do let me know your thoughts on using this feature in QlikView.

40) non optimized QVD load means?

Optimized load is much faster and therefore preferable, especially for larger data
sets.

Optimized loads are possible if no transformations (calculations) are made during


the load, and no (almost) filtering is done in a WHERE clause.

The only acceptable filter is using function Exists:

WHERE Exists(Field)

So for example this load can't be optimized:

Load * From ... WHERE Country = 'US'

but this load can:

Load * From ... WHERE EXISTS(Country)


================================
On the other hand, the only time you want the load not to be optimized, is if you
load a Mapping table from a QVD file. In this case, Optimized load doesn't quite
work, so you want to make the load non-optimized deliberately.

41) What is source view and what is internaltabler view?

The Internal Table View is the default view. It shows the data tables as
QlikView stores them. Composite synthetic keys are formed in tables that share
more than one field. Synthetic tables are used to link them. This view offers the
best understanding of the QlikView logic and also provides a very clean layout
where each pair of tables has a maximum of one connector between them.

The Source Table View shows data tables as QlikView reads them. Here
there are no synthetic fields or synthetic tables. Composite keys are represented by
multiple connectors between tables
Source Viewer:

Internal Viewer:

42) why keep and why join?

Basic difference is that when we join two tables we get single one table. But if we
use Keep with join then join is perform but we get separate table in our model.

Or

When you perform Join(inner,left,right) on two tables you would get one resulting
tables and there may be a chance to loose some data, where as in Keep you will get
2 resulting tables, result should be same as join.

43) if i load same tables what will happen in qlikview? & how many recordS will
come ? how u resolve that?

You get single table if same fields and name is also same and if values are same
then you see double values. But if you use NoConcatenate then table not
concatenated but synthetic table created see more in the example.
LOAD * Inline
[
A,B,C
121,324,545
];
NoConcatenate
LOAD * Inline
[
A,B,C
34,35,78

121,324,545
];
it will be concatenated in the previous table.
and you will see double values for each row...
44) how many dimensions upto we can take for barchar?

I have heard that we can use 3 dimensions and only one expression.
45) why let and why set?

It is very simple:
using SET you are adding string value to a variable
SET Variable1='4+5';
variable value is '4+5'
using LET you are adding an expression result to a variable
LET Variable1=4+5;
variable value is 9

47) i want to show 10 years data for 2 products which chart u prefer?
Bar chart.

48) what is the differences u observed in pivot table in 11 SR2?

5.2 AJAX client improvements


Apart from the new layout features listed above, a number of AJAX specific
features have been added:
5.2.1 Pivoting and reordering in pivot tables
The goal is to have parity between the C-client and the AJAX client. It is now
possible to pivot a pivot
table in the AJAX client. For example, if a pivot table has 3 dimensions and several
expressions, it is
now possible to arrange the columns in any ord

53) worked on publisher QMC?


yes
54) what u done?
a )Jobscheduling deploying.
55) so what are the issues u faced deploying suppose i am unable to open one qvw
then what could be the problem.?
a)i said permisssion erro.
56) if permission is ther then?
a) browser issue i said if u are using SR2 downgrade browser version in ur
client machine to IE 11 to IE 10.else u can upgrde the SR@ to SR5.

57) aprt from that any issues?


a) Db issues use force 32 bit.if client using 32 bit version.

58) why publisher QMC is there?

QMC Stands for QlikView Management Console. It's the GUI to access the
QlikView Management Service (where you can configure and administrate your
environment).

Publisher is the name of the QlikView Distribution Service once you have
introduced a Publisher licenses its purpose is to reload QlikView Documents and
Publish them (in a variety of ways).

QlikView Management Console is the administrator console for deploying and


managing qlikview applications. Once you install the QlikView server you get
access to the console.
QlikView publisher is a sub component of the QlikView Management Console that
allows looping, reducing and distributing of QlikView applications through an
automated engine. The benefit of that is to improve management and governance
of qlikview applications as well as better manage the performance of the hardware
RAM and CPU. That is why the plug-in called as the publisher comes for an added
price

i said QMC only schedule the jobs daily monthly but with publisher we can do
daily two times specified no of times like wedness day and no fo times point of
time these facilities are there
59) Apart from that any advtages in publisher?
a) Pdf reports can be done.splitting the QVW file.if section accesses not
implimented with publlisher we can reduce QVW into parts.
60) QMC publisher is not there then how to deploy?
a) i am not sure i done through QMC and publisher.
61) Idea about CAlls?
a) yes

59) Apart from that any advtages in publisher?


a) Pdf reports can be done.splitting the QVW file.if section accesses not
implimented with publlisher we can reduce QVW into parts.
60) QMC publisher is not there then how to deploy?
a) i am not sure i done through QMC and publisher.
61) Idea about CAlls?
a) yes

62) explained Calls like Named.document,session,usage calls


63) how u suggest to client about calls licensing?
a)i will suggest first let me know Dedicated users and developers and frequent
users and Month end usage and how many depart ments are there how many
people works on different depart ment then i will suggest.
64) have assigened Calls?
a) NO.(Administartords)

65) MTD and YTD set analysis can u tell me?


MTD - means Month To Date - for today the date range is 1-Apr-2014 to 16-Apr2014
YTD - means Year To Date - for today the date range is 1-Jan-2014 to 18-Aug2014
Set Analysis expressions are
MTD:
=Sum({<DateDimensionName={'>=$(=MonthStart(Today()))<=$(=Today())'}>}
MeasureName)
YTD:
=Sum({<DateDimensionName={'>=$(=YearStart(Today()))<=$(=Today())'}>}
MeasureName

66) master claender is there why u are using Quarter in set analysi?

Master calendar :- Where every date exists (as you said).

Quarter : Where we can see the data of specific period of a year. we have 4 qts in a
year and if company( e.g Finance related )wants to see the data from Apr to Mar
then we can specify the Quarters according to that in QV.
This function is mostly used to compare the data of companies for specific time
frame e.g comparison of Q1 sales vs Q2 sales etc. Hope it clears .

(Or)

In businesses, high-level financial reporting and follow-up is almost always done


using Quarterly results. Of course, that depends on which hierarchical level is
using QlikView (operational follow-up may be done on daily, weekly or monthly
basis).

Therefore BI quite often needs a quarter dimension in its chart timeline.

67) i wan to not to change the chart irrespective of selection what will u do in set
analysis?

If you want it not to change also when you have a selection, then use

max({1} total <country> highest)

70) Db idea?
a) yes.

71) where and having difference?

The WHERE clause is used to filter records.


The WHERE clause is used to extract only those records that fulfill a specified
criterion.

SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;

The HAVING clause was added to SQL because the WHERE keyword could not
be used with aggregate functions.
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

SQL HAVING Example


Now we want to find if any of the customers have a total order of less than 2000.
We use the following SQL statement:
The following SQL statement finds if any of the employees has registered more
than 10 orders:
Example
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)

GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;

72) delete and truncate?

The DELETE statement is used to delete records in a table.


The DELETE statement is used to delete rows in a table.
DELETE FROM table_name
WHERE some_column=some_value;

The TRUNCATE TABLE Statement


What if we only want to delete the data inside the table, and not the table itself?
Then, use the TRUNCATE TABLE statement:
TRUNCATE TABLE table_name

1.

TRUNCATE TABLE (Transact-SQL) Removes all rows from a table


without logging the individual row deletions. TRUNCATE TABLE is similar to
the DELETE statement with no WHERE clause; however, TRUNCATETABLE is
faster and uses fewer system and transaction log resources.

73) show top 5 salries? without using top key word ?


Here I am writing SQL query to find nth salary without using top or max
keywords.
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY SALARY DESC) AS rownumb
er,Salary
FROM Employee )
AS foo
WHERE rownumber = n
Example
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY SALARY DESC) AS rownumb
er,Salary
FROM Employee )
AS foo
WHERE rownumber = 5
The above query will show 5th highest salary from Employee table.
74) What is error variables?where you have used ?
Error Variables
The following variables can be used for error handling in the script:

ErrorMode
ScriptError
ScriptErrorDetails
ScriptErrorCount
ScriptErrorList
The values of all five variables will remain after script execution. The
value of the last four variables, for error handling inside the script, is of
course dependent on the use of ErrorMode=0.

ErrorMode
This variable determines what action is to be taken by QlikView when an error
is encountered during script execution. By default (ErrorMode=1) the script
execution will halt and the user will
be prompted for action (non-batch mode). By setting ErrorMode
=0 QlikView will simply ignore the failure and continue script execution
at the next script statement. By setting ErrorMode =2
QlikView will trigger an "Execution of script failed..." error message
immediately on failure, without prompting the user for action beforehand.
Example:
set ErrorMode=0;

ScriptError
Returns the error code of the last executed script statement. This variable
will be reset to 0 after each successfully executed script statement. If an
error occurs it will be set to an internal QlikView error code. Error codes are
dual values with a numeric and a text component. The following error codes
exist:
0

No error

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

General error
Syntax error
General ODBC error
General OLE DB error
General custom database error
General XML error
General HTML error
File not found
Database not found
Table not found
Field not found
File has wrong format
BIFF error
BIFF error encrypted
BIFF error unsupported version
Semantic error

Example:
set ErrorMode=0;
load * from abc.qvw;
if ScriptError=8 then
exit script;
//no file;
end if

ScriptErrorDetails

Returns a more detailed error description for some of the error codes above.
Most importantly this variable will contain the error message returned by ODBC
and OLE DB drivers for error codes 3 and 4.

ScriptErrorCount
Returns the total number of statements that have caused errors during the
current script execution. This variable is always reset to 0 at the start of
script execution.

ScriptErrorList
This variable will contain a concatenated list of
all script errors that have occurred during the last script execution. Each
error is separated by a line feed.

75) Exact meaning of synthetic keys?


The Synthetic Key is available only when two or more fields are associated
between tables; a Synthetic Key and table is then formed. The Synthetic Key is not
good for a designed data model. Always remember that two tables can be
connected by one field. That shows up as a connection. Two tables can be
connected by two or more fields. That shows up as a Synthetic Key. You should not
connect two particular tables by one field. When one or more tables have two or
more fields in common, then a composite key will be generated, then QlikView
handles this process with a Synthetic Key. These keys are anonymous fields that

represent combinations of the composite key. When the number of composite keys
increase, then it depends upon the total amount of data and the table structure.
QlikView creates additional tables with Synthetic Keys ($Syn).
The Synthetic Key is always represented with $Syn.
How to avoid a Synthetic Key from tables
By using these points, we can avoid Synthetic Keys from tables.
Renaming the table fields
Commenting the fields.
Joining of tables
Concatenation of tables
By using complex keys
Link table

My current personal opinion: Restating a lot of what's in this thread and the one I
linked to, if your tables are properly linked by two fields, a synthetic key is one
valid way to model this link. It is not in and of itself a data model error. It may or
may not load or perform better than an equivalent composite key, depending on the
situation. However, since a synthetic key is usually a symptom of a bad data
model, you would want to document it as completely as possible, or the next
person that sees your code will probably assume you made a mistake. A composite
key, on the other hand, is self documenting. And often neither is the best approach,
and the best approach is to use a different data model completely, one that doesn't
require either sort of key.

My current personal advice: If you're a new developer, figure out WHY the
synthetic key appeared, and then remove it. At worst, it's good data-modeling
practice. If you're an experienced developer, and you're not SURE that a synthetic
key is appropriate, then it isn't - remove it. If you're an experienced developer, and
you're in a rush, and you KNOW that a synthetic key will work, go ahead, but
remove it later. If you're an experienced developer, and you KNOW you have a
good reason for having a synthetic key (such as if in this particular case it
significantly improves load performance, and load performance is critical for the
application), and you've actually taken the trouble to compare the alternatives, go
ahead, but document it thoroughly, because otherwise that new developer is going
to take my advice and remove it and undo all your hard wo

As per my understanding and experience, Synthetic key doesn't effect the data
integrity if your data linking is accurate.

It surley effects the reload time. If you observe when the application loading is
completed it tries to create the synthetic key which takes time depending upon your
data volume.

I have also observed reduction in performance at front end due to synthetic keys.

Hence i would personally advice to remove synthetic keys(where ever possible)

78) which KPI you have worked?

Key performence Indicators .....it will depend upon their business. Suppose their
main business is sales then they have to findout Sales per day, month, year.... so
here "Sales" is one KPI, just like Margin also... Like this we have to analyze their
business and find out the KPI's

80-20 analysis,
product analysis,
BOMvsActual price,what-if analysis etc.
to bulid this type of dashboards alike a

KPI

these all condition faced in real time project of KPI


hope this will helps you
81) dimension hide scenario in straight table?

82) Tell 5 qlik view functions which you have used most of the time during
development?

There are loads of functions in QV. Here is list of my favourite/ most used ones.

Script:
ApplyMap()
Date()
Date#()
Num()
Num#()
Trim()
SubField()
AutoNumber()
RecNo()
RowNo()
FirstSortedValue()
Text()
Concat()
UI:
IsNull()
Num()
Concat()
FirstSortedValue()
Pick()
Match()
SubField()
SubStringCount()
GetFieldSelections()
GetSelectedCount()
here are many functions and difficult to give you list of all but you can get all of
them by reading QlikView Reference Manual.

Some of them are


Left, Right, Mid,Subfield,
Date,Month, Year, MonthStart, MakeDate, YearStart, Today(), Week, Now,
Min, Max, Avg,
ISNULL,
Peek, ApplyMap, Rand, RangeSum, RangeMin, RangeMax, Previous,
SUM, Avg,
Exists, RecNo, IterNo, Ceil, Floor,
Capitalize,
IF,...match, firstsortedvalue

83) How you will suggest to client that why qlik view is best compare to other
tools?

It can be caricatural but it's like the comparison between "Analysis vs Reporting".

Choose BO or COGNOS if your need is 80% of reporting / 20% of analysis tool

Choose QLIKVIEW if your need is 80% of analysis tool / 20% of reporting.

80 % Reporting means, it is may be of the raw data in the form of reports, mostly it
is static. For example Sales reports, you can just see the sales by
month/year/region.

But by analysis you can see the report dynamically by using various parameters,
like YTD, MTD, applying many filters analysing the data etc.

Reporting: The process of organizing data into informational summaries in order


to monitor how different areas of a business are performing.
Analysis: The process of exploring data and reports in order to extract meaningful
insights, which can be used to better understand and improve business
performance.

Qlikview maintains all the data associations, where as Traditional BI solutions


dont maintain data associations.

Qlikview User driven :


Follows the user
All data, always visible
Minutes to change
Insight driven
Other BI tools are IT driven :

Linear, pre-defined thinking


Insights missed in hidden data
Months to change
Data-centric

85) Apply map() function ....where it will fit in project scenario..give real time
example?

Applymap():
++++++++++++++++++++++++
Purchase:
LOAD * Inline [
PurchaseID,Product,PurchasePrice,Quantity,PurchaseDate
P9, Product1, 8, 20, 15/10/2010
P11, Product1, 7, 10, 09/10/2010
P12, Product1, 9, 20, 01/10/2010
];
Temp:
Mapping LOAD
Product,PurchasePrice
Resident Purchase;
DROP Table Purchase;
TableA:
Sales:
LOAD ApplyMap('Temp', Product ,'NoDATA') as PurchasePrices,* Inline [

SalesID,Product,SalesPrice,Quantity,SalesDate
S1, Product1, 10, 10, 10/10/2010
];
******************************************************************
********************
Let's look at an example of how to use Applymap(): In an ERP system, the
customer table is the table where all information about the customer is stored, e.g.
the name and country of the customer. Further, it could be that you need the
customers country when making a calculation in the order table. This is a field
that you don't have in the order table. In SQL you would join the two tables to get
country into the order table.

In the QlikView script you would instead first define the mapping table that maps a
customer ID to a customer country as follows:

MapCustomerIDtoCountry:
Mapping Load CustomerID, Country From Customers ;

The second step is to use this information when reading the order table, such as:

Orders:
Load *,
ApplyMap('MapCustomerIDtoCountry', CustomerID, null()) as Country
From Orders ;

The "null()" as third parameter of the function defines what it should return when
the customer ID isn't found in the mapping table.

And with this, you have joined the field Country with the order table without
using a join. And you have done it faster and with less chance of errors. Bottom
line: Whenever you know that you just want to fetch one single value per record
dont join. Use Applymap() instead.

Adv of applymap():

1)better performance than join and lookup () function


2)mapping table will be there at script execution time only.
3)missing values we can assighn time of loading.
4) we can avoid duplicates
limitations:
1) only for one field value we can get and in the mapping table first field is
cpmmon key and second one is our required value field.

87) normalization and de-normalization...which one is good and why and


drawback?
The big fact table will probably give you the best response time for selection but it
can be a little bigger (although QlikView will handle the duplication of values
inside a field very well).
On the other hand, a snowflake schema may have a bit longer response time to
selections since they will have to be propagated to other tables.
You can also get good results in a star-schema.
I`d say that the best choise will depend on your bottle-necks...

Tables in qlikview are denormalised.......

First of all what is normalization


Normalization---Normalization is generally used in relational database for
reducing the redundant(repeated) and consistency.It i used to organize data.for
example when you are using Employee table with the address table ,when you
want to see the address,same as for city ,and other fields.
Some of disadvanatge of normalization are...
1>It is slow
2>The more your data is normalized the more are the no of joins
3>When we use denormalization we don't have to write complex queries.
That is why we prefer denormalization

92)mapping load?

Hello there! In this Qlikview tutorial, I will show you how you can perform
mapping load using the ApplyMap function.
For those of you who have missed my previous video blog post showing basics
of mapping load in Qlikview I encourage you to view that video first since the
intent of this blog post is to show you how to do a mapping load using the
Applymap function, and some tips and tricks that you can incorporate in your next
application.
I am using an example of a shoe manufacturing company, Vogue Shoes, selling its
products through different major retailers.
Retailers get discount based on the sales volume, but the shoe company also offers
promotional discount on products when it has excess inventory in order to promote
sales.
We will use our new-found love for the mapping load in Qlikview to apply
promotional discount when it exists. We will use nested applymap functions, and
even show you how you can use it even in a calculation or an expression.

Lets begin
Step1: Create a data set of a shoe company: Sales, Products, Customers,
Discount.

Step 2: Create a mapping tab in your script editor and add all the mappings.

Step 3: Using ApplyMap() function, add new fields to the fact table.

93) star schema and snow flow schema?


Star Schema is better because of
1.
2.
3.
4.
5.
6.

Has redundant data and hence less easy to maintain/change


Less complex queries and easy to understand
Less no. of foreign keys and hence lesser query execution time
Good for datamarts with simple relationships (1:1 or 1:many)
Fewer Joins
Contains only single dimension table for each dimension

Star schema gives better results especially for qlikview.why because if there is less
no of joins qlikview works faster .

check the below table it will be helpful to u

94) how to load with data from single excel with multiple sheetes with sngle load
stmt?

lets say that your sheet- (or table-)names are Jan$, Feb$ and Oct$ (all in the same
file "T6.xls"). Then you can use a "for each .... next" like this:

for each vSheet in 'Jan$', 'Feb$','Oct$'


MyTableName:

Load ........From [D:\R\T6.xls](biff,embedded labels,table is $(vSheet));


next;

you can use a for each with a list of your sheetnames in a variable like the
following and load the whole data into one QV-Table:

for each vSheet in 'sheet1', 'sheet2', 'sheet3'


LOAD id,
category,
number,
costs,
O
FROM
[lokal QV-Forum\TESTweights.xlsx]
(ooxml, embedded labels, table is $(vSheet));
NEXT;

95) how to reduce the qvw?


To reduce the file size follow this
- Remove unused dimensions which are not using in any charts, filters etc.
- Remove unwanted records, for example if only 2 years of data then load only that
data.
- Truncate Time part in date, if you are not using it.
- Remove unused hidden objects if any in your dashboard.

Generally this are the things i follow to reduce the size.


Try typing Ctrl-Shift S. This will show you any hidden objects which may also be
processing intensive. This is often the case if you are inheriting a QV app from
someone else.

96) Direct discovery?


QlikView determines which data resides in-memory and which data is direct
discovery data by
using the special script syntax, DIRECT SELECT. This syntax allows certain
data elements not to
be loaded into the QlikView data model during the script reload process, but still
available for
query purposes from the QlikView User Interface and to be combined for analysis
with the
QlikView in memory dataset.
Once the direct discovery structure is established, the direct discovery fields can be
used with
certain QlikView objects. When a direct discovery field is used on the QlikView
object, QlikView
will automatically create the appropriate SQL query to run on the external data
source. The
result of the query will be displayed on the QlikView object. When selections are
made on the
QlikView application, the associated data values of the direct discovery fields will
be used in the

WHERE conditions of the queries. With each selection, the direct discovery charts
will be
calculated, where the calculations and aggregations will be done on the source
table by
executing the SQL query created by QlikView. It is possible to use calculation
condition feature of
the QlikView charts to set a condition indicating when the chart should be
calculated. Until that
condition is met, QlikView will not run queries and the chart will not be calculated.
Please note
that QlikView will execute SQL queries on the data source for some of the list
boxes that use
direct discovery fields. This is required to achieve the associative navigation
capability.

yes some little queries, but they work on my oracle test db, you have to adapt to
your db
OLEDB CONNECT32 TO [Provider=OraOLEDB.Oracle.1;Persist Security
Info=True;User ID=test;Data Source=dev11;Extended Properties=] (XPassword
is xxxxxxxxxxxxxxx);
DIRECT QUERY
dimension
COD_SOCIETA,
COD_CLIENTE_COMMITTENTE,
COD_CLIENTE_DESTINATARIO,
COD_FAMIGLIA,
COD_PRODOTTO,
NUM_NUMERO,
COD_ORG_COMMERCIALE,
COD_CANALE,
COD_SETT_MERCEOLOGICO

measure
QTA_PDV_SERVITI
FROM DWH_DL.MS01_DIFFUSO
WHERE NUM_NUMERO LIKE '40%'
;
this is another one
DIRECT QUERY
dimension
COD_SOCIETA,
COD_CLIENTE_COMMITTENTE
FROM DWH_DL.MS01_DIFFUSO
;

98) difference between join and concatenation?

We have implemented the QlikView Join, Keep and Concatenate in QvScriptor, a


new revolutionary tool, able to generate QlikView script from visual schema.

We have written this small doc for the help file and we thing interesting to share it
with the community as we found only partial explanations about the methods.

The QlikView script functions JOIN, KEEP and CONCATENATE can sometimes
be used to solve the same problem, but there are important differences that should
be understood.
Examine the sample tables below. Note that they share one common field name,
"Key".

Also note that Table1 has a Key value "3" that is not present in Table2 and that
Table2 has a key 4 that is not present in Table1.

Table1

Table2

Key

Key

A1

C1

A2

C2

A3
4

C4

Type of Joins:
JOIN will combine rows where the Key value matches.

The keyword OUTER will also retain rows that do not match rows in the
other table.

The keyword LEFT will retain rows from the left table but only matching
rows from the right table

The keyword RIGHT will retain rows from the right table but only matching
rows from the left table

The keyword INNER will retain rows matching the left table and right table

Joins
Here's what the merged table will look like after the different join methods.
Note that QlikView merge the two tables after a Join.

Note: The explicit join keyword (= Outer Join) in QlikView script language
performs a full join of the two tables. The result is one table. In many cases such
joins will result in very large tables. One of the main features of QlikView is its
ability to make associations between tables instead of joining them, which greatly
reduces memory usage, increases processing speed and offers enormous flexibility.
Explicit joins should therefore be generally avoided in QlikView scripts.
The keep functionality was designed to reduce the number of cases where you need
to use explicit joins

OUTER JOIN (Table1)

LEFT JOIN (Table1)

Key

Key

1
2

A
A1
A2

C
C1

A1

C1

C2

A2

C2

A3

A3

C4

RIGHT JOIN (Table1)

INNER JOIN (Table1)

Key

Key

A1

C1

A1

C1

A2

C2

A2

C2

C4

Keep
The keep prefix between two load or select statements has the effect of reducing
one or both of the two tables before they are stored in QlikView, based on the
intersection of table data. The keep keyword must always be preceded by one of
the prefixes inner,left or right. The selection of records from the tables is made in
the same way as in a corresponding join.
However, the two tables are not joined and will be stored in QlikView as two
separately named tables.

LEFT KEEP
Table1

Table2

Key

Key

A1

C1

A2

C2

A3

RIGHT KEEP
Table1

Table2

Key

Key

A1

C1

A2

C2

C4

INNER KEEP
Table1

Table2

Key

Key

A1

C1

A2

C2

Concatenate
Now let's look at Concatenate. Concatenate appends the rows of one table to
another. Concatenate never merges any rows. The number of rows in a
concatenated table is always the sum of the rows from the two input tables. Here's
what our sample data will look like after Concatenate.

CONCATENATE (Table1) LOAD * RESIDENT Table2;

Key

A1

1
2

C1
A2

2
3
4

C2
A3
C4

Rows with like Key values are not merged together. The rows from Table2 are
simply appended to Table1. Because the tables have different fields, rows will have
null values for the fields from the "other" table.

99) adv of publisher ?


If you need only reload, you don't need Publisher. Server is enough.
Publisher gives you more options. From the top of my memory - distribute to a
different folder, distribute to the selected users and groups, reduce documents by
field value, distribute as PDF, send email notifications. Documents distributed by
publisher have their script removed.

Publisher: Loads data from different data sources (oledb/odbc, xml, xls), reduces
the QlikView application and distributes to a QVS.
Because QlikView Server and Publisher have different roles and handle CPU and
memory differently its considered a best practice to separate these two
components on different servers.

101) what is the use of dimension limit?

Concerning your dimension limitation, go to the limitation tab, select the customer
dimension, check the "Restrict which values are displayed..." check box and the
first option "Show only largest" - enter 5 - "Values".

There is a What's new in QV11 app that demonstrates most of the new features as
well.

In a stacked bar chart (and in a pie chart) where there's one dimension with many
possible categories (e.g. dimnesion = "Products", categories:
"House","Beauty","Bathroom"...), is there a way to limit the presentation
to specific categories you define (e.g. House and Bathroom) and show "Others" as
well (as you would in a normal dimension limits option).
What I did was to just define the categories I wanted in the expression of the chart,
but this way I can't show the total for the others...

calculated dimension may help, try this:


if( Products = 'House' or Products = 'Beauty' or Products = 'Bathroom', 'Others')

HtH
Roland

Sorry: better is this:


if( Products = 'House' or Products = 'Beauty' or Products = 'Bathroom', Prducts,
'Others')

102) Advantage of rank over dimension limit?

have crated three charts of aim is top 5 sales

1)using dimension limits

2)=aggr(if(rank(sum(Sales))<=5,Country),Country)----On dimension-

3)=If(Aggr(Rank(Sum(Sales)),Country)<=10,Sum(Sales))---on expression--memory is like

which one is better and performance wise and memory wise.

i want to know how the Qlikview evaluates in this scenarios.

Using Aggr() in expression or dimension have some performance issues, so better


to avoid it by using Dimension Limits top N.

Also Calculated dimension also had very bad performance, so better avoid
calculated dimensions.

I think the best option is Dimension Limits.

If You are using the pivot table then in pivot there is no option of dimension limit
so in pivot you can apply this thing which you are asking bt in straight table
Dimension limit is the best option for the top n analysis.

103) Where u can give scale?

105) Display top 5 countries based on sales?

if you want to use a calculated dimension instead of Dimension Limits then


you need to use only the calculated dimension. So remove the product dimension.
The expression for the calculated dimension should be
=if(aggr(rank(sum(sales)),product)<=5,product). You'll also want to enable the
option Suppress When Value Is Null for the calculated dimension.
106) Depends on rank displaying different colors where to write?

Pick(match(Country,'U.S.A.','Japan','Italy'),Red(),rgb(210,213,245),green())

//if(Country='U.S.A.',Red(),if(Country='Italy',Green(),if(Country='Japan',blue())))
107) when pie chart will be good?
Up to 3 to 5 fields are good and it shows percentages
108) what is fast change property?

See the screen shot to add the option "Fast Change" to change the chart type.
Under the heading Fast Type Change choose the chart types you need to view.
109) Displaying legend values in reverse order?

110) I want USA pie part should be seperated is there any option?

Relative option

112)Number format option?

113) check the allow minimize and allow maximize and auto miniise property?

115) how can you give different colors for different products dynamically
for example 1)ProductA-red() color and PrductB--green() and for productc--RGB(210,223,245)(Polaris)

Pick(match(Country,'U.S.A.','Japan','Italy'),Red(),rgb(210,213,245),green())

//if(Country='U.S.A.',Red(),if(Country='Italy',Green(),if(Country='Japan',blue())))

116) have u seen pie popout and bar offset properties?

Ill talk about attribute chart expressions in QlikView. These attributes are hidden
and may not be obvious. You can see these attributes only when you click on the
+ sign in front of the expression. We have 7 different attributes and some of them
are only applicable to specific chart types.

Background colour

Text Colour

Text Format

Pie Popout

Bar Offset

Line Style

Show Value

These attributes are very useful and can be powerful way to customize the
formatting within QlikView Chart Objects.

117) Cyclic group and drill down group?

In a cyclic group, you can change the dimension of a chart following a specifi
order when you left-click on the cycle button.
Field A - > Field B -> Field C -> Field A -> Etc
Or you can right click the icon and select any of the available dimensions.

On the other hand, in a drill down group, you follow a specific path when you
select only one value of a given dimension.

If you have the dimension A -> B ->C in a drill down group, you can oly move to
the dimension B after you have only one value in dimension A and move to
dimension C after selecting only one value in dimension B

I'd say that the cyclic groups are move flexible but drill downs call be really
helpful sometimes.

119) when pie chart is good and when bar chart is good?(polaris)
Maximum 5 is pie chart and also it good for percentages . bar chart is maximum
10 good and also it is good for comparing years or any products.

120) UPTO HPOW MANY DIMENSIONS WE CAN USE IN GAUGE CHART?


Gauge chart has only expression, but no dimension.
Gauge chart uses only one expressions but don't have dimensions.
You can create other charts without dimensions too.

121) WHY U WENT FOR GAUGE CHART IN UR PROJECT?

Here is a quick entry on how to create a doughnut gauge. These gauges provide an
effective way of representing a percentile measure like a KPI. The gauge has the
advantage over a Pie Chart of only requiring only one expression and can be
formatted to produce a much cleaner looking chart.

Step 1: Write your expression. You dont need to use a percentage you can use a
total value.
Step 2: Add a gauge chart to your document
Step 3: Configure the gauge
GENERAL: Gauge
DIMENSIONS: No Dimensions
EXPRESSIONS: =1 (this forces the gauge to show the full circle)
STYLE: Choose the simple circular gauge.
PRESENTATION:
Min = 0
Max = 1
Indicator.Mode = Fill to Value
Show Scale = untick
Autowidth Segments = untick
Cylinder Thickness = 50
Angle Span = 360

Center Angle = 0
Hide Segment Boundaries = tick
Hide Gauge Outlines = tick
Segment 2.LowerBound = Expression from step 1
Segment 2.Colour = Black
Text in Chart = Expression from step 1

That's it. You can finesse to your hearts content. If you prefer to not use a
percentage then the expression and the max need to be the total of the whole
measures and the segment 2 lower bound would need to be the subset's measure
value (really useful for showing things like data quality scores, order completeness,
etc)

123) QLIKVIEW ARCHTECTURE?


1)Front end-Server
it directly interacts with client so that it is client.
2)Backend:
I)Qlikview Desktop:Generaly we think it is front end but it is backend.where we
develop the application before deploying so that it is come under category of back
end.
II)Publisher:it will take care about external resources so that it comes under
category of Back end

Introducing the QlikView Deployment Framework

Qlikview Architecture by QlikTech


What is qlikview architectures,

Generally Qlikview apps are developed using 3 architectures,

1 Tier or layer
2 Tier or layer
3 Tier or layer

In 1 Tier, all the Data Extraction scripts, Transformations and Presentation (charts)
are done with in same qlikview file.
In 2 Tier, all the Data Extraction is done and stored in QVD files in one Qlikview
file and Transformation and Presentation using QVD files generated in previous
file are done with in another Qlikview file.
In 3 Tier, Data Extraction is done and stored in QVD files in on Qlikview file,
Transformation is done using Qlikview files in another file, Presentation is done in
another file using Binary load of Transformed Qlikview file.

124) WHAT IS FRONT END IN QLIKVIEW ARCHITECTURE?


Server
it directly interacts with client so that it is client.

129) precceding load and resident load?

Preceding load faster than Resident load.

Preceding load in QlikView

Preceding Load is a very powerful functionality in QlikView in transforming the


data.

What is Preceding load


It allows you to define multiple transformations and calculations within one
load script which would otherwise will need to be created using separate load and
resident load statements.
It takes input from the previous Select statement.
Preceding Load is invoked by checking the preceding load while selecting the
tables.
Another Advantage of Preceding Load is that it allows you to use
QlikView functions in the Load script.

Let us see how your script will look when you dont check the preceding Load
while selecting the table.

Preceding Load not checked

Load Statement without Preceding Load

Loading table without preceding load will not allow you to use QlikView
functions.
Now let us check Preceding load and see how the load script changes and what
advantages it brings.

Load statement after checking preceding load check box


In this script you can see that preceding load takes the input from the previous
Select Statement. You can select all the columns in the Select statement but in
Load statement you can select the ones you need. Also observe Year and Month
Calculations. Preceding Load allows you to use QlikView functions like
Year,Month,ApplyMap etc.

There can be multiple preceding loads stacked one on the top of other.

Preceding load can be a useful tool to simplify your data transformations.

With Preceding it is possible to reload again and again into the same table, it is not
possible to create multiple tables with Preceding reload.

Resident Load:
Temp:
LOAD
*
FROM Data;

Temp1:
LOAD
*
FROM Temp;

Temp2:
LOAD
*
FROM Temp;

But with preceding load


LOAD
*,
If(Previous(MonthYear) <> MonthYear, 1, 0) AS MonthStartFlag; // Second
preceding reload
LOAD
*,
Year(Transaction_Id) AS Year,
MonthName(Transaction_Id) AS MonthYear,
Week(Transaction_Id) AS Week;
SELECT

// First preceding reload

Transaction_Id,
Transaction_date
FROM Transaction;

If you are able to manage with preceding load, then it is better than Resident
reload.

131) Accumulation property?

We all use QlikCommunity when we need an answer for a QlikView question. We


post a question and get an answer, usually in minutes, leveraging the expertise of
91,000+ QlikView users! QlikCommunity is the most-visited and active user
community in the BI industry.
I also use QlikCommunity. And sometimes not to get an answer for a question but
to think about new ways of doing things by reading the answers on the existing
posts. So I have been curious about the answers on calculating the accumulative
sums in QlikView and did a search on QlikCommunity. There are many answers
provided as expected. Here is one way of achieving it by using rangesum() and
aggr() functions.
It is a very common requirement to display the accumulative sum of a chart metric.
The easiest way of doing this is to use the accumulate setting under the expressions
tab of chart property.

Figure 1. Accumulate option on chart property

With this setting, the values of the selected metric will be accumulated. But
sometimes, the requirement is to have the first data point accumulated as well. For
example, to show the accumulated sales for 12 months where the first month
displayed should be the sum of the previous 12 months and the following months
should accumulate on top of this value by adding one month at a time. One way of
achieving this is to use the rangesum() and the aggr() functions together.
Let us first look at Rangesum(). It is a range function that returns the sum of a
range of 1 to N arguments Together with the above() function, you can calculate
the sum of the last 12 months;

rangesum( above( sum(Sales),0,12) )


This expression will return the sum of sales evaluated for each month as they
appear on the 12 rows above the current row.
The next step is to combine RangeSum() with the aggr() function to aggregate the
sum of sales for the 12 months at the month level.
sum( aggr( rangesum( above( sum(Sales),0,12) ),Month))
Using the Aggr() function, it is possible to calculate the accumulated sum for any
other dimensions in addition to the time dimension. For example, the 12 months
accumulated sum of sales by store can be calculated as;
sum( aggr( rangesum( above( sum(Sales),0,12) ),Month, Store))
Optionally you could also clear any selections on the month field as the calculation
should reflect the accumulated sales for the previous 12 months, regardless of
selections. This is achieved by using the set analysis {$<Month>}.
sum( aggr( rangesum( above( sum( {$<Month>} Sales),0,12) ),Month))
One important thing to notice with this solution is the sort order inside the aggr()
function. If the sort order is not correct, the aggregated sum of the 12 months
would not be correct. QlikView always sorts the groupings (in this case the groups
defined by the second parameter of the aggr() function) according to the load order.
If the data is sorted by date during the load, QlikView will use this order and the
aggr() function will show the correct totals for the desired time frame.
In summary, the accumulation option on the expression tab is the simplest way of
achieving accumulations, but the use of rangesum() and aggr() functions are
alternative ways of accumulating the data in more complex situations.

132) Accumulation property 3 steps back?

Good post! It covers a number of different methods well.

But there is an additional way to solve this problem - and that is to combine the
RangeSum(Above()) with the Aggr() function, e.g.
sum( aggr( rangesum( above( sum(Sales),0,12) ),Month))

Then each row (or bar or slice) will be a sum over different "rows" defined in the
Aggr() function. See more onAccumulative Sums

A question that gets asked regularly is how to calculate a rolling measure over a
period of N-months (or weeks or days). For example a 12-month rolling total or a
4-week rolling average. There are several ways to do this. But these approaches
have some limitations that need to be kept in mind. I'll try to explain these
approaches and some of their limitations.

Accumulation
RangeXXX functions
Set analysis
AsOf tables

First let's load some sample data. The SalesData table below will contain sales
amount values for twelve consecutive months.
SalesData:
load * inline [
Month, Amount
1,6
2,4
3,7
4,3
5,4
6,9

7,5
8,7
9,8
10,6
11,9
12,7
];

This is a very simple table with little data, but this enough for demonstration
purposes.
Once this data is loaded it's possible to create a straight table chart object to display
the amount per month and a running total. As expected Month is used as
dimension. The expression sum(Amount) will display the amount per month. Now
let's add an expression to calculate a running total over three month periods.
This can be done in two ways. The first uses the Accumulation option for
expressions. The same expression sum(Amount) is used, but now the Accumulation
option is set to 3 Steps Back:

The second option uses the rangesum function. That expression looks like this:
rangesum(above(sum(Amount),0,3))

This sums the Amount value on current row and on the previous two rows. The
resulting straight table looks like this:

This looks good. The rolling 3 months amount is calculated correctly. But what
happens if a selection of months is made?

The rolling 3 month amount for month 4 is now 3 instead of 14. This is because
month 1,2 and 3 are no longer included in the calculation for the rolling 3 month
total.
The accumulation option has another issue. It only works when only one
dimension is used in the straight table. The rangesum expression can be modified
so it can calculate across dimension borders, but the accumulation option can't. The
modified rangesum expression adds the total keyword to the above() function:
rangesum(above(total sum(Amount),0,3))
This goes some way to doing what we want, but the issue of displaying the wrong
rolling 3 month amount for month 4 isn't solved yet. Contrary to what I first

thought there is a solution for this, as Henric pointed out to me in the comments
below. By combining the rangesum with the aggr function it's possible to calculate
the correct rolling 3 month amounts for each month. The expression needed for
that looks like this:
sum(aggr(rangesum(above(total sum({<Month=>}Amount),0,3)),Month))

Read Elif's blog post Accumulative Sums for a more complete explanation.

How about set analysis expressions?


This expression should calculate the sum of amount for the three month period:
sum({<Month={'>=$(=only(Month)-2)<=$(=only(Month))'}>}Amount)
But notice the only() function. This requires that only one month value is selected.
After selecting month 4 the result looks like this:

This shows the selected month, but also the two previous months. And the values
are not accumulated.
Ok, but what about the max function instead of only?
sum({<Month={'>=$(=max(Month)-2)<=$(=max(Month))'}>}Amount)

That gives a different result, but still not what we're looking for:

Now only the last three months are shown and again the values are not
accumulated.
The 'problem' is that the set is calculated once for the entire chart, not per row. This
means that it's not possible here to use Month both as a dimension and in the set
modifier in the expression.
There's still an option left to discuss: AsOf tables.
The AsOf table links a period with all the periods in the rolling period. In this
example months are used, but it can be applied to any type of period like hours,
days or weeks.
For the three month periods needed for a rolling 3 month total this means a month
should be linked to itself, the previous month and the month before the previous
month. The only exceptions are the first month, which is itself the rolling 3 month
period, and the second month that together with the first month is its rolling 3
month period. There are no months before the first month so the first two months
cannot run over 3 months.
The AsOf table needed for the rolling 3 month calculations looks like this:

This table can be created like this:


AsOfMonth:
load
Month as Month_AsOf,
Month + 1 - IterNo() as Month
Resident SalesData
while IterNo() <= 3;

right join load Month Resident SalesData;

What this does is create three records for every month using the while statement.
But that also creates three records for month 1 and 2. This would create a month 0
and a month -1. The right join is used to remove those incorrect month values.
Now that the AsOfMonth table is created the Month_AsOf field can be used
instead of the Month field in the straight table. The expression for the straigh table
is simply sum(Amount).

The straight table now shows the correct rolling 3 month total for month 4.
This can be expanded a little so not only the rolling 3 month can be shown, but
also the amount for the month itself. To achieve this the AsOf table is modified by
adding a field to label the type of period. And records are added to the table so
each Month_AsOf value is linked to the matching Month value:
AsOfMonth:
load 'Current' as Type,
Month as Month_AsOf,
Month as Month
Resident SalesData;

Concatenate (AsOfMonth)
load 'Rolling 3' as Type,
Month as Month_AsOf,
Month + 1 - IterNo() as Month
Resident SalesData
while IterNo() <= 3;

right join load Month Resident SalesData;

There are now two types of periods available: Current and Rolling 3. Additional
period types can be added for example for Rolling 6, Rolling 12 month and Year-

to-Date periods. You can find examples of these types in the attached AsOf Table
Examples.qvw document.
The period type can be used in the chart expressions to calculate the amount for the
wanted period:
Current amount: sum({<Type={'Current'}>}Amount)
Rolling 3 month amount: sum({<Type={'Rolling 3'}>}Amount)

Concluding, there are two solutions that do what we want:


1. The rangesum-aggr combination
2. The AsOf table

The first has the advantage that no changes to the data model are needed. It's also
possible to dynamically change the period to aggregate over by using a variable
instead of a hardcoded number of periods. A disadvantage is that that it's a
somewhat complicated expression that also comes with a performance cost.

The AsOf needs changes in the data model to create the AsOf table and fill it with
the necessary records. The advantage is that it likely performs better on large data
sets. It's also quite versatile since you can add several sets of records to meet
different scenario's. The expressions you end up with in the charts are also less
complicated. That said, it will likely take you some time to fully understand the
AsOf table concept and realize all the places where you can put it to good use.

In the end you'll have to decide for yourself which solution is appropriate in your
situation. With regards to the performance of one or the other solution, you will
simply have to test to discover if the performance is acceptable. But of course such
testing is already part of your development process, right?

I'd like to thank John Witherspoon for introducing me to the AsOf tables
concept and Henric for pointing out the solution using the rangesum function in
combination with the aggr function.

136) default path of QVD where it is stored?


where qvw file is create

139) what is qvd size used your project?


more or less 400 MB and generally 1Gb is compreesed to around 300 Mb
compressed by 7 to 10 times.

142) how to know qvd is corrupted or not?


just load it u will come to know.
143) how to view qvd data?
by Qvd viewer
144) What is AQL
AQL is a query language based on a data base management system which uses
Codd's relational model of data. It has been designed mainly to be used by the
nonspecialist in data processing for interactive problem solving, application
building, and simulation. Ease of use is achieved by providing an interface which
allows the use of default options, synonyms, and definitions of attributes,
inference, and the possibility of interactive completion of the query (i.e., menu).
AQL combines the capabilities of the relational model of data with the powerful
computational facilities and control structure of the host programming language
(i.e., APL). A prototype version of AQL, which has been implemented, is reviewed.

155) RelativePath
156) Absolute path

Absolute path means, you need to give the entire path of the file, for example

C:\Qlikview\Data\SalesData.txt

Relative path means, you need to give the path based on the current path, for
example if your Qlikview file and SalesData.txt file are in the same
path(C:\Qlikview\Data\) then you can use

SalesData.txt no need of the remaining path.


or
.\SalesData.txt

Suppose if you want to access a file in Qlikview folder then you need to use ..\,
mean that go back one folder level back.

..\FileinQlikviewFolder.txt;

183) Why Qlikview is so different ?

Very simpler is that

1. Qlikview is In-Memory Tool.


2. Fast development of application in days or hours you create applications.
3. Built in ETL functionality you can create ETL application itself in QV
application.
4. Good UI designing and presentations.
5. Today load data from any type of source.

187) Challenges you faced?


the main challenges in building a datamodel, in my eyes, are
1) finding out where which pieces of data are stored
2) finding out how to link them
If your database, unlike ours, is well documented, neither of these should be a big
issue - then I really don't think that developing a datamodel should be a great

challenge. Sure, there are some things to be aware of like the automatic linking of
tables which might force you to rename fields a nr. of times, but that is a minor
one.
I'm sure there also are some documents or blogs on this around here. There are
some "best practices" that you can follow, of course.
HTH
Best regards,

DataNibbler

P.S.: I also have some experience from a secondary database of ours - that was
quite well documented, so there was nothing much to it. Some issues will
invariably pop up because of the way data is populated in the database, but those
don't concern the development of the datamodel.

Important points we need to consider for data model is:

1. the way the data flow


2. not required complete data from the table, we can use left keep/join to load only
relevant data
3. based on the required metrics data model need to be done
4. once the data model was done we need to validate the same as per the metric
logic in the db and must to do data comparison

5. join between the tables


6. decreasing the volume of the dashboard will be completely depends up on the
data model
7. must avoid circular loops.
.

I recently developed a model.


First I had to understand the business logic. What was I going to eventually report
on? The model would reflect this logic. I typically try to use a star schema
topology to model this. I also try to minimize the number of tables that I build.
Second, I want to determine the dimensions that would eventually be used for
filters. This is the easier part.
Third, I try to build a fact table or transaction based table that will hold the
majority of the data I am reporting on.
Fourth, I remove unnecessary fields. Consider building mapping tables.
Fifth, I look for a few major keys to tie the model all together.
Sixth, when the above is complete, I decide how to link them all together,
removing synthetic keys, circular references.
Finally, test the reload and see where it is not optimized.

194) i write load *,store into some QVD then i droped tablenable name how many
will be there in tabler view?
Zero.

195) Optimization techniques?

Did u created the Qvd's ? if not create the qvd's from the data and use qvd files for
your analysis,but this process is bit time consuming since at first u need to store
raw data into qvd and then u need to fetch these qvd's into Another Qvw
application for your analysis..
When u convert/store the raw data from database into qvd format the original data
will be compressed up to 90%,this is the advantage...
Second thing dont perform the calculations in the GUI ie. do not write complex
expressions in any chart or pivot tables try to perform or try to elminate the
calculations in the front end and do them in the script level itself
Third thing like if u r using any if statements in the expressions of charts try to
elminate them,instead of that u generate a flag indicator i.e
example if u want to count the no of employess with Sal >10K then do this in the
script like
if(sal> 10K,1,0) as Empcount
and when u use this in the expression inthe chart u can use like just
sum(EmpCount) which will gives the correct result
Apart from the above listed there are few other techniques ike
Elminate Synthetic keys in the Data Cloud.....

196) what is the compression factor for QVD's?

First of all, QlikView will remove any duplicates of each field creating a symbol
table.
Then numeric values are stored into binary form.

The answer to your second question is depends how fast your database can be.
Ive seen 100x qvd x database ratio

If u create a qvd the original data size will be compressed upto 10 times...
This is done by associative property.
The data is actually saved only once in all othyer places where it should be present
is denoted by a pointer...

198) How many object used in QlikView


There's no way to know how many users used an object or how many times an
object was used

201) What is MAPPING TABLES in QlikView

So there is no way to find the most used object. We cannot write any code also or
some server settings.
Can we use document analyser for this ?

It's sort of a join and behaves like a function.

MyMap1:
mapping load idValue, textValue;

tab1:
load field1, field2, applymap('MyMap1', field3, 'value if map does not find field3
in map table');

field3 is sent as a parameter to the applymap call.


field3 is checked against MyMap1 and the corresponding textValue is returned. If
no match it gets the third parameter of the applymap call.

Check the QV Reference manual for a complete manual of howto use maps.

202) Explain about Normalized Data

The big fact table will probably give you the best response time for selection but it
can be a little bigger (although QlikView will handle the duplication of values
inside a field very well).
On the other hand, a snowflake schema may have a bit longer response time to
selections since they will have to be propagated to other tables.
You can also get good results in a star-schema.

I`d say that the best choise will depend on your bottle-necks...

203) Why is sorting not possible while loading QVD?

You can use order by only in Resident load only. If you want to use order by then
load QVD data into temporary table and then using resident load sort the data and
then drop the temporary table. Check the script below

TempTable:
LOAD
*
FROM FileName.QVD (qvd);

Noconcatenate;
Data:
LOAD
*
RESIDENT TempTable
ORDER BY Field1, Field2;

DROP TABLE TempTable;

Sorting(order by) is only possible with Resident file .sorting is not possible when
reading from files.

215) Have you used any macros in your application? If so, what you have used it
for.
No

217) What is the use of exists function in qlikview

The Exists() function only checks a single field, so that is why you need to
concatenate two or more fields together into a single field if you want to compare
against the combinations of multiple fields. In this case, a join would work as well.

In the book, we used Where NOT Exists() on a link table to prevent duplicate
records in the link table. My thinking around this subject has changed somewhat
since the publication of the book, you can find an easier solution here: DISTINCT
can be deceiving The Qlik Fix! The Qlik Fix!

228) How to get current selection in the Drill down /cyclic group field?

Use GetCurrentField(GroupName)

Youc an use the function GetCurrentField as:


GetCurrentField(GroupName)

Returns the name of the currently active field in a group. (From Qlikview Help)

230) What is valuelist and valueloop functions?

For example, create a calculated dimension in a straight table:

=ValueList('KPI1','KPI2')

Then, an expression like

=pick(match(
ValueList('KPI1','KPI2')

,'KPI1','KPI2')
,sum(FIELD)
,count(FIELD)
)

You'll get a dimension with two value, KPI1 and KPI2. To check in your
expression, which is the current dimension value, you'll need to repeat the
Valuelist() function as used in the dimension again in the expression. (Above can
also be written as

=if( ValueList('KPI1','KPI2') = 'KPI1', sum(FIELD),


if( ValueList('KPI1','KPI2') = 'KPI2', count(FIELD) ))

So you can create a dimension on the fly in a chart which is not based on a field in
your data model (I think that's why its called synthetic).

Valuelist() just uses the values you are listing as arguments, valueloop creates the
dimension values based on start, end and step values.

ValueList() is used to create Temporary Dimension or used to create a List box as


Qlikuser said.

ValueList will simple display a list of values inside the ()


For example, create a list box go to Expressions and put =ListValue(1,2,3,4)
Tihs will create a list box with these values inside. This is the same as
=ListLoop(1,4)

ValueList just lists some values to use as calculated dimension


eg valuelist('a','b',c') will list values a, b and c.
ValueLoop will generate a series of numbers starting with the first parameter,
ending with 2nd and having the 3rd as step.
ValueLoop(1,9,2) will generate values 1, 3, 5, 7, 9
ValueLoop(1,6,1) will generate values 1, 2, 3, 4, 5, 6
valuelist(1,2,3,4,5,6) is equivalent to ValueLoop(1,6,1)
233) You are given excel sheet with n number of sheets and need to automatically
load data from all the sheets (number of sheets will increase or decrease ).How will
you do it?

1) To loop on files
a) For each file in FileList('*.xlsx')
Load .... FROM $(file) ....
Next

b) For each file in 'A.xlsx' 'B.xlsx'


same as previous

2) To loop on sheets
The script below loads the data into qlikview file for multiple sheets in a single
load by using the Loop statements.

LET vStartSheetNumber = 1;
LET vEndSheetNumber = 50;
LET vExcelFileName = 'Data';

// Generate Empty table


Data:
LOAD
'' AS Data.Field1,
'' AS Data.Field2
AutoGenerate(0);

FOR index = vStartSheetNumber TO vEndSheetNumber


Concatenate(Data)

LOAD
*
FROM [$(vExcelFileName).xlsx]
(ooxml, embedded labels, header is 10 lines, table is [Page $(index)]);
NEXT

234) What would be the data model of two fact tables with varying dimension?

You could concatenate the fact-tables or create a link-table or simply rename the
fields which should not associated. Which way is the best depends from your data
and aims.

239) Qlikview three layer architecture (where each components will come
-Qlikview Publisher , Developer and Clients)
240) What are the best design concepts? (Possible answers: Four quadrants,Sizing
of quadrants based on importance, consistent colors and objects placement, less
contrast colors, logo in the first page)
243) Display the names of the employees who earn highest salary in their
respective departments.
SQL> select ename,sal,deptno from emp e where sal in(select max(sal) from emp
m where m.deptno = e.deptno);

244) Find out top 5 earners of company.


SQL> select * from (select * from emp order by sal desc) where rownum <= 5;
245) Display the Employee name and Managers names.
SQL> select e.ename employee, m.ename manager from emp e, emp m where
m.empno=e.mgr;

246) What is data /dateIsland?


Data Islands are group of associated data tables. In qlikview it is not that always
every table in your data model will contribute to form a Star Schema. There might
be few tables which are not associated to any other tables in the Data Model and
the data from these tables will be used in your Dashboard for reporting purposes.

Example: Table1, Table2 and Table3 are associated to for a Star Schema.(We call
say Group 1) and Table A and Table B form are associated to form one more group
say Group 2. Group 1 and Group 2 are Islands as they do not have associations.

have two data islands in my data model and I've been using IF statements to sum
values over these data islands. For instance:

=Sum(if([Island Date] = [Calendar Date] AND [Island Country] = [IP Country


ISO], Signups))

This returns the sum of signups where Calendar Date and IP Country ISO equal
their respective data islands. Issue is it's very resource intensive and not scalable
with our data.

I would like to come up with a solution using set analysis. So far I've tried two
methods:

1) Indirect set analysis using an expression like this:


=Sum({$<[Calendar Date]=P({$} [Island Date]), [IP Country ISO]=P({$} [Island
Country])>} Signups)

2) The Only() function:


=Sum({<[Visit IP Country ISO]={"$(=only([IP Country ISO]))"}>} if([Visit
Date] = [Island Date] , Visits))

The issue with these is that they only work when a selection is made and in my app
this will not be the case as I need to associate sales and traffic values to countries
in the absence of any selections.

If anyone has any tips on how to do this via set analysis, they would be much
appreciated. Basically I'm looking to translate the IF statement above into set
analysis.

247) What is above & below function?

QV12 Above() Below() function in qlikview


above and below lie in the Chart Inter Record Functions category. These
functions can only be used in chart expressions.
SYNTAX is:
above([ total ] expression [ , offset [,n ]])
It return the value from expression, which is previously seen in the execution.
In other words it return the value the row appear above the current row in table
chart.
where we can use above function
- need to create pivot table [accumalation of pivot table]
- need to get the difference and addition of sales (diff. according to month year any
perspective) i.e. accumalative sum
Below is the example with some sample data and we will see the behaviour of
above() function in straigth table as well as in pivot table.
ex:
LOAD * INLINE [
sno, no
1,20
2,578
3,344
4,54
5,34
6,34
7,34
8,34
];
In chart properties add the below expressions:
- sum(no)

- above(no) ~~ above(no,1)
- below(no,1)
- sum(aggr(rangesum(above(total no)),sno))
Reload the document and see the behaviour of table chart.

image

picturization:
1. sum(no) - will give total sumup of expression
2. above(no) ~~ above(no,1)
as you can see i have written above(no) ,above(no,1) two different entities and but
working is same for both. If we skip the offset by default qlikview assume 1.
And see the image above the behaviour is as it start write value from 2 row, by
skipping 1, because offset number is one. If we replace it with two it will start
writing from 3rd row.
- and you can see the first row having null value, because it there is no value above
20.
3. below(no,1) - It start writing in the column the value below in current
expression.
Now we can see the image that the column above(no) and below(no) not summing
up the column.
4. to get the sum for the column we need to do "rangesum" with "aggr()" function.

249) ETL in Qlikview ?.

You can transform the data like Other ETL tools do using Qlikview Scripting. If
you want you can also Expressor tool for Qlikview ETL also.

You can use normal SQL queries to load the data into Qlikview, and if you are
using any Flat files then you have to use LOAD statement of Qlikview.

In Qlikview there are many in built transformations available like CrossTable(for


unpivoting), IntervalMatch, Mapping Load for Lookup, Generic load, Joins like
LEFT, RIGHT and INNER, etc.

Refer Qlikview Reference manual or you buy Qlikview 11 for Developers, in this
books you can find more

For example: What is it you want to Extract, how is to be Transformed, and where
does it need to be Loaded to (or streamed to)? - These initial questions spawn
numerous questions which can get out of control if not properly managed or
carefully planned. Oh and don't forget, that there is always the question if the data
needs to be cleansed and consolidated.

The greater answer is that it always depends on the application, the data, the users
and the questions that need to be answerd by those users. Then there is: how
quickly are you able to get those answers, and who is it you have to rely on to
prepare the systems to give you those answers?

Scripting and expression building can suffice, but there might be some other level
of advanced integration that cannot be achieved, which then requires a
complimentary solution that can.

Believe me, I am not a fan of the "well, it depends" answer - but unfortunately
when it comes to Business Discovery there is more than one answer surrounding
"ETL"

expressor has innovated a great way to combine simplified data integration with
simplified business discovery by introducing QlikView integration in to its Data
Integration platform.

250) Security in Qlikview

QlikView script is made of Two sections.


The Section application is the normal section used to load informations.
You can add a Section access, and load tables with specific format.
These tables will allow you to manage:
Access rights ( ADMIN, USER)
Values rights ( This user can see only this department, etc ..)

In order to do so you should read the QlikView manual and have a look at Section
access chapter.
In case of additionnal help, please post ;)

251) QEMC and QMC

Hi friend......
difference between QEMC and QMC
1>One of the major difference between QMC & QEMC is that you can manage
multiple instances of qlikview server using QEMC but not by using QMC & also
there are sevral settings & configuration which is not possible from QMC like
Active Directory setting,command center configuration,
changing the database for creating QVPR(like from xml to sqlserver) etc
2>QEMC is used when you are dealing with cluster of server and QMC when you
are dealing with one instance of server.
3>QEMC have Publisher by which you can also apply section access

Das könnte Ihnen auch gefallen