Lookupvalue dax ошибка

  • Remove From My Forums
  • Question

  • Hi!

    Trying to build a hierarchy in ssas tabular using dax function:

    =LOOKUPVALUE(DimCompanyStructure[cDescriptionID], DimCompanyStructure[SysGen_DimOrganizationUnit_Key], PATHITEM([Path], 1, 1))

    I have the Path and depth, but when trying to lookup the «parent» value, the following error occurs:

    —>The syntax for ‘1’ is incorrect. (DAX(
    LOOKUPVALUE(DimCompanyStructure[cDescriptionID], DimCompanyStructure[SysGen_DimOrganizationUnit_Key], PATHITEM([Path], 1. 1))
    )).

    When i change to this:

    =LOOKUPVALUE(DimCompanyStructure[cDescriptionID], DimCompanyStructure[SysGen_DimOrganizationUnit_Key], PATHITEM([Path], 1, ))

    The following error occurs:

    Function ‘LOOKUPVALUE’ does not support comparing values of type Integer with values of type Text. Consider using 

    I found some examples on the forum for this purpose and did exactly the same?

Answers

  • Hi MatHas123,

    Thanks for your question.

    >>>I found some examples on the forum for this purpose and did exactly the same?
    For this issue, please refer to below blog talking about this issue in depth:
    https://www.daxpatterns.com/parent-child-hierarchies/


    Best Regards
    Willson Yuan
    MSDN Community Support
    Please remember to click «Mark as Answer» the responses that resolved your issue, and to click «Unmark as Answer» if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to
    MSDN Support, feel free to contact MSDNFSF@microsoft.com

    • Proposed as answer by

      Wednesday, April 11, 2018 9:40 AM

    • Marked as answer by
      MatHas123
      Monday, October 8, 2018 7:41 PM

I am new to PBI and DAX. I am using Dax Studio to explore some functions. I am trying to do a look up value on a simple table. The table is Users and it has 2 columns, Name and ClientID. This is my DAX formula that I have in the Studio editor

LOOKUPVALUE(Users[ClientID], [Name], "john smith")  

When I run it I get this output

enter image description here

Thank you in advance

asked Nov 12, 2018 at 17:33

Jake's user avatar

I’m guessing it wants a fully qualified column name.

Try this:

LOOKUPVALUE(Users[ClientID], Users[Name], "john smith")

Edit:

DAX Studio generally expects table output rather than measure output. You can get around this by turning your value into a table.

Try this:

EVALUATE {LOOKUPVALUE(Users[ClientID], Users[Name], "john smith")}

answered Nov 12, 2018 at 18:01

Alexis Olson's user avatar

Alexis OlsonAlexis Olson

38.8k7 gold badges42 silver badges64 bronze badges

1

  • Remove From My Forums
  • Question

  • Hi ,

    I am facing the issue in which when the LookUpValue  function returns multiple records , DAX fails and give error . 

    When Lookupvalue returns one records everything works fine . 

    Full Query

    =if(ISBLANK(LOOKUPVALUE(Security_ESA[FieldValue],Security_ESA[UserAlias],[CurrentUser])),TRUE()  ,[ExternalSegmentID]=LOOKUPVALUE(Security_ESA[FieldValue],Security_ESA[UserAlias],[CurrentUser],Security_ESA[FieldValue],’External
    Segment'[ExternalSegmentID])
     )

    Please suggest on the changes needed to the query

Answers

  • Hi Gaurav_BI,

    Thanks for your question.

    It is pretty hard to answer this without sample data. To solve your question more efficiently, would you mind typing out 5-10 rows of example data for these table, then showing what results you are expecting based on those sample data? It is much better
    if you can share the EXCEL work book. Do mask sensitive data before uploading.

    For this issue, you can also refer to a similar thread answered by me:
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/a05fa222-ae46-407b-8039-677f5733bf6c/dax-multiple-lookupvalue?forum=sqlanalysisservices


    Best Regards
    Willson Yuan
    MSDN Community Support
    Please remember to click «Mark as Answer» the responses that resolved your issue, and to click «Unmark as Answer» if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to
    MSDN Support, feel free to contact MSDNFSF@microsoft.com

    • Proposed as answer by

      Thursday, May 17, 2018 6:29 AM

    • Marked as answer by
      AV111Editor
      Tuesday, February 19, 2019 5:55 PM

Старый
06.07.2009, 16:06

 

#1
 

Участник

 

Регистрация: 20.09.2005

Адрес: Riga, Latvia

Проблема с «lookupField» и «lookupValue».


Из формы вызывается функция «Go to Main Table», соотв. идёт на правильную форму, парамeтры подаются правильные… а вот уже запрос на базу идёт кривой…

X++:

FROM .... A WHERE ((DATAAREAID=@P1) AND (RECID>=@P2))

// здесь 0 = RECID фильтр

На форме нет никаких извратностей…

Dynamics SP1 + SQL 2005

Старый
06.07.2009, 16:47

 

#2
 

Участник

Лучший по профессии 2015

Лучший по профессии 2014

 

Регистрация: 12.10.2004

Адрес: Москва

Записей в блоге: 2

При таких переходах Аксапта стремится открыть 2 курсора один для которого выполняется условие «>» а другой для с условием «<» — это нужно чтобы можно было быстро спозиционироваться на искомом значении — чтобы не вытаскивать все записи из таблицы, а сделать поиск средствами БД.

чтобы функция корректно позиционировалась, нужно чтобы сортировка в открываемой форме шла по возрастанию значений поля из Element.args().lookupField()

Старый
06.07.2009, 17:09

 

#3
 

Участник

 

Регистрация: 20.09.2005

Адрес: Riga, Latvia

Ну и что мне делать, если по дефолту фильтруется по другим 2 полям!?
У меня переходит в «Main» форму по «RecId» полю.. вот в чём дело.

Пробовал запихнить метод «lookupValue» ,так нету такого места, когда-бы закончилась загрузка формы и датасета… и не работает

Старый
06.07.2009, 17:43

 

#4
 

Участник

Лучший по профессии 2015

Лучший по профессии 2014

 

Регистрация: 12.10.2004

Адрес: Москва

Записей в блоге: 2

Да а что плохого ?
Она же вам тем самым ищет сразу нужную запись, на которую ссылка смотрит.

Старый
06.07.2009, 17:51

 

#5
 

Участник

 

Регистрация: 20.09.2005

Адрес: Riga, Latvia

В том то и дело — не смотрит…
Всё время выкидивает на деф. форму.. не находит запись, которую надо «подсветить», либо отвиль тровать …

Старый
06.07.2009, 18:28

 

#6
 

MCITP

 

Регистрация: 13.02.2004

Адрес: Минск

->


Цитата:

Сообщение от Delfins
Посмотреть сообщение

В том то и дело — не смотрит…
Всё время выкидивает на деф. форму.. не находит запись, которую надо «подсветить», либо отвиль тровать …

Либо на этой форме в принципе не бывает этой записи (условиями на ДС, например, образано), либо пример в студию (xpo)…

(что-то такое припоминается кажется, было когда-то давно, но уже не помню совсем)

__________________
Zhirenkov Vitaly

Старый
06.07.2009, 18:42

 

#7
 

Участник

Лучший по профессии 2015

Лучший по профессии 2014

 

Регистрация: 12.10.2004

Адрес: Москва

Записей в блоге: 2

У вас скорее всего сортировка идет не по полю которое в Lookupfield.

попробуйте на инициализации датасорса написать код который будет проверять значение Element.args().Lookupfield() и если оно отлично от пустого, то сбрасывать текущую сортировку и принудительно ставить сортировку по полю Element.args().Lookupfield()

Тогда должно сработать.

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

  • 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 возвращает сообщение об ошибке, если в таблице поиска найдено несколько значений для одного ключа:

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

error message Мне не нужно сообщение об ошибке, меня устраивает первый результат 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, оба решения одинаково быстры и имеют простой план выполнения. Второе решение — единственное решение, которое выполняет только два сканирования таблицы (все другие подходы имеют три сканирования). Третье решение имеет сложный план выполнения, и во время третьего сканирования оно проходит через всю таблицу поиска, независимо от того, миллион ли это строк.

У этого вопроса есть следующий вопрос, в котором я пытаюсь сравнить запросы в 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 )
)

Понравилась статья? Поделить с друзьями:
  • Look it rains ошибка
  • Lords mobile ошибка 12002
  • Lords mobile ошибка 11203
  • Lords mobile ошибка 11202
  • Lorch x350 vrd ru ошибки