Есть 2 таблицы фактов (план продаж и факт продаж), которые связаны между собой таблицами-измерениями (магазины и даты). Вопрос, есть ли какой-то способ посчитать averagex по мере, которая считается из этих двух таблиц фактов? То есть, есть мера, которая считает абс. процент отклонения факта от плана, и в итогах хотелось бы увидеть, скажем так, не "меру суммы", а "сумму мер"
Мб вообще есть какой способ это лучше сделать?
Постарался подробнее показать, что нужно, на скрине и в файле
Просто какой-то адский ад блин, даже разбираться неохота.
Код
Sales PY :=VAR MonthsOffset = 12
RETURN IF (
[ShowValueForDates],
SUMX (
SUMMARIZE ( 'Date', 'Date'[Year Month Number] ),
VAR CurrentYearMonthNumber = 'Date'[Year Month Number]
VAR PreviousYearMonthNumber = CurrentYearMonthNumber - MonthsOffset
VAR DaysOnMonth =
CALCULATE (
COUNTROWS ( 'Date' ),
ALLEXCEPT (
'Date',
'Date'[Year Month Number], -- Year Month granularity
'Date'[Working Day], -- Filter-safe Date column
'Date'[Day of week] -- Filter-safe Date column
)
)
VAR DaysSelected =
CALCULATE (
COUNTROWS ( 'Date' ),
'Date'[DateWithSales] = TRUE
)
RETURN IF (
DaysOnMonth = DaysSelected,
-- Selection of all days in the month
CALCULATE (
[Sales Amount],
ALLEXCEPT ( 'Date', 'Date'[Working Day], 'Date'[Day of Week] ),
'Date'[Year Month Number] = PreviousYearMonthNumber
),
-- Partial selection of days in a month
CALCULATE (
[Sales Amount],
ALLEXCEPT ( 'Date', 'Date'[Working Day], 'Date'[Day of Week] ),
'Date'[Year Month Number] = PreviousYearMonthNumber,
CALCULATETABLE (
VALUES ( 'Date'[Day of Month Number] ),
ALLEXCEPT ( -- Removes filters from all the
'Date', -- columns that do not have a day
'Date'[Day of Month Number], -- granularity, keeping only
'Date'[Date] -- Date and Day of Month Number
),
'Date'[Year Month Number] = CurrentYearMonthNumber,
'Date'[DateWithSales] = TRUE
)
)
)
)
)
Что сделал я: 1) принудительно ограничил календарь последней доступной датой. В power bi это можно сделать с помощью CALENDAR, где второй аргумент этой функции будет просто NOW()
То есть, сначала посчитать накопленные продажи по магазинам внутри месяца (MyCumulative), потом посчитать эти данные в проценте от общих продаж в данном месяце, чтобы понимать, что, например, магазин2 + магазин3 формируют 71,5% выручки. И на основании этого затем каждому магазину в каждом месяце присвоить категорию, например, если он выходит в топ 10%, в топ 20% и т.д. до самых плохих в топ 100%
Но для этого сначала надо хотя бы посчитать в вычисляемой колонке накопленные продажи
Всем привет! Столкнулся с такой проблемой: посчитать накопленные продажи в вычисляемой колонке.
Исходная таблица выглядит так (магазин, дата, выручка, ранг магазина по выручке внутри даты):
Есть мера, которая корректно считает накопленные продажи
Код
Measure Cumulative =
VAR CurrRank = max(Table1[MyRank])
VAR Res = CALCULATE(SUM(Table1[RevByMonth]),Table1[MyRank] <= CurrRank, all(Table1[Store]))
RETURN Res
Вопрос: как добиться того же самого, но в вычисляемой колонке, а не в мере?
Код
MyCumulative =
VAR CurrRank = max(Table1[MyRank])
VAR Res = CALCULATE(SUM(Table1[RevByMonth]),Table1[MyRank] <= CurrRank
,all(Table1[Store])
--,allexcept(Table1,Table1[Date])
--,allexcept(Table1,Table1[Date],Table1[MyRank],Table1[RevByMonth])
)
RETURN Res
Из этих данных делается новая вычисляемая таблица, которая суммирует выручку по магазинам и месяцам:
Вопрос: как присвоить ранг магазину по выручке внутри месяца? Пока к этой новой таблице добавил колонку, но результат везде 1. Возможно, по умолчанию в каждой строке используется контекст этой конкретной строки. Надо как-то переключить этот контекст на контекст месяца(
Код
Rank1 = RANKX(Table1,(SUM(Table1[RevByMonth])))
Пробовал избавить вообще от контекста, но результат тот же((
= Table.Group(Источник, {"магазин", "дата"}, {
{"выручка", each List.Sum([сумма]), type number},
{"выручка_опт", each List.Sum(Table.SelectRows(Источник, each ([тип выручки] = "оптовая"))[сумма]), type number}
})
Подскажите, как в Power Query группировать сумму столбца по условию? То есть, примерно так нужно:
= Table.Group(Источник, {"магазин", "дата"}, { {"выручка", each List.Sum([сумма]), type number}, {"выручка_опт", each List.Sum([сумма]) WHERE [тип выручки] = "оптовая", type number} })
На DAX и SQL понимаю как, на PQ пока не разобрался((
В теории, на PQ это можно сделать джойном с промежуточными таблицами, но это не вариант, так как много джойнов это вроде плохо, и показателей может быть не 2, как в примере, а больше Хотелось бы например как в dax, типа
Sub test()
For i = 1 To 2
Rows("1:1").Insert Shift:=xlDown
Next
Range("A1") = "a" & vbNewLine & "b " & vbNewLine & "c" & vbNewLine & "d" & vbNewLine & "e"
End Sub
Первая покупка = CALCULATE(DISTINCTCOUNT('Сделки'[ФИО клиента]),'Сделки'[Этап сделки] = "4. Оплата получена")
выводит данные корректно
На примере одного клиента: он был уникален в августе 2022 года, он был уникален в апреле 2023 года. А итоги смотрят на весь доступный период (то есть и на 2022, и на 2023), и DISTINCTCOUNT корректно считает единичку в итогах за выбранный период.
Кстати, а для такой задачи разве не нужно два (а не одно) измерения времени? То есть в первый slicer поместим DATE_CREATE из одной таблички-измерения, а во второй slicer поместим DATE_CLOSE из второй таблички-измерения. И тогда мера будет просто как COUNTROWS(deals), и она будет выдавать корректное количество заказов при изменении значений обоих слайсеров. Вроде верно, не? Но тут нужна помощь surkenny,