Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

formula does not work in load script variable (formule werkt niet in loadscript variabele)

Hi,

I have a dashboard for multiple users to view multiple accounts in the dashboard. Now I want to make a calculation variable that corresponds to the current user calculates which account here. For this, I have a (separate) table with two fields: SBD_User and SBD_StartAccount. Therefore, depending on the logged in user (= OSUser ()) is there so one account associated with it.

Now it succeeds me as I formula in a text field in the dashboard instead:

Only = ({1 <SBD_User = {'$ (OSUser = ())'}>} SBD_StartAccount)

But if I want to use that formula in the load script to define with a variable, then suddenly it does not work anymore. I have in my load script:

NOTE _vCurrentUser = '= OSUser ()';

NOTE _vCurrentAccount = '= Only ({1 <SBD_User = {"$ (OSUser = ())"}>} SBD_StartAccount)';

what does not work (when I'm in a text field: = _vCurrentAccount place, I only get to see a dash

Even with variations on the second LET statement I do not get to each other that the variable $ (_ vCurrentAccount) shows the correct account.

It's just not possible what I want, or someone sees what I have to change to get it working?

Thanks in advance,

Rob

Translated with Google Translate - Qlik Community Administrative Team

Hoi,

Ik heb een dashboard voor meerdere users die in het dashboard meerdere accounts kunnen bekijken. Nu wil ik een berekenings-variabele maken die voor de huidige user berekent welk account hierbij hoort. Hiervoor heb ik een (losstaande) tabel met twee velden: SBD_User en SBD_StartAccount. Afhankelijk dus van de ingelogde user ( =OSUser() ) is er dan dus 1 account die hieraan is gekoppeld.

Nu lukt dit me wel als ik de formule in een tekstveld in het dashboard plaats:

=Only({1 < SBD_User = {'$(=OSUser())'} >} SBD_StartAccount)

Maar als ik die formule wil gebruiken in het loadscript om een variabele mee te definieren, dan lukt het opeens niet meer. Ik heb in mijn loadscript:

LET _vCurrentUser          =     '=OSUser()';

LET _vCurrentAccount     =    '=Only({1 < SBD_User = {"$(=OSUser())"} >} SBD_StartAccount)';

wat dus niet werkt (als ik in een tekstveld: =_vCurrentAccount plaats, krijg ik alleen een streepje te zien

Ook met variaties op de tweede LET statement krijg ik niet voor elkaar dat de variabele $(_vCurrentAccount) het juiste account toont.

Is het gewoon niet mogelijk wat ik wil, of ziet iemand wat ik moet aanpassen om het wel werkend te krijgen?

Alvast bedankt,

Rob

1 Solution

Accepted Solutions
jonathandienst
Partner - Champion III
Partner - Champion III

I hope I have understood you correctly with my limited Dutch

The problem is that the $() expression is evaluated immediately in the Let expression (and it does not help to use a Set). You have to defer the $ expansion. This works:

Let _vCurrentAccount = '=Only({1 < SBD_User = {"$' & '(=OSUser())"} >} SBD_StartAccount)';

Logic will get you from a to b. Imagination will take you everywhere. - A Einstein

View solution in original post

8 Replies
Anonymous
Not applicable
Author

Hi Rob,

Misschien een typ foutje in je post maar in je formule heb je enkele quotes gebruikt en in je script staan dubbele quotes?

=Only({1 < SBD_User = {'$(=OSUser())'} >} SBD_StartAccount)

LET _vCurrentAccount     =    '=Only({1 < SBD_User = {"$(=OSUser())"} >} SBD_StartAccount)';

Kan dat het zijn?

Not applicable
Author

Hoi Dennis,

Dank voor je reply, maar volgens mij niet.

In mn loadscript moet ik dubbele quotes gebruiken, omdat de gehele formule zelf ook al tussen enkele quotes staat.  Volgens mij maakt het niet uit of ik " of '' gebruik (een dubbele of twee enkele quotes). Tenminste... ik heb beiden geprobeerd en beiden werken niet.

jonathandienst
Partner - Champion III
Partner - Champion III

I hope I have understood you correctly with my limited Dutch

The problem is that the $() expression is evaluated immediately in the Let expression (and it does not help to use a Set). You have to defer the $ expansion. This works:

Let _vCurrentAccount = '=Only({1 < SBD_User = {"$' & '(=OSUser())"} >} SBD_StartAccount)';

Logic will get you from a to b. Imagination will take you everywhere. - A Einstein
stigchel
Partner - Master
Partner - Master

Ik denk dat het niet de bedoeling is dat dit in het load script geevalueerd wordt? Dan zou ik ten eerste SET gebruiken i.p.v. LET, ten tweede de $ sign expansion wordt ook in het loadscript getracht in te vullen en dat wil je waarschijnlijk ook niet. Je kunt dat zo voorkomen

LET _vCurrentAccount    =    '=Only({1 < SBD_User = {"$'&'(=OSUser())"} >} SBD_StartAccount)';

Not applicable
Author

Hi Jonathan,

I guess your Dutch is impeccable, your formula works like a charm!

Thanks, should have posted this question earlier, in order to save me a couple of hours and a lot of frustration.

Kind regards,

Rob

Not applicable
Author

Dan je wel, Piet Hein,

Het klopt dat er niet in het loadscript geëvalueerd moet worden, maar met SET krijg ik mijn formule als tekst in mijn dashboard als ik de variabele aanroep.

Het splitsen van de $ en de berekening door '&' ertussen te plaatsen is inderdaad de oplossing die ik nodig had! (Maar aangezien Jonathan eerder was heb ik zijn antwoord als de correcte bestempeld... sorry)

Dank in ieder geval voor het meedenken!

Anonymous
Not applicable
Author

Snel opgelost zo

Nog iets om rekening mee te houden OSUser() geeft (indien aan de orde) ook het domein mee (Dus: Domein\gebruikersnaam) Mocht je alleen de de gebruikersnaam willen , dus zonder domein, dan moet je daar rekening mee houden. bv:

=mid(osuser(),index(osuser(),'\')+1,len(osuser()) - index(osuser(),'\')+1)

Of

=SubField(osuser(),'\',2)

Succes.

Not applicable
Author

Inderdaad snel (ik denk dat ik voortaan al mijn werk hier post...  😉  )

Dank voor deze aanvulling!   Ik merkte dat de domeinnaam meekwam in de osuser() functie, en heb (dus) maar een tabelletje gemaakt waarin deze ook staat. Maar jouw oplossing is netter (en werkt na migratie / tussen testserver en productieserver nog steeds)

Rob