Аналитика по подвыборке на основе промежуточного итога - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в DAX, и у меня есть проблема, которую я не знаю, как решить.Я упрощаю это на искусственном примере.Я нахожусь в контексте табличной модели SSAS.

Допустим, у меня есть фабрика "zirkbols" (изобретена) и таблица, представляющая продажи zirkbols.Каждый клиент купил разное количество зиркболов и дал оценку от 1 до 5. Таблица выглядит следующим образом:

Sample data

с помощью этого кода для его генерации:

= DATATABLE(
    "ClientId"; INTEGER; 
    "CountryCode"; STRING;
    "OrderDate"; DATETIME;
    "OrderAmount"; DOUBLE;
    "Rating"; INTEGER;
    {
        {123; "US"; "2018-01-01"; 502; 1};
        {124; "US"; "2018-01-01"; 400; 4};
        {125; "US"; "2018-01-03"; 60; 5};
        {126; "US"; "2018-01-02"; 160; 4};
        {124; "US"; "2018-01-05"; 210; 3};
        {128; "JP"; "2018-01-03"; 22; 5};
        {129; "JP"; "2018-01-07"; 540; 2};
        {130; "JP"; "2018-01-03"; 350; 4};
        {131; "JP"; "2018-01-09"; 405; 4};
        {132; "JP"; "2018-01-09"; 85; 5}
    }
)

Мне нужно создать меры, которые дадут мне статистику для выборки клиентов, которые купили 30% моих продаж, взятых среди наиболее удовлетворенных.Это означает, что мне нужно ранжировать по «Рейтингу» и суммировать «OrderAmounts», пока я не получу не менее 30% от общего количества.Этот образец - мои счастливые владельцы zirkbols.Для этих счастливых владельцев zirkbols я хотел бы знать, например, их средний рейтинг.

Я думаю, что было бы проще, если бы я мог поместить промежуточную сумму сумм заказа в вычисляемом столбце, но я бы хотелдать аналитику возможность, например, фильтровать только продажи в США, и я не знаю, возможно ли это в вычисляемом столбце.С другой стороны, я предполагаю, что ранжирование по рейтингу может быть сохранено в вычисляемом столбце (Ranking = RANK.EQ ([Rating]; ClientOrders [Rating])).

Я ожидаю следующий результат:

Result

Как я уже говорил, я новичок в SSAS и DAX, поэтому я не знаю, принимаю ли я эту проблему под неправильным углом ...

С уважением, Никола

PS Пожалуйста, смотрите также комментарии к принятому ответу

1 Ответ

0 голосов
/ 26 октября 2018

У меня в основном работает DAX, но мне нужно вернуться к нему.

А пока вот код:

Happy owners amount =
VAR Summary =
    SUMMARIZE (
        Orders,
        Orders[CountryCode],
        Orders[ClientId],
        Orders[Rating],
        "Amount", SUM ( Orders[OrderAmount] )
    )
VAR Ranked =
    ADDCOLUMNS ( Summary, "Rank", RANKX ( Summary, Orders[Rating] + 1 / [Amount] ) )
VAR Cumulative =
    ADDCOLUMNS (
        Ranked,
        "CumAmt", CALCULATE (
            SUM ( Orders[OrderAmount] ),
            FILTER ( Ranked, [Rank] <= EARLIER ( [Rank] ) )
        )
    )
VAR CutOff =
    MINX (
        FILTER (
            Cumulative,
            [CumAmt]
                > 0.3 * CALCULATE ( SUM ( Orders[OrderAmount] ), ALLSELECTED ( Orders ) )
        ),
        [Rank]
    )
RETURN
    SUMX ( FILTER ( Cumulative, [Rank] <= CutOff ), [Amount] )
...