Измерить общее количество в DAX

#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. Замечательно! Именно то, что мне было нужно.