Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[access 2007] voorwaardelijke opmaak rapport

Pagina: 1
Acties:

  • nockelyk
  • Registratie: Juli 2007
  • Laatst online: 11-09-2023
Ik heb een rapport met verschillende bedrijfswaarden voor ieder jaar. Nu zou ik graag willen in mijn rapport dat van zodra een bedrijfswaarde (zoals bijvoorbeeld de omzet) lager is dan die van het voorgaande jaar dat deze waarde wordt weergegeven in het vet.

Voor mocht het niet duidelijk zijn heb ik voorbeeldje...
2004 500
2005 600
2006 200
2007 300
Het is de bedoeling dat in mijn rapport dan automatisch de waarde "200" in het vet zou komen...


Ik vermoed dat ik dit kan doen via voorwaardelijke opmaak en dan een expressie opgeven... ik heb echter geen idee met welke expressie ik dit kan doen....

Kan iemand mij verder helpen?

  • Falcon
  • Registratie: Februari 2000
  • Laatst online: 21-11 10:36

Falcon

DevOps/Q.A. Engineer

Als je gegooglet had, dan had je deze gevonden:

http://www.access-program...ipsReports.htm#ReportBold

Helemaal onderaan staat wat je precies wil.

"We never grow up. We just learn how to act in public" - "Dyslexie is a bitch"


Verwijderd

Dat is de vraag niet. TS wil weten welke expressie hij moet gebruiken.

Voorzover ik kan zien wil je een controle doen op de waarde van het voorgaande jaar; als die waarde hoger ligt dan die van het huidige jaar, moet de waarde van het huidige jaar een bepaalde opmaak krijgen. Klopt dat?

  • nockelyk
  • Registratie: Juli 2007
  • Laatst online: 11-09-2023
Bedankt voor uw antwoordt maar die formule die jij mij gaf is niet echt wat ik zoek... deze is enkel om een bepaalde waarde in het vet te zetten als deze lager is dan bijvoorbeeld 10... het probleem bij mij is dat de waarde enkel mag vet worden gezet als deze lager is dan die van het voorgaande jaar....

Ik heb ook reeds intensief zitten zoeken via google maar niets gevonden...

  • nockelyk
  • Registratie: Juli 2007
  • Laatst online: 11-09-2023
je was me voor alargule ;)
het klopt inderdaad wat je zegt

[ Voor 6% gewijzigd door nockelyk op 19-01-2010 15:32 ]


Verwijderd

Waar ik zogauw aan kan denken is het volgende:

1) maak een query 'query1' aan met daarin iig de velden 'jaar' en 'omzet' uit je brontabel ('brontabel'), en voeg daaraan een veld toe 'vorig jaar'. Dat definieer je als volgt: [jaar]-1. Je krijgt dan dus de waarde van het vorige jaar. Ik ga er hierbij vanuit dat alle jaren in je brondata aaneengesloten zijn;

2) maak een nieuwe query 'rapportquery' aan die je als bron gebruikt voor je rapport. Daarin zet je twee bronnen: je query uit punt 1 ('query1') en je brontabel ('brontabel');

3) maak een LEFT JOIN [Query1].[vorig jaar] = [brontabel].[jaar] en voeg vervolgens aan de rapportquery de velden [query1].[jaar], [query1].[omzet] en [brontabel].[omzet] toe. Het beste geef je het veld [brontabel].[omzet] in je rapportquery een nieuwe naam mee, bijv 'omzet vorig jaar';

4) gebruik 'rapportquery' als databron voor je rapport, en voeg aan het veld 'omzet' bij voorwaardelijke opmaak de expressie [rapportquery].[omzet]<[rapportquery].[omzet vorig jaar] toe.

Als het goed is moet dat lukken (heb het hier zelf met wat pseudodata getest). De tabel-, query- en veldnamen hierboven zijn natuurlijk puur ter illustratie; die moet je dus naar je eigen situatie aanpassen.

Als iemand een eenvoudiger oplossing met bijv. expressies in het rapport zelf weet, houd ik me aanbevolen ;)

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Persoonlijk zou ik gewoon conditional formatting doen met als expressie iets als kolomnaam=dmin("kolomnaam","tabelofquerynaam") ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Pyrowired
  • Registratie: Februari 2004
  • Laatst online: 05-01 16:00
pedorus schreef op dinsdag 19 januari 2010 @ 17:43:
Persoonlijk zou ik gewoon conditional formatting doen met als expressie iets als kolomnaam=dmin("kolomnaam","tabelofquerynaam") ;)
Dan kan je beter een DLookup("veld";"tabel";"Select criteria") opgeven omdat bij jou de laagste waarde wordt opgehaald, niet de waarde van het jaar voor het jaar van het regel in het rapport.

Iets in de richting van
code:
1
DLookup("[Omzet]";"bedrijf";"[jaar_uit_bedrijf] = " & rapport.Veld_jaar - 1)


Dit heb ik niet getest, heb al een hele tijd weinig tot niets met Access gedaan dus YMMV

Zolang de zon schijnt, blijf ik binnen.


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Je hebt helemaal gelijk, dat had moeten zijn: [omzet]<dlookup("omzet","tabelofquerynaam","jaar="&[jaar]-1)
Gelukkig is het idee hetzelfde. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • nockelyk
  • Registratie: Juli 2007
  • Laatst online: 11-09-2023
bedankt voor de hulp!

code:
1
 [omzet]<dlookup("omzet";"microdata";"jaar="&\[jaar]-1)


De dlookup functie lijkt me inderdaad het werkbaarst....
Er zit wel nog ergens een klein foutje in, hij geeft wel sommige waarden in het vet aan maar dat lijkt eerder willekeurig te gebeuren.
Ik zal het zelf vanavond of morgen nog eens uitgebreid uitzoeken en laat nog iets horen als ik het foutje vind ;)

  • Moirraine
  • Registratie: Mei 2008
  • Laatst online: 13-02-2024
nockelyk schreef op woensdag 20 januari 2010 @ 17:08:
bedankt voor de hulp!

code:
1
 [omzet]<dlookup("omzet";"microdata";"jaar="&\[jaar]-1)


De dlookup functie lijkt me inderdaad het werkbaarst....
Er zit wel nog ergens een klein foutje in, hij geeft wel sommige waarden in het vet aan maar dat lijkt eerder willekeurig te gebeuren.
Ik zal het zelf vanavond of morgen nog eens uitgebreid uitzoeken en laat nog iets horen als ik het foutje vind ;)
code:
1
 [omzet] < dlookup("[omzet]";"microdata";"[jaar]=" & [jaar] -1)


Even een paar spaties en sluistekens toegevoegd. Spaties na een "&" is verplicht, in 99 van de 100 gevallen zijn sluistekens in een dlookup vereist voor de veldnamen en een "/" weggejorist, want anders deel je niets door het jaar ;)

Ik garandeer uiteraard niets, maar misschien was dat de fout wel (valt me trouwens mee dat Access niet de bietenbrug op ging van de syntax)

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

De oplossing van Alargule is zo gek nog niet, al kan hij wel beduidend simpeler.
tabel 'resultaat' met de velden 'jaar' en 'omzet'
SQL:
1
2
SELECT resultaat.jaar, resultaat.omzet, resultaat.omzet<rvj.omzet AS gezakt
FROM resultaat LEFT JOIN resultaat AS rvj ON resultaat.jaar-1=rvj.jaar;


Met dit als bron voor het rapport is de conditie-expressie enkel: '[gezakt]'.


Dlookup is helaas tergend traag*, en imo niet geschikt om gebruikt te worden in rapporten / doorlopende formulieren als de dataset die eronder ligt enige omvang heeft. Met een paar records zul je het verschil niet merken, maar het wordt snel irritant.

Een vergelijkbare query met dlookup:
SQL:
1
2
SELECT resultaat.jaar, resultaat.omzet, [omzet]<DLookUp("omzet","resultaat","jaar=" & [jaar] -1) AS gezakt
FROM resultaat;


Is veel en veel trager. Het openen en doorlopen van een set van 10000 records duurt hier (A2k3) voor query 1 < 0,1 s; de 2e query is daar 32 seconden zoet mee. :p


* iig t/m Access2003, in 2007 heb ik het nog nooit gebruikt

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ook in 2007 is Dlookup traag, maar hoeveel bedrijven ken je die al 10.000 jaar bestaan? ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

offtopic:
Nie veul, al lijken sommige bedrijven wel al die tijdspanne onder het stof te liggen
;)

Voor dit probleem zal het idd zo'n vaart niet lopen, maar Domeinfuncties in doorlopende rapporten of formulieren is niet iets wat ik iemand aan zou willen leren. :P

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Een belangrijk aspect is dat voorwaardelijke opmaak pas wordt geëvalueerd op het moment dat het nodig is. Een query wordt daarentegen wel geheel geëvalueerd. Daarom denk ik dat het op de meeste formulieren geen kwaad kan (er past toch niet zoveel op het scherm), en het de boel eenvoudiger houdt. Bij rapporten van vele regels moet je je sowieso afvragen wat voorwaardelijke opmaak in zo'n rapport doet. ;)

Dlookup in een query gebruiken is over het algemeen niet handig, en niet iets om aan te leren.. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • nockelyk
  • Registratie: Juli 2007
  • Laatst online: 11-09-2023
Bedankt voor alle hulp, alles loopt ondertussen perfect ;)
Pagina: 1