Ошибка ожидалось единственное значение однако передана таблица или несколько значений

 

Oleg dashenko

Пользователь

Сообщений: 117
Регистрация: 07.10.2017

#1

27.05.2019 09:25:59

Добрые день! Есть вопрос который мне пока непонятен. Может кто знает причину почему в POWER PIVOTE  функция LOOKUPVALUE не подтягивает из Таблицы 1 в таблицу 2 значение поля [Статус]. Спасибо!

Код
LOOKUPVALUE('Таблица1'[Ф.И.О.];'Таблица1'[Статус];'Таблица2'[Ф.И.О.])

Прикрепленные файлы

  • Книга СПР удалить.xlsx (170.39 КБ)

Изменено: Oleg dashenko27.05.2019 09:48:44

 

Sanja

Пользователь

Сообщений: 14853
Регистрация: 10.01.2013

#2

27.05.2019 09:43:57

Код
=ВПР([@[Ф.И.О.                        ]];Таблица1[#Все];2;0)

Прикрепленные файлы

  • Книга СПР удалить.xlsx (173.05 КБ)

Изменено: Sanja27.05.2019 09:45:18

Согласие есть продукт при полном непротивлении сторон.

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

какое то непонятное у вас заполнение функции
=ВПР(«что ищем»;»таблица где ищем»;»№ столбца из таблицы где ищем откуда нужен результат «;»1 или 0 т.е. как ищем неточное совпадение или точное»)

Лень двигатель прогресса, доказано!!!

 

как это сделать в excel я знаю, у меня в Power Pivot не получается!

Изменено: Oleg dashenko27.05.2019 09:47:43

 

Sanja

Пользователь

Сообщений: 14853
Регистрация: 10.01.2013

#5

27.05.2019 09:47:25

Цитата
Oleg dashenko написал: у меня в Power Pivot не получается!

Предупреждать надо!

Согласие есть продукт при полном непротивлении сторон.

 

Oleg dashenko

Пользователь

Сообщений: 117
Регистрация: 07.10.2017

#6

27.05.2019 09:49:36

Цитата
Sanja написал:
Предупреждать надо!

Исправил в описании

 

Tuvash

Пользователь

Сообщений: 7
Регистрация: 29.04.2019

#7

27.05.2019 09:55:28

Код
=LOOKUPVALUE('Таблица1'[Статус];'Таблица1'[Ф.И.О.];'Таблица2'[Ф.И.О.])

Порядок был не тот

 

Спасибо! теперь масштабировал на всю таблицу и появилась еще одна проблема. Ошибка!
«Ожидалось единственное значение, однако передана таблица или несколько значений.»
Т.е. в таблице 1 получается на одной фамилии два значения статуса. Подскажите ка это можно обойти!

Изменено: Oleg dashenko27.05.2019 10:26:34

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

Эта функция в отличие от ВПР находит не первое по порядку значения, а все, которые соответствуют ключу, соответственно если вы используете это выражение в качестве скалярной величины, а по факту на выходе получается множество значений, то нужно указать какое из этого множества выбрать. Первое/последнее/из серединки, короче говоря как-то агрегировать.

Вот горшок пустой, он предмет простой…

 

Oleg dashenko

Пользователь

Сообщений: 117
Регистрация: 07.10.2017

#10

27.05.2019 10:34:38

Цитата
PooHkrd написал:
нужно указать какое из этого множества выбрать

Если хочу например выбрать последнее значение как это реализовать? Как в LOOKUPVALUE показать какое значение выбрать из всего множества?

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

#11

27.05.2019 10:51:20

LOOKUPVALUE на выходе дает таблицу, чтобы выбрать последнее значение, вы можете использовать функцию

TOPN

, например. Типа такого:

Код
=TOPN( 1, LOOKUPVALUE('Таблица1'[Статус];'Таблица1'[Ф.И.О.];'Таблица2'[Ф.И.О.]), <orderBy_expression>)

, где <orderBy_expression> это выражение, которые показывает функции какая из строк — первая, а какая последняя. Ну и можно еще четвертый аргумент вставить если сортировка по этому выражению должна быть по убыванию, по умолчанию она по возрастанию.
поищите по форуму TOPN тут было не мало примеров её применения.
З.Ы. тут даже наверное лучше заврнуть в TOPN тут таблицу из которой вы тащите значения, чтобы на выходе была одна строка.
Вот

вариант

с форума МС

Изменено: PooHkrd27.05.2019 10:56:57

Вот горшок пустой, он предмет простой…

 

Oleg dashenko

Пользователь

Сообщений: 117
Регистрация: 07.10.2017

#12

27.05.2019 11:48:24

Цитата
PooHkrd

Спасибо огромное это правильное решение!

 

Oleg dashenko

Пользователь

Сообщений: 113
Регистрация: 07.10.2017

#1

27.05.2019 09:25:59

Добрые день! Есть вопрос который мне пока непонятен. Может кто знает причину почему в POWER PIVOTE  функция LOOKUPVALUE не подтягивает из Таблицы 1 в таблицу 2 значение поля [Статус]. Спасибо!

Код
LOOKUPVALUE('Таблица1'[Ф.И.О.];'Таблица1'[Статус];'Таблица2'[Ф.И.О.])

Прикрепленные файлы

  • Книга СПР удалить.xlsx (170.39 КБ)

Изменено: Oleg dashenko27.05.2019 09:48:44

 

Sanja

Пользователь

Сообщений: 14837
Регистрация: 10.01.2013

#2

27.05.2019 09:43:57

Код
=ВПР([@[Ф.И.О.                        ]];Таблица1[#Все];2;0)

Прикрепленные файлы

  • Книга СПР удалить.xlsx (173.05 КБ)

Изменено: Sanja27.05.2019 09:45:18

Согласие есть продукт при полном непротивлении сторон.

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

какое то непонятное у вас заполнение функции
=ВПР(«что ищем»;»таблица где ищем»;»№ столбца из таблицы где ищем откуда нужен результат «;»1 или 0 т.е. как ищем неточное совпадение или точное»)

Лень двигатель прогресса, доказано!!!

 

как это сделать в excel я знаю, у меня в Power Pivot не получается!

Изменено: Oleg dashenko27.05.2019 09:47:43

 

Sanja

Пользователь

Сообщений: 14837
Регистрация: 10.01.2013

#5

27.05.2019 09:47:25

Цитата
Oleg dashenko написал: у меня в Power Pivot не получается!

Предупреждать надо!

Согласие есть продукт при полном непротивлении сторон.

 

Oleg dashenko

Пользователь

Сообщений: 113
Регистрация: 07.10.2017

#6

27.05.2019 09:49:36

Цитата
Sanja написал:
Предупреждать надо!

Исправил в описании

 

Tuvash

Пользователь

Сообщений: 7
Регистрация: 29.04.2019

#7

27.05.2019 09:55:28

Код
=LOOKUPVALUE('Таблица1'[Статус];'Таблица1'[Ф.И.О.];'Таблица2'[Ф.И.О.])

Порядок был не тот

 

Спасибо! теперь масштабировал на всю таблицу и появилась еще одна проблема. Ошибка!
«Ожидалось единственное значение, однако передана таблица или несколько значений.»
Т.е. в таблице 1 получается на одной фамилии два значения статуса. Подскажите ка это можно обойти!

Изменено: Oleg dashenko27.05.2019 10:26:34

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

Эта функция в отличие от ВПР находит не первое по порядку значения, а все, которые соответствуют ключу, соответственно если вы используете это выражение в качестве скалярной величины, а по факту на выходе получается множество значений, то нужно указать какое из этого множества выбрать. Первое/последнее/из серединки, короче говоря как-то агрегировать.

Вот горшок пустой, он предмет простой…

 

Oleg dashenko

Пользователь

Сообщений: 113
Регистрация: 07.10.2017

#10

27.05.2019 10:34:38

Цитата
PooHkrd написал:
нужно указать какое из этого множества выбрать

Если хочу например выбрать последнее значение как это реализовать? Как в LOOKUPVALUE показать какое значение выбрать из всего множества?

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

#11

27.05.2019 10:51:20

LOOKUPVALUE на выходе дает таблицу, чтобы выбрать последнее значение, вы можете использовать функцию

TOPN

, например. Типа такого:

Код
=TOPN( 1, LOOKUPVALUE('Таблица1'[Статус];'Таблица1'[Ф.И.О.];'Таблица2'[Ф.И.О.]), <orderBy_expression>)

, где <orderBy_expression> это выражение, которые показывает функции какая из строк — первая, а какая последняя. Ну и можно еще четвертый аргумент вставить если сортировка по этому выражению должна быть по убыванию, по умолчанию она по возрастанию.
поищите по форуму TOPN тут было не мало примеров её применения.
З.Ы. тут даже наверное лучше заврнуть в TOPN тут таблицу из которой вы тащите значения, чтобы на выходе была одна строка.
Вот

вариант

с форума МС

Изменено: PooHkrd27.05.2019 10:56:57

Вот горшок пустой, он предмет простой…

 

Oleg dashenko

Пользователь

Сообщений: 113
Регистрация: 07.10.2017

#12

27.05.2019 11:48:24

Цитата
PooHkrd

Спасибо огромное это правильное решение!

I am trying to return the respective rating that a particular value in a column falls within. For example, if the grade is 90< and >100 assign A. However, the formula I am using is resulting in the error. «A table of multiple values was supplied where a single value was expected.»

Availability Rating =
CALCULATE (
    VALUES ( 'Rating Matrix'[Rating] ),
    FILTER (
        'Rating Matrix',
        'Rating Matrix'[Avaibility (L)] <= 'Equipment_Status'[Availability]
            && 'Rating Matrix'[Availability (H)] >= 'Equipment_Status'[Availability]
            && 'Rating Matrix'[Bus Type] = 'Equipment_Status'[Helper]
    )
)

This is the helper field referenced in the formula which distinguishes 2 types of assets.

Helper = RELATED('Performance Matrix'[Helper])

Screen Shot of Data View of Formula Location in'Equipment_Status' Table

Screen Shot of Data View of'Rating' Table

Alexis Olson's user avatar

Alexis Olson

38k7 gold badges42 silver badges64 bronze badges

asked Feb 22, 2019 at 18:33

Erikah's user avatar

This error message is usually related to the VALUES function. Since this function can return multiple values (all the existing values in the local filter context) but measures can only output a single value, you get an error in the cases where it does return more than one value.

In the case where there are multiple values, you need to decide which one you want to pick or how to aggregate them. You could take a MAX or MIN, SUM or AVERAGE, or you could even CONCATENATEX them all into a single string.

answered Feb 22, 2019 at 19:03

Alexis Olson's user avatar

Alexis OlsonAlexis Olson

38k7 gold badges42 silver badges64 bronze badges

2

I am trying to return the respective rating that a particular value in a column falls within. For example, if the grade is 90< and >100 assign A. However, the formula I am using is resulting in the error. «A table of multiple values was supplied where a single value was expected.»

Availability Rating =
CALCULATE (
    VALUES ( 'Rating Matrix'[Rating] ),
    FILTER (
        'Rating Matrix',
        'Rating Matrix'[Avaibility (L)] <= 'Equipment_Status'[Availability]
            && 'Rating Matrix'[Availability (H)] >= 'Equipment_Status'[Availability]
            && 'Rating Matrix'[Bus Type] = 'Equipment_Status'[Helper]
    )
)

This is the helper field referenced in the formula which distinguishes 2 types of assets.

Helper = RELATED('Performance Matrix'[Helper])

Screen Shot of Data View of Formula Location in'Equipment_Status' Table

Screen Shot of Data View of'Rating' Table

Alexis Olson's user avatar

Alexis Olson

38k7 gold badges42 silver badges64 bronze badges

asked Feb 22, 2019 at 18:33

Erikah's user avatar

This error message is usually related to the VALUES function. Since this function can return multiple values (all the existing values in the local filter context) but measures can only output a single value, you get an error in the cases where it does return more than one value.

In the case where there are multiple values, you need to decide which one you want to pick or how to aggregate them. You could take a MAX or MIN, SUM or AVERAGE, or you could even CONCATENATEX them all into a single string.

answered Feb 22, 2019 at 19:03

Alexis Olson's user avatar

Alexis OlsonAlexis Olson

38k7 gold badges42 silver badges64 bronze badges

2

I’m creating a PowerBI dashboard for supply chain backorders. There was a great video I saw from Microsoft demonstrating a Dynamic message card on their Destiny dashboard showing players and their favorite weapon, https://youtu.be/uHP7YJH526c?t=2438… I thought this would be a cool feature to implement but showing backorders with impacted Sales Reps and their Accounts. I essentially did a copy and paste of his code, but modified the variables as well as adding «affected product». Unfortunately, it doesn’t work perfectly (some cases works) but a majority of the time I get this:

Error Message: MdxScript(Model) (17, 125) Calculation error in measure
‘Salesforce CC Backorder Report'[BackorderIQ]: A table of multiple
values was supplied where a single value was expected.

I get that it has to do with the fact that if I select a Sales rep, they may have multiple Products that are on backorder, so I tried variations in my maxBackorderForProduct variable (COUNT, COUNTA, COUNTX, COUNTAX, MAX, MAXX, MAXA)… so far MAXX is less likely to break it so I’m using that for now.

BackorderIQ =
VAR selectedRepName =
    FIRSTNONBLANK ( 'BOreport'[Sales Rep Name], TRUE )
VAR selectedActName =
    FIRSTNONBLANK ( 'BOreport'[Account Name], TRUE )
VAR selectedProduct =
    FIRSTNONBLANK ( 'BOreport'[Product ID], FALSE () )
VAR maxBackorderforSelectedAct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Sales Rep Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderforSelectedRep =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Account Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderForProduct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Product ID],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
RETURN
    IF (
        HASONEVALUE ( 'BOreport'[Sales Rep Name] ),
        selectedRepName & " has " & maxBackorderforSelectedRep & " backorders of " & selectedProduct & " at "
            & LOOKUPVALUE (
                'BOreport'[Account Name],
                'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
            ),
        IF (
            HASONEVALUE ( 'BOreport'[Account Name] ),
            selectedActName & "'s has " & maxBackorderforSelectedAct & " backorders of " & selectedProduct & ", so give "
                & LOOKUPVALUE (
                    'BOreport'[Sales Rep Name],
                    'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
                ) & " a heads up.",
            "Select a Product below, OR an Account or Sales Rep to the right."
        )
    )

I hope I can get the card to say the expected, «ACCOUNT2 has 50 backorders of ProductB, so give JOHN SMITH a heads up.» which is the max value they would get, because JOHN SMITH could also have 20 backorders of ProductA from Account1.

I’m creating a PowerBI dashboard for supply chain backorders. There was a great video I saw from Microsoft demonstrating a Dynamic message card on their Destiny dashboard showing players and their favorite weapon, https://youtu.be/uHP7YJH526c?t=2438… I thought this would be a cool feature to implement but showing backorders with impacted Sales Reps and their Accounts. I essentially did a copy and paste of his code, but modified the variables as well as adding «affected product». Unfortunately, it doesn’t work perfectly (some cases works) but a majority of the time I get this:

Error Message: MdxScript(Model) (17, 125) Calculation error in measure
‘Salesforce CC Backorder Report'[BackorderIQ]: A table of multiple
values was supplied where a single value was expected.

I get that it has to do with the fact that if I select a Sales rep, they may have multiple Products that are on backorder, so I tried variations in my maxBackorderForProduct variable (COUNT, COUNTA, COUNTX, COUNTAX, MAX, MAXX, MAXA)… so far MAXX is less likely to break it so I’m using that for now.

BackorderIQ =
VAR selectedRepName =
    FIRSTNONBLANK ( 'BOreport'[Sales Rep Name], TRUE )
VAR selectedActName =
    FIRSTNONBLANK ( 'BOreport'[Account Name], TRUE )
VAR selectedProduct =
    FIRSTNONBLANK ( 'BOreport'[Product ID], FALSE () )
VAR maxBackorderforSelectedAct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Sales Rep Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderforSelectedRep =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Account Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderForProduct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Product ID],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
RETURN
    IF (
        HASONEVALUE ( 'BOreport'[Sales Rep Name] ),
        selectedRepName & " has " & maxBackorderforSelectedRep & " backorders of " & selectedProduct & " at "
            & LOOKUPVALUE (
                'BOreport'[Account Name],
                'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
            ),
        IF (
            HASONEVALUE ( 'BOreport'[Account Name] ),
            selectedActName & "'s has " & maxBackorderforSelectedAct & " backorders of " & selectedProduct & ", so give "
                & LOOKUPVALUE (
                    'BOreport'[Sales Rep Name],
                    'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
                ) & " a heads up.",
            "Select a Product below, OR an Account or Sales Rep to the right."
        )
    )

I hope I can get the card to say the expected, «ACCOUNT2 has 50 backorders of ProductB, so give JOHN SMITH a heads up.» which is the max value they would get, because JOHN SMITH could also have 20 backorders of ProductA from Account1.

Я подозреваю, что ошибка вызвана этой строкой в ​​блоке HASONEVALUE (‘BOreport'[имя торгового представителя]):

selectedRepName & " has " & maxBackorderforSelectedRep & " backorders of " & selectedProduct & " at "

Этот код состоит из 3 элементов:
selectedRepName, maxBackorderforSelectedRep и selectedProduct

MaxBackorderforSelectedRep не может вызвать никаких проблем, поскольку всегда возвращает 1 значение.

SelectedRepName может вызвать проблемы (он возвращает несколько значений, если не выбран конкретный Rep), но формула защищает от такого сценария с помощью HASONEVALUE.

SelectedProduct похож на selectedRepName, поэтому он может возвращать несколько значений, если не выбран конкретный представитель, и у вас нет защиты от такого сценария. Отсюда ошибка.

Простой способ исправить это — добавить аналогичную защиту:

IF (
        HASONEVALUE ( 'BOreport'[Sales Rep Name] ) && 
        HASONEVALUE ( 'BOreport'[Product ID]),
        selectedRepName & " has " & maxBackorderforSelectedRep & " backorders of " & selectedProduct & " at "
            & LOOKUPVALUE (
                'BOreport'[Account Name],
                'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
            ),

И та же логика должна применяться ко второму блоку:

  IF (
        HASONEVALUE ( 'BOreport'[Account Name] ) &&
        HASONEVALUE ( 'BOreport'[Product ID]),
        selectedActName & "'s has " & maxBackorderforSelectedAct & " backorders of " & selectedProduct & ", so give "
            & LOOKUPVALUE (
                'BOreport'[Sales Rep Name],
                'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
            ) & " a heads up."

Это должно устранить ошибку. Однако я не могу гарантировать, что вы получите желаемое поведение — формула подразумевает, что вы должны выбрать конкретный Rep А ТАКЖЕ конкретного продукта, иначе он вернет сообщение по умолчанию.

Как найти первое непустое значение в несвязанной таблице. Я хочу эквивалент:

  • SQL outer apply (select top 1 ...) или
  • Excel VLOOKUP.

Функция DAX LOOKUPVALUE, используемая в этом коде, не работает.

LOOKUPVALUE(
      SearchTable[name]
    , SearchTable[id] -- how to get the fist value, if here are multiple id?
    , ThisTable[id]
    )

Функция DAX LOOKUPVALUE работает нормально, если в результате возвращается только одно уникальное значение. Функция LOOKUPVALUE возвращает сообщение об ошибке, если в таблице поиска найдено несколько значений для одного ключа:

Была предоставлена таблица с несколькими значениями, где ожидалось одно значение.

message error Я не хочу сообщение об ошибке, я доволен первым результатом 1.

Пример файла данных:

DAX lookup top 1 value.pbix

Комментарий к принятому ответу

Больше всего я предпочитаю второй подход Алексис Олсон, хотя я предпочитаю VAR варианту EARLIER:

MyLookup = 
var LookupKey = ThisTable[Product]
return
CALCULATE (
    MAX ( SearchTable[Category] ),
    SearchTable[Product] = LookupKey
)

Я принял это, хотя у меня есть сильное чувство, что это не лучший ответ, который может существовать. Функция возвращает MAX вместо TOP 1, что, очевидно, требует дополнительных усилий.

Пример данных теперь содержит 4 рабочих решения. Я пронумеровал их в соответствии со своими предпочтениями. Первые два Алексис Олсон. Насколько я мог узнать из DAX Studio, оба решения одинаково быстры и имеют простой план выполнения. Второе решение — единственное решение, которое выполняет только два сканирования таблицы (все другие подходы имеют 3 сканирования). Третье решение имеет сложный план выполнения, и во время третьего сканирования оно проходит через всю таблицу поиска, независимо от того, является ли оно миллионами строк.

У этого вопроса есть дополнительный вопрос, в котором я пытаюсь сравнить запросы в Dax Studio:

Как проверить в Daxstudio, какой запрос DAX имеет лучшую производительность?

Обновление ищет дальнейших улучшений

Интересно, возможно ли достичь более короткого плана запроса, чем текущий выигрышный ответ. Код победы будет оцениваться в DaxStudio и должен иметь более короткий план запроса, чем всего 20 строк как физических, так и логических строк план запроса.

-- Bounty code
EVALUATE
ADDCOLUMNS (
    VALUES ( ThisTable[Product] ),
    "FilterLookup",
    VAR LookupKey = ThisTable[Product]
    RETURN
        CALCULATE ( MAX ( SearchTable[Category] ), SearchTable[Product] = LookupKey )
)

3 ответа

Лучший ответ

Есть много способов сделать это. Вот первые три, которые приходят на ум:

Это простейшая функция поиска, но она работает только в том случае, если с SearchTable связана каждая категория с каждым продуктом.

LookupFunction =
LOOKUPVALUE ( SearchTable[Category], SearchTable[Product], ThisTable[Product] )

Следующее будет по-прежнему работать с несколькими категориями продуктов:

MaxxLookup =
MAXX (
    FILTER ( SearchTable, SearchTable[Product] = ThisTable[Product] ),
    SearchTable[Category]
)
CaclculateMaxLookup =
CALCULATE (
    MAX ( SearchTable[Category] ),
    SearchTable[Product] = EARLIER ( ThisTable[Product] )
)

Если вы хотите использовать 2-й или 3-й в качестве меры вместо вычисляемого столбца, их необходимо будет скорректировать.


Примечание. Вышеуказанное работает как вычисляемые столбцы . Если вы хотите, чтобы они работали как вычисляемые столбцы и как меры, настройте их следующим образом:

LookupMeasure =
LOOKUPVALUE (
    SearchTable[Category],
    SearchTable[Product], CALCULATE ( SELECTEDVALUE ( ThisTable[Product] ) )
)
MaxxMeasure=
VAR CurrProduct = CALCULATE ( SELECTEDVALUE ( ThisTable[Product] ) )
RETURN
    MAXX (
        FILTER ( SearchTable, SearchTable[Product] = CurrProduct ),
        SearchTable[Category]
    )
CaclculateMaxMeasure =
VAR CurrProduct = CALCULATE ( SELECTEDVALUE ( ThisTable[Product] ) )
RETURN
    CALCULATE ( MAX ( SearchTable[Category] ), SearchTable[Product] = CurrProduct )

Разница в том, что когда вы пишете вычисляемый столбец, существует контекст строки, который сообщает вам, какой продукт использовать. Когда вы пишете меру, вам нужно указать, какое значение из столбца ThisTable[Product] вы собираетесь использовать.

Примечание. Если в контексте фильтра есть несколько продуктов, и вы хотите, чтобы мера искала категорию максимальной, используйте MAX вместо SELECTEDVALUE. Последний вернет пробел, если есть несколько значений.


< Сильный > Edit:

Вышеприведенные формулы работают для исходного набора предоставленных данных. Однако, если с SearchTable связано несколько категорий, связанных с одним продуктом, функция LOOKUPVALUE прекратит работу (поскольку она ожидает только одно значение), и вам нужно будет использовать одну из {{X2 }} или MAXX версии вместо.


1

Alexis Olson
16 Дек 2019 в 17:39

Попробуй это:

Column =
VAR row_id = ThisTable[id] 
VAR ret_val =
    SELECTCOLUMNS (
        TOPN (
            1;
            CALCULATETABLE (
                SearchTable;
                SearchTable[id] = row_id;
                SearchTable[name] <> BLANK ()
            )
        );
        "name"; SearchTable[name]
    )
RETURN
    ret_val


1

Karl Anka
13 Дек 2019 в 07:50

Существует функция FIRSTNONBLANK (столбец, выражение). Разве это не помогает?


0

Dreekun
12 Дек 2019 в 17:55

I’m creating a PowerBI dashboard for supply chain backorders. There was a great video I saw from Microsoft demonstrating a Dynamic message card on their Destiny dashboard showing players and their favorite weapon, https://youtu.be/uHP7YJH526c?t=2438… I thought this would be a cool feature to implement but showing backorders with impacted Sales Reps and their Accounts. I essentially did a copy and paste of his code, but modified the variables as well as adding «affected product». Unfortunately, it doesn’t work perfectly (some cases works) but a majority of the time I get this:

Error Message: MdxScript(Model) (17, 125) Calculation error in measure
‘Salesforce CC Backorder Report'[BackorderIQ]: A table of multiple
values was supplied where a single value was expected.

I get that it has to do with the fact that if I select a Sales rep, they may have multiple Products that are on backorder, so I tried variations in my maxBackorderForProduct variable (COUNT, COUNTA, COUNTX, COUNTAX, MAX, MAXX, MAXA)… so far MAXX is less likely to break it so I’m using that for now.

BackorderIQ =
VAR selectedRepName =
    FIRSTNONBLANK ( 'BOreport'[Sales Rep Name], TRUE )
VAR selectedActName =
    FIRSTNONBLANK ( 'BOreport'[Account Name], TRUE )
VAR selectedProduct =
    FIRSTNONBLANK ( 'BOreport'[Product ID], FALSE () )
VAR maxBackorderforSelectedAct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Sales Rep Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderforSelectedRep =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Account Name],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
VAR maxBackorderForProduct =
    MAXX (
        SUMMARIZECOLUMNS (
            'BOreport'[Product ID],
            "Orders", SUM ( 'BOreport'[Back Order Qty] )
        ),
        [Orders]
    )
RETURN
    IF (
        HASONEVALUE ( 'BOreport'[Sales Rep Name] ),
        selectedRepName & " has " & maxBackorderforSelectedRep & " backorders of " & selectedProduct & " at "
            & LOOKUPVALUE (
                'BOreport'[Account Name],
                'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
            ),
        IF (
            HASONEVALUE ( 'BOreport'[Account Name] ),
            selectedActName & "'s has " & maxBackorderforSelectedAct & " backorders of " & selectedProduct & ", so give "
                & LOOKUPVALUE (
                    'BOreport'[Sales Rep Name],
                    'BOreport'[Back Order Qty], MAX ( 'BOreport'[Back Order Qty] )
                ) & " a heads up.",
            "Select a Product below, OR an Account or Sales Rep to the right."
        )
    )

I hope I can get the card to say the expected, «ACCOUNT2 has 50 backorders of ProductB, so give JOHN SMITH a heads up.» which is the max value they would get, because JOHN SMITH could also have 20 backorders of ProductA from Account1.

Hello everyone, I was hoping you could help me out. I was trying to do a look up function, but I was getting an error because it has duplicate values. I can across this so I figured I would try this Calculate but it didn’t return what I was looking for, can someone help me?

I wanted to take the value from  ‘FedEx Query'[Shipper Reference] and match it with the same number in ‘DLX Report Query'[PALLET_ID] so that I could get the Dealer code value from ‘DLX Report Query'[Dealer Code] which has duplicates, but it can just grab the first one.

I originally tried this and got an error for multiple values:  Dealer Code/DLX = LOOKUPVALUE(‘DLX Report Query'[Dealer Code], ‘DLX Report Query'[PALLET_ID], ‘FedEx Query'[Shipper Reference])

The I tried this and could get it to work:  Dealer Code DLX 3 = CALCULATE(FIRSTNONBLANKVALUE(‘DLX Report Query'[Dealer Code],1),FILTER(ALL(‘DLX Report Query’), ‘DLX Report Query'[PALLET_ID] =’FedEx Query'[Shipper Reference]))CALCULATECALCULATELOOKUPVALUE ErrorLOOKUPVALUE Error

Я пытаюсь вернуть соответствующий рейтинг, в который попадает определенное значение в столбце. Например, если оценка составляет 90 <и> 100, присвойте А. Однако используемая мной формула приводит к ошибке. «Была предоставлена таблица с несколькими значениями, где ожидалось одно значение».

Availability Rating =
CALCULATE (
VALUES ( 'Rating Matrix'[Rating] ),
FILTER (
'Rating Matrix',
'Rating Matrix'[Avaibility (L)] <= 'Equipment_Status'[Availability]
&& 'Rating Matrix'[Availability (H)] >= 'Equipment_Status'[Availability]
&& 'Rating Matrix'[Bus Type] = 'Equipment_Status'[Helper]
)
)

Это вспомогательное поле, указанное в формуле, которое различает два типа активов.

Helper = RELATED('Performance Matrix'[Helper])

Screen Shot of Data View of Formula Location in 'Equipment_Status' Table

Screen Shot of Data View of 'Rating' Table

  • Ошибка озу ваз 2110 8 клапанов инжектор
  • Ошибка окт 7 старлайн сигнализация
  • Ошибка ожидаемый неквалифицированный идентификатор перед токеном
  • Ошибка ограниченного использования учетной записи пользователя планировщик
  • Ошибка озу ваз 2109 инжектор