DAX | Чтобы переопределить активный фильтр с помощью Inactive (Userelationship)

Мне нужна помощь в создании мер DAX. Вот отношения в табличном кубе. У меня есть один факт продаж, начальная дата, конечная дата и таблица продуктов.

Relationship : Product -> Fact Sales (1 to Many, active)
Initial Date -> Fact Sales (1 to many, inactive relation)
Final Date - > Fact Sales(1 to many, active) 

Куб используется в качестве источника для инструментов Power Bi. Пользователи могут выбрать любую начальную и конечную дату для сравнения продаж.

Актуальные данные

Product|Date|Sales
Product1|20160101|100
Product1|20160102|110
Product1|20160131|200
Product2|20160101|78
.....

Ожидаемый результат Фильтры:

product : Product1
Initial date : 20160101
Final Date : 20160131

Product | Initial Sales | Final Sales
Product1|100 |200

Я создал показатель DAX AS

Initial Sales := CALCULATE(SUM(SALES),USERELATIONSHIP('Fact Sales'[Date],'Initial Date'[Date]))

Но эта мера не дает мне начальных продаж, так как она также фильтруется по окончательной дате.

заранее спасибо


person SabVenkat    schedule 06.03.2017    source источник


Ответы (1)


Вы можете связать таблицы без явной связи, используя функцию FILTER в DAX.

Поскольку связь Initial Date с Fact Sales отключена, вам нужно FILTER Fact Sales строки, соответствующие Initial Date, выбранному в фильтре. Вы можете использовать EARLIER, чтобы сравнить оцениваемый контекст с каждой строкой в ​​Fact Sales и отфильтровать правильные значения для вычисления.

Используйте эти меры:

Initial Sales :=
IF (
    ISFILTERED ( InitialDate[InitialDate] ),
    CALCULATE (
        SUM ( FactSales[Sales] ),
        FILTER (
            ALL ( FactSales ),
            COUNTROWS (
                FILTER (
                    FactSales,
                    EARLIER ( FactSales[Date] ) = MAX ( InitialDate[InitialDate] )
                        && EARLIER ( FactSales[Product] ) = [Product]
                )
            )
        )
    ),
    BLANK ()
)

Final Sales :=
IF (
    ISFILTERED ( FinalDate[FinalDate] ),
    CALCULATE (
        SUM ( FactSales[Sales] ),
        FILTER ( FactSales, [Date] = MAX ( FinalDate[FinalDate] ) )
    ),
    BLANK ()
)

This expression works as follows, it sums all values in Sales column which Date is equal to the Final Date selected in the filter. However this can be calculated easily as you know with the relationship you have set between Final Date and Fact Sales.

Функции ISFILTERED сообщают нам, было ли у фильтра выбрано значение или нет, если значение выбрано, оно возвращает значение, в противном случае возвращает BLANK.

Это пример в Power BI, поскольку у меня сейчас нет доступа к Excel.

введите здесь описание изображения

person alejandro zuleta    schedule 06.03.2017