I'm creating a body-wax comparison website for my own project with cakephp4 and I'm stuck with a problem right now and I dunno what to do.
Situation:
There are multiple body-waxing companies, each company has many options for waxing like legs, arms,
beard etc. And each company has different price range for each waxing part.
CompanyA->arms = $60
CompanyA->legs = $30
CompanyB->arms = $50
I already connected to the Companies-table and Parts-table like the image below. Additionally, I came up with the idea of Prices-table too but I'm not sure if it's doable or I need to come up with something else.
Hopefully, I want to edit the price in the companies edit/add pages.
Any help I would appreciate.
I am looking to do some analysis around plastic recycling and interested to know if there is any dataset that gives recycling information for products sold in US. For ex: a product with UPC/EAN number has a resin code of 1 (number written at the bottom of a plastic container). If you have any ideas on how to start creating it will be helpful as well. I understand there is something out there that gives information of a general 1 gallon milk container but I am looking at information on a brand/manufacturer level.
Thanks
in Salesforce, how to create a formula that calculate the highest figure for last month? for example, if I have an object that keeps records that created in Sept, now would like to calculate its max value (in this case, should be 20 on 3/8/2019) in last month's (August). If it's in July, then need to calculate for June. How to construct the right formula expression? Thanks very much!
Date Value
1/9/2019 10
1/8/2019 14
2/8/2019 15
3/8/2019 20
....
30/8/2019 15
You can't do this with normal formulas on records because they "see" only current records (and some related via lookup), not other rows in same table.
You could make another object called "accounting periods" or something like that. Link all these entries to periods (months) in master-detail relationship. You'll then be able to use rollup summary with MAX(). Still not great because you need lookup to previous month to pull it but should give you an idea.
You could make a report that achieves something like that. PREVGROUPVAL will let you do some amazing & scary stuff. https://trailhead.salesforce.com/en/content/learn/projects/rd-summary-formulas/rd-compare-groups Then... if all you need is a report - great. If you really need it saved somewhere - you could look into reporting snapshots & save results in helper object...
If you want to do it without any data model changes like that master-detail or helper object - you could also write some code. Nightly batch job (running daily? only on 1st day of month?) should be pretty simple.
Without code - in a pinch you could make a Flow that queries records from previous month. Bit expensive to run such thing for August every time you add a September record but if you discarded other options...
I have two tables:
tblTimelist which contains a time table field (Time, short time) (from 00:00 til 23:45, with intervals of 00:15)
tblProgScheme which contains the fields prog_ID, BeginShow (short time), EndShow (short time) and ActName.
I want a list based on the BeginShow and EndShow times looking like this:
12:00 Justin Bieber
12:15 Justin Bieber
12:30 Justin Bieber
12:45 Justin Bieber
13:00 Miley Cyrus
13:15 Miley Cyrus
13:30 Miley Cyrus
In this example the values of the fields "BeginShow" and "EndShow" were 12:00 and 13:00 for Bieber respectively and 13:00 and 13:45 for Miley.
I tried all kinds of joins in queries without success.
I think I might solve the problem with VBA because I think I have to code something with a "Do Until Loop" but I cannot find the proper code to put the ActName value somewhere into tblTimeList and making the right criteria at the same time.
Can somebody give me a hint where to find a clue?
Yeah... you found a place where the MS Access Query "Design View" throws hiccups. It can not display queries that use > or < signs.
But even though "Design View" won't display the query nicely, you can go into "SQL View" and paste the following Left Join on a range query:
SELECT
tblTimeList.Time
,tblProgScheme.ActName
FROM
tblTimeList
LEFT JOIN tblProgScheme ON
tblTimeList.Time >= tblProgScheme.BeginShow
AND tblTimeList.Time < tblProgScheme.EndShow
ORDER BY tblTimeList.Time;
This should give you the results you are looking for. Save it and close the query while still in "SQL View".
The only danger is that if you open this in "Design View" and make changes, and then save it... it'll eliminate the code that has > or < signs.
So don't do that.
If you need changes, just make them in "SQL View". (It'll do you good to learn how to code in straight SQL without the "Design View". You can make much more powerful and much more useful Queries that way.)
Also, keep in mind. The above code will allow you to overlap concert times. It will create a entry for each act at each valid time slot. So you could have multiple records with the same time segment where an overlap occurs. To identify if you have any, you can create another query that looks for the duplicate times.
Anyway, I hope that helps and I hope you get to enjoy lots of good music. :)
EDIT
Ok, I know Access 2013 will allow you to use Left Joins. So maybe it's a syntax thing. Double check all of your spellings of your tables and fields. Also check capitalizations (although that shouldn't be a problem, access can be screwy sometimes). Plus add parenthesis and make sure they match properly. Access tries to add parenthesis if you don't include them. Usually it gets it right, but sometimes it guesses wrong and mucks up your code.
With that in mind, try the following:
SELECT tblTimelist.Time, tblProgScheme.ActName FROM tblTimelist LEFT JOIN tblProgScheme ON ((tblTimelist.Time >= tblProgScheme.BeginShow) AND (tblTimelist.Time < tblProgScheme.EndShow)) ORDER BY tblTimelist.Time;
I'm looking for an efficient way of storing sets of objects that have occurred together during events, in such a way that I can generate aggregate stats on them on a day-by-day basis.
To make up an example, let's imagine a system that keeps track of meetings in an office. For every meeting we record how many minutes long it was and in which room it took place.
I want to get stats broken down both by person as well as by room. I do not need to keep track of the individual meetings (so no meeting_id or anything like that), all I want to know is daily aggregate information. In my real application there are hundreds of thousands of events per day so storing each one individually is not feasible.
I'd like to be able to answer questions like:
In 2012, how many minutes did Bob, Sam, and Julie spend in each conference room (not necessarily together)?
Probably fine to do this with 3 queries:
>>> query(dates=2012, people=[Bob])
{Board-Room: 35, Auditorium: 279}
>>> query(dates=2012, people=[Sam])
{Board-Room: 790, Auditorium: 277, Broom-Closet: 71}
>>> query(dates=2012, people=[Julie])
{Board-Room: 190, Broom-Closet: 55}
In 2012, how many minutes did Sam and Julie spend MEETING TOGETHER in each conference room? What about Bob, Sam, and Julie all together?
>>> query(dates=2012, people=[Sam, Julie])
{Board-Room: 128, Broom-Closet: 55}
>>> query(dates=2012, people=[Bob, Sam, Julie])
{Board-Room: 22}
In 2012, how many minutes did each person spend in the Board-Room?
>>> query(dates=2012, rooms=[Board-Room])
{Bob: 35, Sam: 790, Julie: 190}
In 2012, how many minutes was the Board-Room in use?
This is actually pretty difficult since the naive strategy of summing up the number of minutes each person spent will result in serious over-counting. But we can probably solve this by storing the number separately as the meta-person Anyone:
>>> query(dates=2012, rooms=[Board-Room], people=[Anyone])
865
What are some good data structures or databases that I can use to enable this kind of querying? Since the rest of my application uses MySQL, I'm tempted to define a string column that holds the (sorted) ids of each person in the meeting, but the size of this table will grow pretty quickly:
2012-01-01 | "Bob" | "Board-Room" | 2
2012-01-01 | "Julie" | "Board-Room" | 4
2012-01-01 | "Sam" | "Board-Room" | 6
2012-01-01 | "Bob,Julie" | "Board-Room" | 2
2012-01-01 | "Bob,Sam" | "Board-Room" | 2
2012-01-01 | "Julie,Sam" | "Board-Room" | 3
2012-01-01 | "Bob,Julie,Sam" | "Board-Room" | 2
2012-01-01 | "Anyone" | "Board-Room" | 7
What else can I do?
Your question is a little unclear because you say you don't want to store each individual meeting, but then how are you getting the current meeting stats (dates)? In addition any table given the right indexes can be very fast even with alot of records.
You should be able to use a table like log_meeting. I imagine it could contain something like:
employee_id, room_id, date (as timestamp), time_in_meeting
Where foreign keys to employee id to employee table, and room id key to room table
If you index employee id, room id, and date you should have a pretty quick lookup as mysql multiple-column indexes go left to right such that you gain index on (employee id, employee id + room id, and employee id + room id + timestamp) when do searches. This is explained more in the multi-index part of:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
By refusing to store meetings (and related objects) individually, you are loosing the original source of information.
You will not be able to compensate for this loss of data, unless you memorize on a regular basis the extensive list of all potential daily (or monthly or weekly or ...) aggregates that you might need to question later on!
Believe me, it's going to be a nightmare ...
If the number of people are constant and not very large you can then assign a column to each person for present or not and store the room, date and time in 3 more columns this can remove the string splitting problems.
Also by the nature of your question I feel first of all you need to assign Ids to everything rooms,people, etc. No need for long repetitive string in DB. Also try reducing any string operation and work using individual data in each column for better intersection performance. Also you can store a permutation all the people in a table and assign a id for them then use one of those ids in the actual date and time table. But all techniques will require that something be constant either people or rooms.
I do not understand whether you know all "questions" in design time or it's possible to add new ones during development/production time - this approach would require to keep all data all the time.
Well if you would know all your questions it seems like classic "banking system" which recalculates data on daily basis.
How I think about it.
Seems like you have limited number of rooms, people, days etc.
Gather logging data on daily basis, one table per day. Just one event, one database row, all information (field) what you need.
Start to analyse data using some crone script at "midnight".
Update stats for people, rooms, etc. Just increment number of hours spent by Bob in xyz room etc. All what your requirements need.
As analyzed data are limited and relatively small as you analyzed (compress) them, your system can contain also various queries as indexes would be relatively small etc.
You could be able to use scalable map/reduce algorithm.
You can't avoid storing the atomic facts as follows: (the meeting room, the people, the duration, the day), which is probably only a weak consolidation when the same people meet multiple times in the same room on the same day. Maybe that happens a lot in your office :).
Making groups comparable is an interesting problem, but as long as you always compose the member strings the same, you can probably do it with string comparisons. This is not "normal" however. To normalise you'll need a relation table (many to many) and compose a temporary table out of your query set so it joins quickly, or use an "IN" clause and a count aggregate to ensure everyone is there (you'll see what I mean when you try it).
I think you can derive the minutes the board room was in use as meetings shouldn't overlap, so a sum will work.
For storage efficiency, use integer keys for everything with lookup tables. Dereference the integers during the query parsing, or just use good old joins if you are feeling traditional.
That's how I would do it anyway :).
You'll probably have to store individual meetings to get the data you need anyway.
However you'll have to make sure you aggregate and anonymise it properly before creating your reports. Make sure to separate concerns and access levels to stay within the proper legal limits on data.