ElasticSearch: facet for price dependent on date range - elasticsearch

I have a database of services with prices and I want to search on service name and show facet with price ranges and counts. Searching on such database would be simple, nevertheless the price is dependent on date and thus can fluctuate.
Service 1 | 1.1.-15.2. $50 | 16.2.-10.5. $80 | 11.5.-20.7. $90
Service 2 | 1.1.-14.2. $60 | 15.2.-11.5. $90 | 12.5.-21.7. $80
Service 3 | 1.1.-18.2. $70 | 19.2.-17.5. $50 | 18.5.-25.7. $70
I would like to provide a search based on name and date range when user is looking for a service:
Filter example: 'car washing' between 1.2. - 15.3.
RESULT
Display: services with given text that are provided in the given date range
Facet Price group: $0-$50 (23), $50-$100 (14), $100-$150 (5)
- number of services within price bucket
REMARKS
I believe this is easy when price would be static, but I find it hard when it is dependent on provided date range. For example how to deal when user defines a date range that overlaps 2 different prices of a matched service? Can ElasticSearch take the lowest price for example? How to deal with such case in ES?

Related

Sotring massive data by a parameter in Google Sheets

I have a massive table with data that looks like. Let's call it "Initial data"
place | phone number | prize ($)| promotion | client status | personal manager
Every column has own data in it. And there can be doubles.
What's the goal
To make new sheet list (call it 'Sorted data'), where we have columns
sort Parameter | phone number | number of prize places | client status | personal manager | Average prize | average place
We have such sort parameters:
by number of prize places in all the promotions
by status
by personal manager
by average place
by average prize
So when we choose sort parameter we have sorted data in other columns by this parameter
Any ideas on how to it can be made?
if Sheet1 looks like this:
then Sheet2:
=ARRAYFORMULA({Sheet1!A1:F1; SORT(Sheet1!A2:F, MATCH(B1,
{"place","phone number","price","promotion","client status","personal manager"}, 0),
IF(B2="ascending", 1, 0))})
spreadsheet demo

Oracle BI EE filter on same dimension

I am new to OBIEE and would like to create an analysis where I can place one next to the other 2 columns with figures from same dimension but with different data.
To better explain it: let's say that in Dim1 we have Invoices and Payments as members. We also have other dims as Date, Invoice Number and so on. This would be the current output:
Date | Dim1 | Invoice Number | Amount
10/01/17 Invoice 1234 -450
10/02/17 Payment 1234 450
So, what I want is, instead of creating 2 reports, one for the Invoices and the other one for Payments, a single report with the following output:
Invoice Date | Invoice | Payment date | Payment | Invoice Number | Amount inv | Amount paid
10/01/17 Invoice 10/02/17 Payment 1234 -450 450
Is this kind of output achievable inside OBIEE?
Thanks!
You are not trying to "filter on same dimension" but you are trying to convert rows into columns.
While it is possible to cheat your way around this it is definitely not something which is suggested! You are facing an analytical system - not Excel.
If this is an actual requirement and not simply a "I wish to see it this way" then the best approach is to store the data properly.
Second-best approach is to model it in the RPD with different logical table sources.
Last and the option NOT to go for right away is what you are asking for: Doing it in the front-end.
Apart from that: It's "analyses" that you are working with in OBI. If you have a "report" then you are in BI Publisher which is a completely different tool.

Filter after grouping columns in Power BI

I want to accomplish something easy to understand (and maybe easy to do but I can't find a way...).
I have a table which represents the date when a client has bought something.
Let's have this example:
=============================================
Purchase_id | Purchase_date | Client_id
=============================================
1 | 2016/03/02 | 1
---------------------------------------------
2 | 2016/03/02 | 2
---------------------------------------------
3 | 2016/03/11 | 3
---------------------------------------------
I want to create a single number card which will be the average of purchase realised by day.
So for this example, the result would be:
Result = 3 purchases / 2 different days = 1.5
I managed doing it by grouping in my query by Purchase_date and my new column is the number of rows.
It gives me the following query:
==================================
Purchase_date | Number of rows
==================================
2016/03/02 | 2
----------------------------------
2016/03/11 | 1
----------------------------------
Then I put the field Number of rows in a single number card, selecting "Average".
I have to precise that I am using Direct Query with SQL Server.
But the problem is that I want to have a filter on the Client_id. And once I do the grouping, I lose this column.
Is there a way to have this Client_id as a parameter?
Maybe even the fact of grouping is not the right solution here.
Thank you in advance.
You can create a measure to calculate this average.
From Power BI's docs:
The calculated results of measures are always changing in response to
your interaction with your reports, allowing for fast and dynamic
ad-hoc data exploration
This means filtering client_id's will change the measure accordingly.
Here is an easy way of defining this measure:
Result = DISTINCTCOUNT(tableName[Purchase_date])/DISTINCTCOUNT(tableName[Purchase_id])

Simplifying a Cascading pipeline used for aggregating sales data

I'm very new to Cascading and Hadoop both, so be gentle... :-D
I think I'm finding myself way over-engineering something. Basically my situation is that I have a pipe delimited file with 9 fields. I want to compute some aggregated statistics over those 9 fields using different groupings. The result should be 10 fields of which only 6 are either counts or sums. So far I'm up to 4 Unique pipes, 4 CountBy pipes, 1 SumBy, 1 GroupBy, 1 Every, 2 Each, 5 CoGroups and a couple others. I'm needing to add another small piece of functionality and the only way I can see to do it is to add in 2 Filters, 2 more CoGroups and 2 more Each pipes. This all seems like way overkill just to compute a few aggregated statistics. So I'm thinking I'm really misunderstanding something.
My input file looks like this:
storeID | invoiceID | groupID | customerID | transaction date | quantity | price | item type | customer type
Item type is either "I", "S" or "G" for inventory, service or group items, customers belong to groups. The rest should be self-explanatory
The result I want is:
project ID | storeID | year | month | unique invoices | unique groups | unique customers | customer visits | inventory type sales | service type sales |
project ID is a constant, customer visits is how many days during the month the customer came in and bought something
The setup that I'm using right now uses a TextDelimited Tap as my source to read the file and passes the records to an Each pipe which uses a DateParser to parse the transaction date and adds in year, month and day fields. So far so good. This is where it gets out of control.
I'm splitting the stream from there up into 5 separate streams to process each of the aggregated fields that I want. Then I'm joining all the results together in 5 CoGroup pipes, sending the result through Insert (to insert the project ID) and writing through a TextDelimited sink Tap.
Is there an easier way than splitting into 5 streams like that? The first four streams do almost the exact same thing just on different fields. For example, the first stream uses a Unique pipe to just get unique invoiceID's then uses a CountBy to count the number of records with the same storeID, year and month. That gives me the number of unique invoices created for each store by year and month. Then there is a stream that does the same thing with groupID and another that does it with customerID.
Any ideas for simplifying this? There must be an easier way.

Uk Postcode lookup field with covering a range of districts

Need some efficient solution of district range selector for an area in UK. Lets say I selected Manchester which covers many small districts like M1,M2,M3.....M20, M30... My users can be sharing responsibility of some of the districts of Manchester like from M1 to M10 and another user with M11 to M21. Also they can have multiple areas like Manchester(M), Aberdeen(AB) and so on and the range will be needed even then.
How to develop the interface for it so that it should create minimum load on mysql DB as well as handy for user to add a lots of areas with their desired district range.
All selected range postcodes will be added in DB and postcode info will be matched against each one so that the person responsible can be referenced.
For more idea: http://screencast.com/t/6qwCVhKA
thanks in advance
It sounds like you should be breaking the postcodes down into area, district and sector. So you have
area | district | sector
------------------------
M | M1 | M1 0AA
M | M2 | M2 0AA
M | M3 | M3 0AA
etc, this will enable you to reference by whatever level you want.
It's described in more detail on page 17 of this and on wikipedia, which is actually very accurate.

Resources