Forum Discussion
Calculating Orders Frequency
Hi,
i`m quite new to PowerBi and I need some help...
I have a database with orders, with info of CUSTOMER, ORDER.DATE, ORDERS.QTY., and ITEM.ID. What I`m trying to achieve here is: figure it out the frequency each customer buy, including what items and their quantities...
For example, I`d like to know that `Customer A` buy every two weeks, or 13 days (on average), and buy 3 units of product X and 2 units of products Y (on average as well).
Can anyone help me out?? Thanks !!
Hi chernni,
For the two questions, they all based on how to make groups.
1. Frequency of order. Add 'Orders Fre'[Customer] = EARLIER ( 'Orders Fre'[Customer] ) inside the Filter to make the formula be based on Customer group. Then it will get the next date within the same customer group not the next physical row.
Frequency of order = DATEDIFF ( CALCULATE ( MAX ( 'Orders Fre'[Date] ), FILTER ( 'Orders Fre', 'Orders Fre'[Date] < EARLIER ( 'Orders Fre'[Date] ) && 'Orders Fre'[Customer] = EARLIER ( 'Orders Fre'[Customer] ) ) ), 'Orders Fre'[Date], DAY )2. Frequent items. Same issue. In my prior expression I'm using ALLEXCEPT ( 'Orders Fr', 'Orders Fr'[Item.ID] ) to make the formula be based on only Item.ID group. That's why all the same Item.ID got the same percentage. So to resolve your issue, add one more condition in ALLEXCEPT().
Frequent items = DIVIDE ( CALCULATE ( COUNT ( 'Orders Fre'[Item.ID] ), ALLEXCEPT ( 'Orders Fre', 'Orders Fre'[Item.ID], 'Orders Fre'[Customer] ) ), DISTINCTCOUNT ( 'Orders Frequency'[Date] ) )Little tips: the most important point in your requirement is to make groups for your data. And generally in DAX, we can use EARLIER() or ALLEXCEPT() function to ahieve this. EARLIER() is used in calculated column and ALLEXCEPT() can be use in both measure and calculated column.
I think I have shown you the right direction. Please make more effort and try to tune the formula on yourself. :smileyhappy:
Thanks,
Xi Jin.
17 Replies
- Ashish_MathurSuper User
Hi,
Share a sample dataset and for that sample show the expected result.
- chernniFrequent Visitor
Hi Ashish_Mathur, thanks for your response. Check below the request:
In the image below we have a simple example with a single customer "JDS", with two orders.
Order 1: Jan 11st, including two products (ITEM.ID), one unit each.
Order 2: Feb 23rd, including three products (ITEM.ID), one unit each.
As a result I'd like something like:
Frequency of order: (Feb 23rd) - (Jan 11st) = 43 days.
Frequent items: 3543 (100% of orders), 3898 (100% of orders) and 3912 (50%) of orders.
Something like that.
Another example, with three orders:
As a result here, I'd have as a result:
Frequency of order: (38+82)/2= 60 days (details on image below)
Frequent items: 1201 (100% of orders).
Hope i made myself clear... If not, please let me know! thanks for the support!!!
Btw, if needed I can give more complex examples, with more orders, or multiple items, but my goal is to identify the average frequency of order and average items requested by a given customer.
Thanks!!!
- Ashish_MathurSuper User
Hi,
Share the link from where i can download your base data
- RaquelbroadNew Member
sorry I can not apply this, can you check what it might be wrong from the formula? i whant to calculate the frequency in month.
Frecuency of orders = DATEDIFF(CALCULATE(MAX(qry_KAIROS[Date], FILTER(qry_KAIROS, qry_KAIROS[Date] < EARLIER (qry_KAIROS[Date]) && qry_KAIROS[Customer] = EARLIER( qry_KAIROS[Customer]))),qry_KAIROS[Date], MONTH))