Tagged: BUSINESS RULES, DAX
- This topic has 1 reply, 1 voice, and was last updated 3 weeks, 4 days ago by  
24.marko.
 
- 
		AuthorPosts
 - 
		
			
				
9 October 2025 at 9 h 37 min #161724
24.marko
Participantbonjour à tout le monde,
voilà, je demande un peu d’aide car j’ai pb concernant l’application de business rules complexes.
Par exemple, j’ai une table d’item (nommée Item, avec différentes caractéristiques) et je voudrai rechercher un élément nommé TARGET pour chacun de ces items dans une table Business_Rules.
par exemple, la 1ere règle (nommé R1) est la suivante :BRH = null CAT = null DEPARTMENT = null SUB = 0123456789 LEFT(SUB;3) = null SUB_NAME = null ACCT = 000123456789123456USD IN(ACCT_NAME) = null TARGET = 3M // valeur à chercher ID_TARGET = R1 // id de valeur à chercher Number of criteria = 2 // nb de critères applicables pour cette règle Criteria List = SUB;ACCT; // liste des critères applicables pour cette règle TARGET_NUMBER = 3// target mais sans le M, stocké en INTEGER
Donc, si j’ai un item qui à :
SUB = 0123456789 ACCT = 000123456789123456USDalors la règle R1 doit s’appliquer (en effet, les autres colonnes de l’item n’ont pas d’importance car dans la règle R1, seuls SUB et ACCT sont des critères, les autres valeurs étant nulles).
J’ai une première version qui marche bien, mais très lourde à maintenir, sujette à des oublis… C’est un COALESCE sur une cascade de LOOKUPVALUE (Chaque LOOKUPVALUE va vérifier un liste de critère pré-défini) –> calculated column nommée ‘TARGET_EXPECTED_RESULT’
j’ai tenté une autre approche
find_BR_v3 = VAR vTableBR = CALCULATE( MAX(Business_Rules[TARGET]), FILTER(Business_Rules, Business_Rules[BRH] IN {[BRH],BLANK()} && Business_Rules[CAT] IN {[CAT],BLANK()} && Business_Rules[DEPARTMENT] IN {[DEPARTMENT],BLANK()} && Business_Rules[SUB] IN {[SUB],BLANK()} && Business_Rules[LEFT(SUB;3)] IN {LEFT([SUB],3),BLANK()} && Business_Rules[SUB_NAME] IN {[SUB_NAME],BLANK()} && Business_Rules[ACCT] IN {[ACCT],BLANK()} && Business_Rules[IN(ACCT_NAME)] IN {[IN(ACCT_NAME)],BLANK()} ) ) RETURN vTableBRsans succès le résultat est toujours le même pour chacun des items (et donc totalement faux).
Un pb de row context/level ??il y a le PBIX attaché, avec mes tentatives
Merci d’avance
MarcoAttachments:
You must be logged in to view attached files.9 October 2025 at 10 h 50 min #16172724.marko
ParticipantHello,
pb solved 🙂
// In Items table
TARGET =
VAR itemBRH = Items[BRH]
VAR itemCAT = Items[CAT]
VAR itemDEPT = Items[DEPARTMENT]
VAR itemSUB = Items[SUB]
VAR itemSUBNAME = Items[SUB_NAME]
VAR itemACCT = Items[ACCT]
VAR itemACCTNAME = Items[ACCT_NAME]VAR Matches =
FILTER (
ADDCOLUMNS (
ALL ( Business_Rules ), // ignore current filters on rules
“__isMatch”,
/* Treat blanks in rules as wildcards; otherwise require equality.
Handle special columns LEFT(SUB;3) and IN(ACCT_NAME). */
( ISBLANK ( Business_Rules[BRH] ) || Business_Rules[BRH] = itemBRH ) &&
( ISBLANK ( Business_Rules[CAT] ) || Business_Rules[CAT] = itemCAT ) &&
( ISBLANK ( Business_Rules[DEPARTMENT] ) || Business_Rules[DEPARTMENT] = itemDEPT ) &&
( ISBLANK ( Business_Rules[SUB] ) || Business_Rules[SUB] = itemSUB ) &&
( ISBLANK ( Business_Rules[SUB_NAME] ) || Business_Rules[SUB_NAME] = itemSUBNAME ) &&
( ISBLANK ( Business_Rules[ACCT] ) || Business_Rules[ACCT] = itemACCT ) &&
( ISBLANK ( Business_Rules[LEFT(SUB;3)] ) || Business_Rules[LEFT(SUB;3)] = LEFT ( itemSUB, 3 ) ) &&
( ISBLANK ( Business_Rules[IN(ACCT_NAME)] ) || CONTAINSSTRING ( itemACCTNAME, Business_Rules[IN(ACCT_NAME)] ) )
),
[__isMatch]
)VAR BestRule =
TOPN ( // pick the “best” rule
1,
Matches,
Business_Rules[Number of criteria], DESC, // prefer more specific
Business_Rules[TARGET_NUMBER], ASC // tiebreaker (your priority)
)
RETURN
COALESCE ( MAXX ( BestRule, Business_Rules[TARGET] ), “unknown” ) - 
		AuthorPosts
 
- You must be logged in to reply to this topic.
 




