Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us to spark ideas for how to put the latest capabilities into action. Register here!
cancel
Showing results for 
Search instead for 
Did you mean: 
datanibbler
Champion
Champion

Date function - I have a cw and I need a date


Hi,

I have the requirement of adding to a table where I have, for every day, a number of "man-hours" in the early shift and one in the late shift.

To that, I need to add from a second table (derived from the personnel-plans of which there are 2 for each week (one for early shift, one for late shift) - in that, I have a year (derived from the file_name) and a calendar_week (and a shift).

=> Now I have to "pump up" that second table so that I can add its contents to those of the first - I need to generate all five working_days of a calendar_week out of the same (cw).

Can anybody give me a hint how to do this?

Thanks a lot!

Best regards,

DataNibbler

P.S.: I think I know a way, even if it's maybe not the most elegant/ slim one: I have a master_calendar - the code is in a qvs_file as it's used everywhere - where I have both the cw and the date. So I can use that.

1 Solution

Accepted Solutions
marcus_sommer

Hi DataNibbler,

try something like this:

t1:

Load

     makeweekdate(Year, Week, iterno() - 1) as Date, Value

From xyz

While iterno() < 5;

- Marcus

View solution in original post

9 Replies
marcus_sommer

Hi DataNibbler,

try something like this:

t1:

Load

     makeweekdate(Year, Week, iterno() - 1) as Date, Value

From xyz

While iterno() < 5;

- Marcus

datanibbler
Champion
Champion
Author

Hi Marcus,

many thanks!

I didn't know this function. I have been through all the Date-and-Time-functions several times before (which are, in my outdated version of QlikView, all on one page in the help_file), but I have never really noticed that one.

Best regards,

DataNibbler

datanibbler
Champion
Champion
Author

Hi Marcus,

I seem to have some issue here:

- I have used that code quite exactly like you posted it:

Tage generieren:

LOAD

      Makeweekdate(Jahr_StSt_WE, KW_StSt_WE, iterno()-1) as Datum_StSt_WE

RESIDENT Staplerfahrer_WE

WHILE iterno() < 5;

(that should be <=5, I just notice)

The problem is, I load RESIDENT from the table I have generated out of the personnel_plans - but in that, I have about 20 lines per cw - 2 shifts, several employees of course - so by doing this RESIDENT, I get 4 workdays for every line in that table, not only for every cw.

Is there any way round this without creating a temporary aggregated table?

P.S.: OK, I'll just squeeze in a >> LOAD DISTINCT << with just those two fields, run that little code and drop that temp_table again. Then my figures should line up. Every cw should then be joined with 5 records, so I should end up with (700*5) = 3.500 records.

P.P.S.: ... and I do. Hurray!

Not applicable

Hi,

Try using :

LOAD *,

makeweekdate(Year, Week, iterno() - 1) as NewDate,

Value

From abcd

While iterno() <= 5;

Regards,

Snehal Nabar

marcus_sommer

Hi DataNibbler,

it's difficult to say which way might be the best. Maybe a loop outside which runs through the shifts or you reduced your table before the while-load and then extend this again per joining or mapping - but I don't think it would be easier or save time as to use a temporary aggregated table - sometimes it's good to be pragmatic.

- Marcus

datanibbler
Champion
Champion
Author

Hi,

well, it works, so I'm happy for the moment.

Now I have quite another issue:

That same code, which works fine, in one of my apps, suddenly seems to not work when I copy it into one of our main data_loading apps. That's very strange. The file_paths can't be it anymore, I have already made them all explicit - no relative paths anymore.

Anyway, this one is solved.

Thanks a lot!

datanibbler
Champion
Champion
Author

Hi Marcus,

somehow I can't quite get behind this:

There is a date_filter in a LOAD (in a FOR EACH loop) that should actually load 2 Excel_files.

In one of my apps, that works fine. In the other, that LOAD returns 0 lines - when I remove the date_filter, it returns 2, so that is the problem all right.

The filter looks like this:

>> WHERE Date(Floor(Filletime()), 'DD.MM.YYYY') > '30.05.2014' <<

The difference is obvious: In the app where it works, the date_format (on the "Main" tab) is set to 'DD.MM.YYYY'; In the other (where it doesn't work), it is set to 'DD/MM/YYYY'

<=> but isn't that only a display_format for the GUI? Isn't a date (or timestamp as it is here) always stored in numeric format?

Alternatively, I could just use the numeric value.

Best regards,

DataNibbler

marcus_sommer

I think the reason is the default date-format in this app which don't led to a numeric interpretation from '30.05.2014' and therefore the where-clause will fail, try it instead with:

WHERE Date(Floor(Filletime()), 'DD/MM/YYYY') > '30/05/2014'

or use directly numeric conditions:

WHERE num(Floor(Filletime())) >41789

whereby the format-functions by default-formats or numeric functions like max() or floor() shouldn't be necessary.

- Marcus

datanibbler
Champion
Champion
Author

Hi Marcus,

I don't quite understand the background of this which is kind of annoying - but I do understand why it works one way and not another.

What you suggest was just my thought actually - I was thinking about adapting the date_format, but I settled on using numeric values instead.

So I constructed that date using num(MAKEDATE()) and I now have the filter just like your second proposal - without the num() around it.

Thanks a lot!

Best regards,

DataNibbler