Professional Documents
Culture Documents
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.
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.
There are examples of these in the What's New in QlikView 11 example document,
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.
WHERE Exists(Field)
if more than one column linked between two tables its create sythetic key.
9) 3 tier architecture?
Data Source
- 1 Tier
Data model
- 2 Tier
Qvd
- 3 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.
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.
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.
Insert Only
so we can create two or more alternate states with different selections for same
data.
we can create alternate states in Settings menu - Document propeties - general tab alternate states button.
"..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."
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
];
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
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.
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.
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.
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.
Year, Sales
2013, 200
2012, 100
If you use TOTAL it ignores the expression, so in every row you will get the
overall total.
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
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.
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.
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?
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).
=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
2)=aggr(if(rank(sum(Sales))<=5,Country),Country)----On dimension-
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) ,
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).
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.
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:
Example dataset:
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 :
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:-
Modifiers:
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.
Optimized load is much faster and therefore preferable, especially for larger data
sets.
WHERE Exists(Field)
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:
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.
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).
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
66) master claender is there why u are using Quarter in set analysi?
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)
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
70) Db idea?
a) yes.
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;
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
1.
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.
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.
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
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.
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".
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.
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():
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.
Star schema gives better results especially for qlikview.why because if there is less
no of joins qlikview works faster .
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:
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:
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
;
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
Key
Key
1
2
A
A1
A2
C
C1
A1
C1
C2
A2
C2
A3
A3
C4
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.
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.
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.
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...
HtH
Roland
2)=aggr(if(rank(sum(Sales))<=5,Country),Country)----On dimension-
Also Calculated dimension also had very bad performance, so better avoid
calculated dimensions.
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.
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
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())))
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.
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.
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)
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.
Let us see how your script will look when you dont check the preceding Load
while selecting the table.
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.
There can be multiple preceding loads stacked one on the top of other.
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;
Transaction_Id,
Transaction_date
FROM Transaction;
If you are able to manage with preceding load, then it is better than Resident
reload.
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;
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.
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:
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;
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)
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.
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
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;
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.
194) i write load *,store into some QVD then i droped tablenable name how many
will be there in tabler view?
Zero.
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.....
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...
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 ?
MyMap1:
mapping load idValue, textValue;
tab1:
load field1, field2, applymap('MyMap1', field3, 'value if map does not find field3
in map table');
Check the QV Reference manual for a complete manual of howto use maps.
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...
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;
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
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)
Returns the name of the currently active field in a group. (From Qlikview Help)
=ValueList('KPI1','KPI2')
=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
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.
1) To loop on files
a) For each file in FileList('*.xlsx')
Load .... FROM $(file) ....
Next
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';
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);
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:
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:
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.
- 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.
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.
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.
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 ;)
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