#excel #excel-formula #powerbi #pivot-table #dax
#excel #excel-формула #пауэрби #сводная таблица #дакс
Вопрос:
У меня есть простая модель данных с двумя измерениями и таблицей фактов. Измерения называются BondDim и AccountDim. Они разрезают таблицу фактов. BondDim и AccountDim присоединяются к таблице фактов в соотношении «один ко многим». Я хотел бы создать меру «BondAmt», как показано здесь жирным шрифтом:
Я пробовал эту меру, но, похоже, она объединяет связи и учетные записи и заполняет сводную таблицу множеством пустых строк:
=calculate([Amt], ALL(AccountDim), BondDim[Bond] = BondDim[Bond] )
Как я могу рассчитать столбец итогов BondAmt и сделать его правильным в любом контексте фильтра облигаций и учетных записей, который у меня есть?
Редактировать:
Как было предложено @sergiom, используя
BondAmt = CALCULATE(SUM(Fact[Amt]), ALL(AccountDim))
возвращает следующее:
Он возвращает все учетные записи независимо от того, принадлежит ли учетной записи Облигация (облигация № 1 показана на рисунке). Как я могу вернуть только те учетные записи, которые имеют Amt в связи?
Комментарии:
1. Пожалуйста, укажите взаимосвязи между таблицами
2. что такое PortDim, который отображается в вашем коде DAX и не упоминается в описании вопроса?
3. Обновлено. К сожалению, я использую excel 2016, и у меня нет функции REMOVEFILTERS.
Ответ №1:
Этого должно быть достаточно, чтобы удалить фильтр над AccountDim, поскольку существующий фильтр над BondDim не подлежит изменению, например
BondAmt = CALCULATE(SUM(Fact[Amt]), ALL(AccountDim))
Редактировать:
чтобы избежать строк с учетными записями, которым не принадлежит облигация, мы должны добавить тест, чтобы проверить, присутствует ли комбинация облигации и учетной записи в таблице фактов
BondAmt =
IF (
NOT ISEMPTY(Fact),
CALCULATE (
SUM ( Fact[Amt] ),
ALL ( AccountDim )
)
)
Комментарии:
1. К сожалению, я использую excel 2016, и у меня нет функции REMOVEFILTERS.
2. Ничего страшного, REMOVEFILTERS — это просто синтаксический сахар для ВСЕХ
3. Это дает мне правильный номер, но возвращает каждый аккаунт, независимо от того, владеет он Облигацией или нет. Смотрите краткую правку в вопросе. Каким-либо образом я могу вернуть только те учетные записи, которые владеют облигацией № 1 (Amt не является пустым)?
4. Я отредактировал ответ, добавив тест на наличие строки с текущей комбинацией облигаций и учетной записи
5. Замечательно! Именно то, что мне было нужно.