Jump to content
  • 0

Resultaat in portaaloverzicht


DEER

Question

Hallo,

 

Kan iemand me verder helpen ?

 

In mijn FM-database staan een groot aantal bedrijven + allerlei bedrijfsgegevens opgeslagen. Met behulp van selectievakjes zijn bij de invoer van de bedrijfsgegevens diverse eigenschappen aangekruist.

 

Nu ga ik selecteren op basis van meerdere keuzes. Daartoe worden alle eigenschappen in dezelfde volgorde in een soort binaire rij geplaatst: aangekruist = 1 en niet aangekruist = 0. Je krijgt dan een reeks van bijvoorbeeld 0000000100000000110000000 . Er zijn hierbij 3 eigenschappen aangekruist. Bij het sorteren worden de overeenkomende '1'-nen op dezelfde plek eruit gevist: dit vormt dan de geselecteerde reeks.

 

Alle bijbehorende bedrijfsnamen worden netjes in een tabel getoond, maar dat gebeurt niet in een portaal in de formulierweergave. De portaal laat per gevonden record alleen die bedrijven zien die voldoen aan exact dezelfde binaire reeks. Op zich heel correct.

 

Maar nu het probleem: Als ik 1 eigenschap kies dan is het mogelijk dat meerdere bedrijven getoond worden. Het zoekresultaat wordt compleet getoond in een tabeloverzicht. Maar in het portaaloverzicht worden de bedrijven gerangschikt naar de overeenkomende binaire reeks. Je moet scrollen om alle bedrijven tevoorschijn te krijgen.

Hoe krijg ik alle bedrijven, zoals getoond in het tabeloverzicht ongeacht de samenstelling van de binaire reeks, netjes onder elkaar in een portaaloverzicht.

 

Ik hoop dat dit verhaal duidelijk is.

 

Bedankt.

Link to comment

11 answers to this question

Recommended Posts

  • 0

voorzover ik het snap...

dan zou je voor elke bedrijfscode niet een binair maar een normaal geheel getal (1,2,3,...) moeten kiezen. het filter voor de portaal moet vervolgens in return-gescheiden lijstje staan, dus bijv.4¶9¶18 (kan met aankruisvakjeslijst bijv.)

je zou de "binaire reeks" om kunnen zetten met een berekeningsveld, zoiets als dit:

 

let ([

reeks = jouwbinairegetal ;

p1 = case ( Middle ( reeks ; 1 ; 1 ) ; "1¶" ) ;

p2 = case ( Middle ( reeks ; 2 ; 1 ) ; "2¶" ) ;

p3 = case ( Middle ( reeks ; 3 ; 1 ) ; "3¶" ) ;

p4 = case ( Middle ( reeks ; 4 ; 1 ) ; "4¶" )

//...enz...

] ;

p1 & p2 & p3 & p4 // & enz....

)

 

- als het aantal bedrijfseigenschappen onbepaald is heb je eerder een CF nodig die recursief de lijst samenstelt.

- als het je gaat om een uniek getal dat de combinatie van eigenschappen uitdrukt voor dat bedrijf, moet je 2^(positie van het binaire getal) nemen en dat bij elkaar optellen. (positie tellen vanaf 0)

dan is

11111 = 2^0 + 2^1 +2^2 + 2^3 + 2^4 = 1+2+4+8+16 = 31

00101 = 2^2 + 2^4 = 20

je kunt de bovenstaande daarop aanpassen (dus niet de reeks 1,2,3,4 als resultaat maar 1,2,4,8,16,... en dan optellen in plaats van in een lijst zetten)

Link to comment
  • 0

Vraagje: wat gebeurt er in jouw oplossing anders dan in de mijne ?

Er zijn op dit moment 36 verschillende eigenschappen voorgeprogrammeerd. Per bedrijf worden slechts enkele gebruikt. Stel even ter verduidelijking: 25 van de 35 bedrijven zijn klant. Van die 25 zijn 10 scholen en 5 overheidsinstellingen en 3 kantoren. Ik wil uit de reeks 35 bedrijven de klanten selecteren.

In de tabelweergave worden alle 25 netjes zichtbaar, dwz 25 records met namen van klanten

In de portaalweergave weer de vermelding (in het linker werkvenster) van 25 records. Ga je langs de 25 records scrollen, dan zie je resp. 3 verschillende portaaloverzichten: de groep van de scholen (10 namen onder elkaar), de groeps van de overheidsinstellingen ( 5 namen onder elkaar) en tot slot de groep van de kantoren ( 3 namen onder elkaar).

 

Ik had graag in één portaaloverzicht alle 25 namen onder elkaar.

 

Is jouw uitleg de sleutel tot de oplossing van geschetst probleem. Klinkt een beetje raar misschien, maar ik doorzie jouw versie niet helemaal. Ik kan beter nog een keer vragen, dan een heleboel tijd steken in iets wat achteraf misschien niet had gehoeven.

 

Neem mijn onbegrip niet kwalijk.

Link to comment
  • 0
wat gebeurt er in jouw oplossing anders dan in de mijne ?

in de mijne heb je 1 portaal en een checkbox veld ernaast (globaalveld). de checkbox bevat de (in gehele normale getallen 1,2,3,4,....) omgezette lijst van alle mogelijke eigenschappen.

Het checkboxveld is de ene kant van de relatie, het berekeningsveld van de records met bedrijfsgegevens is de andere kant.

 

klik je in het checkboxveld op 1,2 en 5, dan zie je in de portaal alle bedrijven die 1 en/of 2 en/of 5 in de eigenschappenlijst hebben.

 

als je alleen de bedrijven wilt zien die aan alle voorwaarden voldoen, dus bijv 1 én 2 én 5, dan zit er niets anders op dan voor elke filterwaarde een apart globaalveld te maken en in het relatiediagram ze allemaal te relateren aan het berekeningsveld met bedrijfsgegevens (dus als AND in de definieer relatie dialoog). 35 filtervelden is misschien wat veel, maar stel nu dat je er 5 maakt en ze koppelt aan een popup lijst met de 35 mogelijke typen. dan kom je een heel eind.

 

als je iets anders wilt, lijkt het me beter als je iets van je database laat zien, bijv. een kopie, kloon, gestripte versie, of een paar screenshots van je scherm en je relatiediagram. uit je eerste post begreep ik iets totaal anders dan uit je tweede. 8)

 

laat dat idee met dat unieke getal uit de binaire reeks maar zitten, dat is onwerkbaar met 35 posities. 8O

Link to comment
  • 0

In bijgaande 'codering.jpg' is het resultaat te zien na het zoeken op 1 categorie, nl. "klanten". In totaal zijn het er 12 die allemaal in de tabelweergave getoond worden. (codering.jpg is een screenshot van dit deel uit de tabel). Aan de 12 bedrijven in dit voorbeeld zijn op 6 verschillende combinaties van eigenschappen toegekend. Alleen de eigenschap "klant" hebben ze allemaal gemeenschappelijk.

 

In het plaatje zie je 6 onderverdelingen: 2, 5, 6, 8, 10, 11, 12 en 1 en 3 en 4 en 7 en 9.

 

Ik wil ze in een portaal ook allemaal gelijktijdig zichtbaar hebben. Zoals nu geprogrammeerd is moet ik 6 maal scrollen om de 6 groepen achtereenvolgens zichtbaar te maken.

 

In de relatiegrafiek (basisbestand = bedrijven) wordt in het hoofdvenster in een portaal alle bedrijven getoond vanuit bedrijven 2. Na de selectie worden de geselecteerde bedrijven in een ander venster getoond in een portaal vanuit bedrijven 3

 

'k Ben benieuwd naar je antwoord. Als je meer info wilt, lees ik het wel.

codering.jpg.1b108b09e3c5fac9de888a8834f11bfc.jpg

relatie.jpg.718cbb162893dbb32bdb3ab12fd1628a.jpg

Link to comment
  • 0

Hoi,

 

Als ik je goed begrijp wil je dus bij de bedrijven bijhouden bij welke geselecteerde categorieën ze gevonden moeten worden.

Een bedrijf moet bij meerdere categorieën gevonden worden.

Daarnaast wil je als je een bedrijf selecteert in een detailweergave een portaal laten zien met bedrijven die voldoen aan de geselecteerde categorieën.

 

Ik begrijp de noodzaak van al die nullen en enen niet, maargoed, als je dat toch nodig hebt zou je dat natuurlijk gewoon in stand kunnen houden voor de dingen waar het wel voor werkt. Ik heb een simpele oplossing voor bovenstaand probleem, als ik het dus goed begrepen heb zou je hier wat aan kunnen hebben.

resultaatportaal.fp7

Groet, Niels

Link to comment
  • 0

Volgens mij kom je toch wel ergens met mijn eerste reactie. Voor de duidelijkheid... het gaat erom dat je een relatie op "multikey" legt. Dat wil zeggen dat je aan beide kanten van de relatie meerdere waarden kunt hebben. Dit werkt in filemaker alleen als je een return ( dus ¶-) gescheiden lijst met waarden gebruikt. Vandaar mijn suggestie om aan Codering_ber_tot een berekeningsveld te koppelen dat een return gescheiden lijst maakt. Aangezien jouw lijst ("00101000111100000000") geen unieke waarden bevat, is een verdere truuk nodig. Je moet dan aangeven of de positie in de reeks 'true' is of 'false'. Dat kan eenvoudig door van de posities die 'true' zijn, dus 1, het positienummer te noteren en van de rest niet. dan wordt de berekening dus:

 

Multikey_rechterzijde { berekening, tekst resultaat, opgeslagen } =

let 
([
 reeks = Codering_ber_tot ;
 p1 = case ( Middle ( reeks ; 1 ; 1 ) ; "1¶" ) ; // als de eerste positie 1 is, zet dan 1¶ aan
 p2 = case ( Middle ( reeks ; 2 ; 1 ) ; "2¶" ) ; // als de tweede positie 1 is, zet dan 2¶ aan
 p3 = case ( Middle ( reeks ; 3 ; 1 ) ; "3¶" ) ; // enzovoorts
 p4 = case ( Middle ( reeks ; 4 ; 1 ) ; "4¶" ) ;
 //...enz...
 p35 = case ( Middle ( reeks ; 35 ; 1 ) ; "35¶" ) ;
] ;
p1 & p2 & p3 & p4 // & enz.... // oftewel zet alle posities onder elkaar. filemaker negeert de nullen. 
) 

 

definieer nu een waardenlijst 1,2,3,4,5,6,7,8,.....

definieer nu een tekstveld Multikey_linkerzijde, koppel de waardenlijst aan dit veld als aankruisvakjes. Maak het veld smal en zet de "echte" waarden in tekst er naast in de layout.

ga naar het relatiediagram. verander de relatie bedrijven3::bedrijven in Multikey_linkerzijde::Multikey_rechterzijde

als je nu de waarde 6 aankruist in Multikey_linkerzijde verschijnen als het goed is alle records in de portaal die in Codering_ber_tot de zesde positie een 1 hebben.

 

ik vraag me wel af wat dat nu voor waarden zijn en wat je bedoeling is met deze manier van zoeken. in eerste instantie leek het me dat je met iets statistisch bezig bent?

je gaat in problemen komen als de eigenschappenlijst ooit wijzigt. dus je database structuur kent problemen volgens mij.

 

afijn... zie voorbeeld

 

@niels: je hebt gelijk, de UI wordt ook nogal ingewikkeld. maar de bedoeling en de opbouw van de database is me nog steeds niet helemaal duidelijk. waar staan nu die 01010001100 voor....

FilterEigenschappen.fp7.zip

Link to comment
  • 0

'k Ben blijkbaar heel slecht in het uitleggen...

In onze database staan een groot aantal bedrijven. Aan ieder bedrijf worden een aantal eigenschappen toegekend bij de invoer. Hij is bijv. leverancier of fabrikant of klant. Hij heeft 1 vestiging of tussen 1 en 10 of meer dan 10. Hij zit in de overheidssector of onderwijs of.... vul maar in. En zo hebben we er 35 "eigenschappen" bedacht. Het is mogelijk dat aan een bedrijf slechts 1 eigenschap -uit onze serie- is toegekend of meerdere.

 

Soms willen we onze database aan bedrijven filteren op bepaalde eigenschappen. Dit kunnen dus 1 of meerdere gelijktijdig zijn.

Om de zoekopdracht snel te laten verlopen hebben we bedacht om alle 35 eigenschappen te bundelen in bedoelde binaire reeks. Een "1" betekent dat ie eigenschap "x" heeft en een "0" dat ie eigenschap "x" niet heeft.

 

Via een script met zoekopdracht heb ik geprobeerd de uitslag in een portaal zichtbaar te maken. In deze script wordt het een filter samengesteld uit een groep van 35 (eigenschappen) selectievakjes. In feite wordt hierin weer een binaire reeks gecreëerd. De zoekopdracht vergelijkt welke "1"-nen van het script (=filter) overeenkomen met de binaire reeks. De uitslag moet in een portaal zichtbaar worden gemaakt.

 

In tabel Codering_Ber_Tot heb ik willen aantonen welke combinaties na de zoekopdracht zoal tevoorschijn kunnen komen. In de tabel worden ze allemaal getoond, maar in een portaal worden per 'scroll' alleen die combinaties getoond die identiek zijn.

 

'k Heb ResultaatPortaal.fp7 uitgeprobeerd, maar deze heeft het nadeel dat er, naarmate je meer eigenschappen aankruist, meer records getoond worden.

In mijn optiek is dit niet de bedoeling.

In de praktijk is het zo: hoe meer eigenschappen je aangekruist, des te minder bedrijven aan dit filter voldoen: Iedereen kan klant zijn, maar niet iedereen heeft meer dan 10 vestigingen EN zit bij de overheid EN is klant.

 

'k Heb FilterEigenschappen.fp7 uitgeprobeerd, maar deze heeft het nadeel dat ie het EN EN verhaal (zie boven) niet ondersteunt.

 

Kortom, het ei van Columbus laat nog op zich wachten.

Link to comment
  • 0
In de praktijk is het zo: hoe meer eigenschappen je aangekruist, des te minder bedrijven aan dit filter voldoen: Iedereen kan klant zijn, maar niet iedereen heeft meer dan 10 vestigingen EN zit bij de overheid EN is klant.

 

laatste poging... zie bijlage. toch met omzetting binair - normaal geheel getal gewerkt. elke combinatie van 010011101100110101 heeft dan zijn eigen unieke getal. met aan de andere kant, gekoppeld aan het keuzefilter, dezelfde berekening.

 

nu ik erover nadenk, de berekening in Filtercodering zou je ook kunnen aanpassen om aan de filterkant 010101001001 op te bouwen, en dan rechtstreeks relateren met Codering_Ber_Tot. tja.de index voor relaties gaat tot de eerste honderd karakters als ik me niet vergis, dus dat zou probleemloos moeten kunnen.

FilterEigenschappenUniek.fp7.zip

Link to comment
  • 0

Ik denk dat wat je wilt en hoe je dat wilt misschien gewoon geen goed idee is.

Als dingen zo ingewikkeld worden en zo moeilijk uit te leggen zijn betekent dat meestal dat het simpeler kan.

 

Je zegt dat je via een zoekopdracht het resultaat wel in een tabel overzicht te zien krijgt maar niet in een portaal.

Dat zou betekenen dat je het resultaat ook in een lijstview kunt produceren.

Je zou dus ook het portaal kunnen laten zitten en in plaats daarvan een lijstview gebruiken waarbij je de detailgegevens van het geselecteerde record laat zien in je kop of voet gedeelte.

 

Het is maar een gedachte hoor.

Groet, Niels

Link to comment
  • 0

Mensen, bedankt voor jullie meedenken.

Het ei van Columbus bleef deze keer overeind: In de tabel hierboven (codering.jpg) staat in lijstvorm het resultaat van een zoekopdracht met een script.

Aan de tabel "bedrijven" heb ik een extra veld toegevoegd: ExtrVd

Aan bovengenoemd script wordt na de zoekprocedure een "veldinstellen" opdracht toegevoegd met een looping om in alle opgezochte records het veld ExtrVd te voorzien van een exact gelijke unieke code.

In de relaties is een relatie gelegd tussen bedrijven 3 : ExtrVd en bedijven : ExtrVd.

En ziedaar: het portaal zet alle geselecteerde bedrijven netjes onder elkaar ongeacht of zij al dan niet meerdere gemeenschappelijke eigenschappen hebben.

 

Het idee werd gehaald uit het relatiegebeuren wat in beide FP7-bestanden werd gebruikt.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...