Պլան ցանկացած կտրվածքով, առանց հաշվետվությունը վերակառուցելու
Պլանի բաշխում — երեք շերտ
Պլանը դրվում է ըստ ամսվա, ըստ բրենդի, ըստ մենեջերի՝ բայց հարցերը գալիս են օրվա, SKU-ի և հաճախորդի մասին։ Վերլուծում ենք մեթոդը, որ մեկ պլանը բաշխում է այնպես, որ այն մնա համեմատելի փաստի հետ ցանկացած կտրվածքով՝ առանց ամեն շաբաթ ձեռքով հավաքելու։
«Պլան ըստ հաճախորդի», որը տվյալներում չկա, չափիչ է։ Ամիս→օր և բրենդ→SKU-ն մատերիալիզացվում են Power Query-ում, մենեջեր→հաճախորդը հաշվվում է DAX-ում՝ ընթացիկ ֆիլտրի համար։ Ներքևում՝ M կոդը, չափիչները և կենդանի պլան/փաստը։
01 Խնդիրը՝ պլանն ու փաստը խոսում են տարբեր լեզվով
Հարմար է պլանը դնել խոշոր՝ ըստ ամսվա, ըստ բրենդի, ըստ մենեջերի։ Բայց հարցերը գալիս են մանր՝ «գնու՞մ ենք պլանով այս շաբաթ», «որքանն է պլանից կախված այս հաճախորդից», «ինչպես է ղեկավարի մոտ եռամսյակում»։ Պլանի և այս հարցերի միջև՝ ձեռքով հավաք, որ ինչ-որ մեկը նորից է հավաքում ամեն անգամ։
Ավելի վատ, պլանը կենդանի է. թիրախները տեղափոխվում են մենեջերների և բրենդների միջև տարվա ընթացքում։ Ամեն վերանայում նշանակում է վերագրել պատմությունը մի քանի աղյուսակում՝ ոչինչ չկոտրելով։ Հենց այստեղ էլ սովորաբար կոտրվում է։
02 Սկզբունքը՝ մեկ պլան, ցանկացած կտրվածք
Պլանը մուտքագրվում է մեկ անգամ՝ Google Sheets-ում, հարմար «լայն» տեսքով։ Հետո մոդելը այն բերում է ընդհանուր ձևի, բաշխում ըստ օրերի և կապում փաստի հետ տեղեկագրերով։ Դրանից հետո պլանն ու փաստը ֆիլտրվում են նույն կապերով՝ և «% կատարումը» հաշվվում է ճիշտ ցանկացած մակարդակում։ Պտտեք ֆիլտրերը՝
| Մենեջեր | Ղեկավար | Պլան, ֏ | Փաստ, ֏ | % կատարում | Պլան, հատ | Փաստ, հատ |
|---|
* «% կատարում» = փաստ ÷ պլան։ Սանդղակ՝ ≥100% կանաչ · 85–99% դեղին · <85% կարմիր։ Հետ մնացողները բարձրացված են վերև։
03 Պլանը երևում է այնտեղ, որտեղ չեն դրել
Ամենաօգտակարը սկսվում է, երբ պետք է կտրվածք, որի վրա պլանն ընդհանրապես չեն դրել։ Դասականը հաճախորդն է. պլանը դրված է մենեջերի վրա, բայց ղեկավարին պետք է իմանալ, որ հաճախորդների վրա է այդ պլանը «կախված»։ Մոդելը բաշխում է մենեջերի պլանը նրա հաճախորդների վրա՝ փաստացի վաճառքում նրանց բաժնին համամասնորեն՝ հաճախորդների գումարը մնում է հավասար պլանին, ոչինչ չի կորում և չի կրկնապատկվում։
04 Ինչ է սա փոխում
Պլանի վերանայումը դառնում է խմբագրում Google Sheets-ում. փոխեցիր թիվը կամ վերագրեցիր մենեջերին սյունակում, սեղմեցիր «Թարմացնել ամենը»՝ և պլանը, փաստը և տոկոսները ինքնահավաքվեցին։ Մեկ էկրանը փակում է տասնյակ հարց՝ ըստ ղեկավարի, մենեջերի, բրենդի, ալիքի, հաճախորդի և ժամանակահատվածի՝ առանց հաշվետվությունը վերակառուցելու։
01 Երեք բաշխում
«Բաշխում» այստեղ նշանակում է խոշոր պլանը տարածել ավելի մանր կտրվածքի վրա։ Դրանք երեքն են, և սկզբունքորեն տարբերվում են հաշվարկի տեղով՝
- Ամիս → օր։ Մատերիալիզացվում է Power Query-ում. ամսական պլանը բաժանվում է ամսվա օրերի թվին։
- Բրենդ → SKU։ Նույնպես Power Query-ում. ամփոփ պլանը բաշխվում է ըստ SKU-ի՝ վերջին վաճառքներում նրա բաժնին։
- Մենեջեր → հաճախորդ։ DAX-ում, հարցման պահին. պլանը բաշխվում է ընթացիկ ֆիլտրի տակ՝ ըստ փաստի բաժնի։
Բաժանման կանոնը պարզ է. ինչ կախված չէ կտրվածքից՝ նախապես հաշվում ենք թարմացման ժամանակ; ինչ կախված է օգտատիրոջ ընտրությունից՝ թողնում ենք չափիչին։
02 Ամիս → օր
Փաստը գալիս է ըստ օրերի, պլանը՝ ըստ ամիսների։ Որ դրանք համեմատելի լինեն ցանկացած օրացուցային կտրվածքով, ամսական պլանը «տարածվում» է ըստ օրերի՝ միացում Օրացույցի հետ ամսվա առաջին օրով և բաժանում օրերի թվին։
-- Օրական պլան = ամսական ÷ ամսվա օրեր WithCalendar = Table.NestedJoin(Parsed, {"Plan month"}, Calendar, {"FirstDayOfMonth"}, "Cal", JoinKind.LeftOuter), Expanded = Table.ExpandTableColumn(WithCalendar, "Cal", {"Date", "Quarter", "DaysInMonth"}), Daily = Table.AddColumn(Expanded, "Daily Plan", each [Value] / [DaysInMonth])
Դրանից հետո ցանկացած ժամանակահատված՝ պարզ գումարում, առանց «բայց փետրվարը 28 օր է» նախազգուշացումների։
03 Բրենդ → SKU ըստ վաճառքի բաժնի
Ամփոփ պլանը դրված է բրենդի վրա՝ որ համեմատել փաստի հետ ըստ դիրքերի, այն բաշխվում է վերջին ամիսների բրենդի վաճառքում ամեն SKU-ի բաժնին համամասնորեն։ Պլանը «ինքնակարգավորվում» է ընթացիկ ապրանքային միքսին, ոչ թե հնացած տեղեկագրին։
-- SKU-ի բաժինը բրենդում → բրենդի պլանը բաժանվում SKU-ների WithShare = Table.AddColumn(Expanded2, "$ share", each [#"$"] / [#"Brand $"], type number), PlanAMD = Table.AddColumn(Expanded3, "Sales plan (AMD)", each [Daily Plan] * [#"$ share"], type number)
04 Մենեջեր → հաճախորդ DAX-ում
Հաճախորդ պլանում չկա՝ ուրեմն չի կարելի այն բաշխել նախապես (կտրվածքները շատ են)։ Դա անում է չափիչը. վերցնում է պլանը ընթացիկ համատեքստում և բազմապատկում հաճախորդի՝ փաստում բաժնով։
-- [Plan AMD] — բաշխել պլանը ընթացիկ կտրվածքին՝ ըստ փաստի բաժնի IF( [Sold AMD], SUM('Plans'[Sales plan (AMD)]) * DIVIDE( [Sold AMD], CALCULATE([Sold AMD], ALL('Dim_Clients'[Client])), 0 ) )
Մեկ հաճախորդի համար DIVIDE-ը կվերադարձնի նրա բաժինը; առանց հաճախորդի ֆիլտրի բաժինը հավասար է մեկի՝ և չափիչը վերադարձնում է ամբողջ պլանը։ Հաճախորդների գումարը միշտ հավասար է մենեջերի պլանին։
05 Պլան/փաստ և % կատարում
Քանի որ պլանը բերված է օրական մանրացմանը և կապված Օրացույցի հետ, ցանկացած ժամանակահատված պարզապես ֆիլտր է։ Իսկ պլանի կատարումը՝ փաստի հարաբերությունը պլանին, ճիշտ ցանկացած մակարդակում, որովհետև երկու մեծությունն էլ ֆիլտրվում են նույն կապերով։
-- Եռամսյակային կտրվածք և % կատարում Plan AMD 2026 Q2 = CALCULATE( SUM('Plans'[Sales plan (AMD)]), FILTER( ALL('Calendar'), YEAR('Calendar'[Date]) = 2026 && MONTH('Calendar'[Date]) >= 4 && MONTH('Calendar'[Date]) <= 6 )) % of plan AMD = DIVIDE( [Sold AMD], [Plan AMD] )
Կհավաքենք պլան/փաստ ձեր տվյալների վրա
Անվճար վերլուծության ժամանակ կնայենք, ինչպես է ձեր մոտ հիմա ապրում պլանը, և ցույց կտանք, ինչպես այն համեմատել փաստի հետ ցանկացած կտրվածքով՝ ղեկավարից մինչ հաճախորդ և օր։ Առանց պարտավորության։
