DAX Userelationhip функция - PullRequest
4 голосов
/ 15 марта 2019

У меня есть эта проблема с функцией Userelationship в DAX.У меня есть две таблицы SalesFact и DimPromoSkus примерно так:

Представление схемы.

Diagram View

2 таблицы вПредставление данных выглядит следующим образом:

Представление данных

Data View

2 таблицы связаны с SkuCampaign1 , SkuCampaign2 , SkuCampaign3 в SalesFact до SkuCampaign из DimPromoSkus.

Таким образом, в основном цель таблицы DimPromoSkus - указать, был ли продукт в кампании С1, С2 или С3.Например, кампания C1 проводилась в период с 01.01.2009 по 01.04.2009, но только акции SKUS A1 и A2 были проданы в рамках акции.A2 и A3 были вне промо, но были проданы во время кампании C1.

Моя цель - рассчитать проданные продажи для каждой кампании C1, C2 и C3.Конечно, это можно сделать с помощью столбца lookup, а затем рассчитать объем продаж, где был найден этот ключ, НО я хотел бы использовать функцию USERELATIONSHIP .

Итак, для расчета PromoSales для кампании C1 моя мерав Теории должно быть:

PromoSalesC1:=CALCULATE(SUM(SalesFact[Sales]);USERELATIONSHIP(SalesFact[SkuCampaign1];DimPromoSkus[SkuCampaign]))

Полученный результат должен быть 25, но возвращает мне 155, что является общей суммой строк, поэтому ничего не делает на самом деле Результат продолжает давать 155, если я использую SkuCampaign2 или SkuCampaign3которые являются неактивными отношениями, но USERELATIONSHIP должны активировать это ..

Есть идеи о том, что происходит, или я что-то упустил?:) Спасибо

Ответы [ 2 ]

1 голос
/ 15 марта 2019

@ StelioK правильно, что вам нужен способ для меры применить контекст фильтра к сумме.Вам не нужно явно указывать значение.Вы можете просто передать таблицу DimPromoSkus в качестве контекста фильтра.

PromoSalesC1 =
    CALCULATE(
        SUM(SalesFact[Sales]),
        DimPromoSkus,
        USERELATIONSHIP(SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign])
    )

Помните, что функция CALCULATE может принимать таблицы в качестве аргументов фильтра.Здесь мы предоставляем DimPromoSkus в качестве фильтра, чтобы не суммировать значения, которые не проходят через указанное отношение.Так, например, поскольку A3 C1 не в DimPromoSkus, соответствующая строка в SalesFact не включается в сумму.

1 голос
/ 15 марта 2019

DAX делает именно то, для чего предназначен.Вызывая функцию USERELATIONSHIP, вы «активируете» отношения, но вам все равно нужно предоставить контекст фильтра либо через слайсер, либо в самом DAX.

Используйте приведенный ниже код и посмотрите, поможет ли это

PromoSalesC1 :=
CALCULATE (
    SUM ( SalesFact[Sales] ),
    USERELATIONSHIP ( SalesFact[SkuCampaign1], DimPromoSkus[SkuCampaign] ),
    DimPromoSkus[Campaign] = 'C1'
)
...