DAX - вопрос расширенной группировки продуктов / сегментации - PullRequest
0 голосов
/ 29 ноября 2018

Я создал табличную модель SSAS с использованием базы данных AdventureWorksDW.

Я использовал приведенный ниже пост, чтобы помочь мне построить отчет.

https://blog.gbrueckl.at/2014/02/applied-basket-analysis-in-power-pivot-using-dax/

Sold in same Order:=
CALCULATE (
COUNTROWS ( 'Internet Sales' ),
CALCULATETABLE ( 
SUMMARIZE ( 
'Internet Sales',
'Internet Sales'[SalesOrderNumber]
),
ALL ( 'Product' ) ,
USERELATIONSHIP( 'Internet Sales'[ProductKey],FilteredProduct[ProductKey])
)
)

Я подтвердил, что результаты формулы верны.Было продано 1381 заказов с Touring Tire Tube, и показывает, сколько заказов было продано с другими предметами (например, 170 из 1381 заказов, включая ключ продукта 214 - шлем Sport-100, красный).

enter image description here Вот где у меня проблема. Я хотел бы обобщить свои данные, показав, сколько заказов включало только мои отфильтрованные элементы по сравнению с заказами, проданными с другимитовары.Это должно быть динамичным, поскольку пользователи могут выбирать любые продукты ... Конечный результат должен выглядеть следующим образом:

enter image description here

Я новичок в DAX иборолись с этим в течение нескольких часов.Спасибо за вашу помощь.

Вот таблица отношений:

enter image description here

1 Ответ

0 голосов
/ 02 декабря 2018

этот DAX должен работать на примере набора данных из моего блога:

Orders with only the filtered products = 
--VAR vFilteredProducts = VALUES('Filtered Product'[ProductKey])
VAR vFilteredProducts = FILTER('Filtered Product', [ProductKey] = 530 || [ProductKey] = 541)
VAR vCountFilteredProducts = COUNTROWS(vFilteredProducts)
VAR vSales = CALCULATETABLE('Internet Sales',  -- get the Sales for the filtered Products
    vFilteredProducts,
    USERELATIONSHIP('Filtered Product'[ProductKey], 'Internet Sales'[ProductKey]), 
    ALL('Product'))
VAR vOrders = SUMMARIZE( -- Summarize the filtered product sales by Sales Order Number
    vSales, 
    [Sales Order Number],
    -- calucate the distinct filtered products in the filtered orders
    "CountFilteredProductsInOrder", CALCULATE(DISTINCTCOUNT('Internet Sales'[ProductKey])),
    -- calculate the all distinct products for the filtered orders 
    "CountTotalProductsInOrder", CALCULATE(DISTINCTCOUNT('Internet Sales'[ProductKey]), 
                ALLEXCEPT('Internet Sales', 'Internet Sales'[Sales Order Number]))
    )
RETURN COUNTROWS(
    FILTER(
        vOrders, 
        -- the total product count has to match the filtered product count --> no other products except filtered ones in order
        [CountFilteredProductsInOrder] = [CountTotalProductsInOrder]
    )
)

Чтобы получить заказы, в которых были проданы и другие товары, кроме отфильтрованных, подразумевается изменение последнего FILTER () из '='до <<</p>

...