Страницы: 1
RSS
PP мера. Получить количество по шкале
 
Привет всем Помогите написать меру есть таблица как распределить по месяцу и шкале количество.

в файле есть получаемое таблица
 
nacimjon, вариант:
Код
Количество продуктов :=
VAR dataTbl =
    ADDCOLUMNS (
        VALUES ( 'data'[Продкут] );
        "@countSum"; CALCULATE ( SUM ( 'data'[Количество] ) )
    )
VAR filterDataTbl =
    FILTER (
        dataTbl;
        [@countSum] >= MIN ( 'categories'[От] )
            && [@countSum] < MAX ( 'categories'[До] )
    )
VAR result =
    COUNTROWS ( filterDataTbl )
RETURN
    result
 
Добрый день.
Код
Мера = 
CALCULATE(
    COUNTROWS('Продукты');
    FILTER('Продукты';
        IF(ISBLANK(MAX('Диапазон'[Начало]));
            'Продукты'[Количество]<=MAX('Диапазон'[Конец]);
            IF(ISBLANK(MAX('Диапазон'[Конец]));
                'Продукты'[Количество]>=MAX('Диапазон'[Начало]) ;
                'Продукты'[Количество]>=MAX('Диапазон'[Начало]) && 'Продукты'[Количество]<=MAX('Диапазон'[Конец])
            )
        )
    )
)+0
Изменено: vikttur - 17.01.2022 15:13:16
 
Всем спасибо за решение
Изменено: nacimjon - 16.01.2022 00:13:13
 
nacimjon, сорян, видимо, за Вас додумал, что за месяц нужно по продукту просуммировать :)
Под Ваш пример:
Код
Кол-во :=
COUNTROWS (
    FILTER (
        'data';
        'data'[Количество] >= MIN ( 'categories'[От] )
            && 'data'[Количество] < MAX ( 'categories'[До] )
    )
)

Maksim_A, Ваша мера будет некорректно работать в итогах по категориям (попробуйте в сводной вывести общий итог для строк). Самое простое - нижнюю/верхнюю границы у крайних категорий сделать заведомо меньше/больше реальных значений.
 
Добрый день, surkenny!

Чтобы и общие итоги считались мера такая. Сложновато, зато не нужно определять какие значения заведомо меньше/больше реальных значений:)

PS использование COUNTROWS без CALCULATE у вас подсмотрел.

Код
Мера = 
COUNTROWS(
    FILTER('Продукты',
        IF(NOT CONTAINS('Диапазон','Диапазон'[Начало], BLANK()) && NOT CONTAINS('Диапазон','Диапазон'[Конец], BLANK()),
            'Продукты'[Количество] >= MIN('Диапазон'[Начало]) && 'Продукты'[Количество] <= MAX('Диапазон'[Конец]),
            IF(CONTAINS('Диапазон','Диапазон'[Начало], BLANK()) && NOT CONTAINS('Диапазон','Диапазон'[Конец], BLANK()),  
                'Продукты'[Количество] <= MAX('Диапазон'[Конец]),
                IF(NOT CONTAINS('Диапазон','Диапазон'[Начало], BLANK()) && CONTAINS('Диапазон','Диапазон'[Конец], BLANK()),
                'Продукты'[Количество] >= MIN('Диапазон'[Начало]),
                'Продукты'[Количество]
                )
            )
        )
    )          
)+0

PPS при фильтрации поля "Наименование диапазона", мера считает общие итоги с ошибками:(
Изменено: Maksim_A - 16.01.2022 18:06:11 (Добавлено предупреждение что мера считает общие итоги с ошибками)
 
Maksim_A, так, наверное, попроще:
Код
Копия Мера :=
COUNTROWS (
    FILTER (
        'Продукты';
        IF (
            CONTAINS ( 'Диапазон'; 'Диапазон'[Начало]; BLANK () );
            TRUE ();
            'Продукты'[Количество] >= MIN ( 'Диапазон'[Начало] )
        )
            && IF (
                CONTAINS ( 'Диапазон'; 'Диапазон'[Конец]; BLANK () );
                TRUE ();
                'Продукты'[Количество] <= MAX ( 'Диапазон'[Конец] )
            )
    )
)
Изменено: surkenny - 16.01.2022 20:28:14
 
surkenny, если мерах и #5 и #7  фильтром убрать диапазон в котором есть и начало и конец, то общие итоги считаются не правильно.  
Похоже в таблице Продукты нужно делать вычисляемый столбец с указанием принадлежности к диапазону а потом считать.
Изменено: Maksim_A - 16.01.2022 22:33:37
 
Maksim_A, если Вы имеете ввиду, что, к примеру, при выборе срезом/фильтром двух несмежных диапазонов, в итог попадут и значения между ними - то да. Лучше создать вычисляемый столбец диапазона. Но тут еще сложнее будет решить при пустых значениях границ :)
 
surkenny, c вычисляемым столбцом совсем просто получилось. Но создание вычисляемого столбца не самое лучшее решение, хорошо бы решить задачу мерой.
Изменено: Maksim_A - 17.01.2022 21:17:11
 
Maksim_A,
В данном случае вычисляемый столбец будет содержать очень небольшое количество уникальных значений. Поэтому это нормальный подход к решению. Думаю, что вариант мерой будет даже более тормозным.
Для больших объемов (миллиарды строк) существует еще способ, но для него нужна вычисляемая таблица и он подойдет для PBI.

Если все же хочется мерой :) :
1. Если не усложнять и указать все границы:
Код
Количество_:=SUMX (
    VALUES ( categories[Категория] );
    CALCULATE (
        COUNTROWS (
            FILTER (
                'data';
                'data'[Количество] >= MIN ( 'categories'[От] )
                    && 'data'[Количество] < MAX ( 'categories'[До] )
            )
        )
    )
)

2. Если нравятся пустые значения (чтобы уж точно все попало в какую-то группу :) ):
Код
Кол-во:=SUMX (
    VALUES ( categories[Категория] );
    CALCULATE (
        COUNTROWS (
            FILTER (
                'data';
                IF (
                    ISBLANK ( MIN ( 'categories'[От] ) );
                    TRUE ();
                    'data'[Количество] >= MIN ( 'categories'[От] )
                )
                    && IF (
                        ISBLANK ( MAX ( 'categories'[До] ) );
                        TRUE ();
                        'data'[Количество] < MAX ( 'categories'[До] )
                    )
            )
        )
    )
)
 
Меры предложенные surkenny в сообщении #11 отлично решают задачу изложенную в сообщении #1, так что тему можно закрывать, всем спасибо за участие!
Страницы: 1
Наверх