Bidirectional relationships and ambiguity

Поділитися
Вставка
  • Опубліковано 8 січ 2025

КОМЕНТАРІ • 189

  • @atanasprodatanasov9233
    @atanasprodatanasov9233 2 роки тому +10

    Brutal! I spent 4 sleepless nights because of that... thank you so much!

  • @teunkruijer
    @teunkruijer 4 роки тому +56

    I can't even begin to describe how happy I am that i found this video. I was about to redesign my whole model to only use one fact table, and all I had to do to get the filters to sync was add a measure. Thank you so much! Great video.

    • @karannchew2534
      @karannchew2534 2 роки тому

      Hi, Would you mind sharing more please? What type of measure did you create to get the filters to sync please?

  • @hasnainhaider8191
    @hasnainhaider8191 3 роки тому +16

    man wow, how beautifully he explains and all the tools he uses. a true master.

    • @harfshortshayari3340
      @harfshortshayari3340 3 роки тому

      could you please help me in understanding why it worked after applying the visual filter?

  • @vithaitang6492
    @vithaitang6492 2 роки тому +3

    Thank you Mr. Ferrari, I love the way you raise the problem, analyze it and give the solution. Very clear and useful!

  • @Jackassik
    @Jackassik 4 роки тому +5

    My company created a bunch of data models where every possible relationship is bi-directional before hiring me...
    I told them that I won't touch them and I won't take responsibility for the numbers they display and your video will be a very good example why you need people who knows how to build data models as it's not simply drag and drop.
    Thank you very much for a very informative and well presented video :)

  • @bactran7799
    @bactran7799 3 роки тому +3

    While looking for a solution for my model that has a lot of bidirectional relationships, I meet Alberto with the amazing video and the answer for my big question. Thank you for your great works, I always appreciate your contribution to make DAX easier to use

  • @kevinlabore1726
    @kevinlabore1726 Рік тому +1

    in Summation WOW -- the really explains why you should ALMOST never use bi-directional relationships for purposes of filtering and why you probably should ALMOST NEVER trust a model that does .. in the back of my mind I was trying to figure out how the ambiguity impact things -- great walk through THANK YOU

  • @JawadAli-nv9mr
    @JawadAli-nv9mr 4 роки тому +2

    I always had issues with ambiguous models. and what I concluded from my report is to never use bi directional filter. I never knew what was the reason.
    now I got
    I must appreciate your efforts 👍👍

  • @diederikvankolfschoten47
    @diederikvankolfschoten47 4 роки тому +4

    This is a very neat trick to avoid ambiguity!! Thanks! SQLBI is on top of my top 5 resources!

  • @brianligat9493
    @brianligat9493 Рік тому +1

    Just as I was looking at this, I found this video and it answered everything. Thanks Alberto.
    I think PBI should give a warning if it detects alternate fllter paths.
    If it would be difficult to explain such ambiguity to a non-technical person, then the design should be changed. The stakeholders/consumers will lose trust and confidence if something is happening that cannot be understood.

  • @preethul1
    @preethul1 3 роки тому +2

    Excellent. So well explained. I would have never understood the consequences of bidirectional if I didn't bump into this video. Thanks a lot.

  • @huseyinburaktasci
    @huseyinburaktasci Рік тому +4

    I noticed the name of the final tab called "Welcome to hell" :D
    Clearly explains the issue! Thanks for the content, very useful!

  • @Broadmoore
    @Broadmoore 3 роки тому +2

    This is the best video I’ve ever seen on ambiguity and relationships. Thank you!

  • @Bharath_PBI
    @Bharath_PBI 4 роки тому +2

    Amazing explanation. Self service BI report developers MUST watch this video. I had to explain this to lot of people and now I can just guide them here 👍 Thank you.

  • @manuelcometto13
    @manuelcometto13 5 місяців тому +1

    Sono rimasto stupefatto dalla chiarezza della spiegazione. Complimenti davvero

  • @Istion2991
    @Istion2991 2 роки тому +1

    Amazing explanation. Fixed the problem I didn't even know how to frame a question around.

  • @dsfshshfhgsghs
    @dsfshshfhgsghs 3 роки тому +3

    What a good teacher you are, Alberto! Fantastic explanation! Tante grazie!

  • @mau_lopez
    @mau_lopez 4 роки тому +6

    Great video, very clear and well done, thanks Mr. Ferrari. I would just emphasise that that the problem presented doesn't come only from using the bidirectional relationship, but it comes form using the bidirectional relationship IN a loop, because in a purely star schema no ambiguity is created when using bidirectional relationships. This would be just to reinforce what is already a great explanation!

    • @SQLBI
      @SQLBI  4 роки тому +5

      True - but you have to be sure you'll not add other fact tables to the same model sharing the same dimensions... in the future

  • @rawalkarnikita2947
    @rawalkarnikita2947 Рік тому +3

    Thank you so much Sir for posting this valuable video. I can't express my gratitude towards you that how much I was needed this video.
    Thank you again 😊

  • @MichelMetran
    @MichelMetran Рік тому +1

    I discovered the channel today and... congratulations on such quality content! Learning a lot here!

  • @birasafabrice
    @birasafabrice 4 місяці тому +1

    this has definetely earned you a new sub, you really nailed every part of the clarification needed throughout the tutorial. thanks a lot for this helpful tutorial. I have to learn from you a lot!

  • @albinlabelle
    @albinlabelle 3 роки тому +2

    Thank you for this clear explanation (love the handwritten arrows on top of the modeling view !). Aside from the ambiguity arising from the use of a bidirectional relationship (which I manage to keep away from), I discovered a neat way to show only relevant choices in slicers !

  • @rick_.
    @rick_. 3 роки тому +9

    "Welcome to Hell!" I was laughing so much that I had to pause the video to put in this comment! I think the real key to understand why adding the filter to the slicer works is that a slicer is just another visual. All the usual cross-visual filtering rules apply. It's one of those things that is obvious if you think about it at all, but it is easy to fall into the trap of thinking a slicer is just a different way to show a filter. I did.

  • @TrungNguyen-jy2bc
    @TrungNguyen-jy2bc 3 роки тому +1

    Amazing sir! The solution is so elegant that I have to clap when I saw it!

  • @dbszepesi
    @dbszepesi 4 роки тому +5

    Such an important video. I keep seeing bi-directional relationships in model and model and my concerns usually fall on deaf ears. Great to have a very detailed video to point people to now. Something not discussed here but I thought I remembering seeing in the video training that SQLBI does - the bidirectional relationships can also slow performance because they tend to keep the model from being able to choose the optimal path.

    • @SQLBI
      @SQLBI  4 роки тому +2

      yes bidirectional filters can also affect performance, but first of all you need to get right numbers!

  • @ongkamsiong
    @ongkamsiong 8 місяців тому

    You provided much better insight about bidirectional filter than Microsoft documentation / training.

  • @rafaelmiralha5995
    @rafaelmiralha5995 2 роки тому +1

    Thank you very much for these videos Alberto and SQLBI! Learning a lot about DAX!

  • @sachin.tandon
    @sachin.tandon 4 роки тому +2

    Very elegantly explained. Using the side Filter Pane would not have occured to me. I would have edited the Sales Measure by using CROSSFILTER. But I think the Filter Pane, does the job just as well!

    • @alessandrocadenelli5849
      @alessandrocadenelli5849 4 роки тому +1

      yes, but you have to do anyway the 'trick of filter pane' if you want to "synchronize" the two slicers...so two birds with one stone..

  • @tuliofernandopinillosalegr3799
    @tuliofernandopinillosalegr3799 2 роки тому +2

    Excelente exposición!!! Eres lo máximo Alberto Ferrari.

  • @florin996
    @florin996 4 роки тому +4

    Really easy to understand, as always great job. Thank you SQLBI team for your amazing work.

  • @27sreeni
    @27sreeni 2 роки тому +2

    Really Really Superb explanation, I love your videos .. one request if any monthly enable SQLBI its really helpful to me

  • @lovebites4098
    @lovebites4098 10 місяців тому +1

    I was facing the same issue and was stuck trying to figure out how bidirectional works from the last 2 days. I tried to check if it works like sql joins but still the result was ambiguous showing a greater value than that in sql. Thanks a lot for making this content. For slicer u used 'is not blank' filter. but i have direct column from 2 unrelated table(not connected directly, although connected through other tables, but flow non-unidirectional) and that too numerical(sum of amount). But now i hope i will figure it out how is it working in my case. thanks a lot lot sir. its much much informative and helpful.

  • @CharudattaAmbekar
    @CharudattaAmbekar 3 роки тому +1

    Thanks! This quick solution of visual filters is possible only in Power Bi. In Excel, we use 'Crossfilter' in the measure formula.

  • @MahmoudSamir7oda
    @MahmoudSamir7oda 4 роки тому +1

    Thank you Alberto i have been looking at that trick for weeks since i have similar business problem. Glad i came a croos the video. 🤗

  • @bluesage1528
    @bluesage1528 3 роки тому +2

    Fantastic explanation and presentation! Thank you so much.

  • @joseaugustocarvalhofilho3506
    @joseaugustocarvalhofilho3506 10 місяців тому +1

    Excellent explanation! Congrats for such a great work!

  • @ThePasserby76
    @ThePasserby76 3 роки тому +2

    Hello Alberto. Have just found your channel. Awesome video. Just one request - pleaseeee do more examples on ambiguity. Really helps us the beginners.

  • @AnhTuan-fv2kn
    @AnhTuan-fv2kn 2 роки тому +1

    Thank you very much for these videos Alberto and SQLBI

  • @Hurairahgiri
    @Hurairahgiri 2 роки тому +1

    Wow. I am taken aback by the explanation. Much love!

  • @Robay146
    @Robay146 2 роки тому +2

    This is a classic lesson. Thank you! Big up!

  • @RonaldPostelmans
    @RonaldPostelmans 4 роки тому +1

    Nice explanation, i now finally understand ambiguity and now why i can not use bidrectional filters

  • @gborka
    @gborka 3 роки тому +1

    Thank you a lot. Really happy to find this channel.

  • @dhiraj3933
    @dhiraj3933 Рік тому +1

    This is a great! I need to try this next time I come across situation like this.

  • @rachitgoyal521
    @rachitgoyal521 3 роки тому +1

    Amazingly explained such a complex scenario.. Kudos!

  • @Nura853
    @Nura853 2 роки тому +1

    Thank you for clear and precise explanation!

  • @karannchew2534
    @karannchew2534 2 роки тому

    Notes for my future revision
    6:05
    A bi-directional relationship created two paths that link Date and Purchases. Yellow and Red. That's why the model is ambiguous.
    Yellow: direct link.
    Red: through Sales and Product.
    // A table can flow to another table by relationship via only one path. Multiple paths create ambiguity.
    // Here, Purchase table has relationships to both Date and Product.
    //These relationships affect filter going into Purchase, which is usually OK and is a typical star scheme.
    // However, with the bi-direction link into Product, Date now also reaches the Purchase table through another path (Date-Sales-Product). There are two separate paths from Date to Purchase.
    IF ANY TABLE REACH ANY ANOTHER TABLE THROUGH MORE THAN ONE PATH, THE DATA MODEL RISK BEING AMBIGUOUS
    8:10
    Sales is filtered by Customer and Dates. Which one being used?
    8:38
    Purchase can be calculated by including:
    1. Customer and indirect Date filter
    2. Direct Date filter
    3. Customer and indirect Date filter (with direct date filter removed)

  •  4 роки тому +1

    Love this one, a true best pratice that can change life and model design

  • @nishanthvarmas8568
    @nishanthvarmas8568 Рік тому +1

    Oh my goodness, such a beautiful explanation. Wow Man!

  • @barishazar5908
    @barishazar5908 4 роки тому +1

    Useful content, poetic explanation...Suberb teacher

  • @raitup00
    @raitup00 2 роки тому +1

    Omg! Good problem, great explanation and excellent solution

  • @tomreborns5739
    @tomreborns5739 2 роки тому +2

    Thanks you to make it so clear and easy ! without avoiding to dig in detail :)
    Make times fresher to me haha

  • @vijaynrao2499
    @vijaynrao2499 2 роки тому +1

    Great! Really really great examples and explanation!

  • @DawoodChoudry-r3j
    @DawoodChoudry-r3j 4 місяці тому +1

    Great Explanation Sir!! Keep it up👍

  • @danielhowe4460
    @danielhowe4460 9 місяців тому +1

    Thank you for providing this detailed video on ambiguous models. There isn't a lot of information out there, so this is very much appreciated.
    Though, I only see a problem if you have a model with two fact tables. If you keep things simple (single fact table, multiple dimension tables), there should be no opportunity for multiple paths, correct? Therefore the model wouldn't be ambiguous?

  • @RACHIMSAJA
    @RACHIMSAJA 4 роки тому +1

    Very insightful! Thanks for the knowledge master🙏

  • @whdea3426
    @whdea3426 4 роки тому +5

    So, the filter actually applies the crossfilter at the backend, this was not known to me , thanks a lot

  • @dariuszspiewak5624
    @dariuszspiewak5624 3 роки тому +1

    Hi Alberto. I think it would stand to reason to also mention that if someone uses USERELATIONSHIP and/or CROSSFILTER, they should always make sure that such a manipulation does not transforms the model into an ambiguous one.

  • @ExplorandoDatos
    @ExplorandoDatos 4 роки тому +3

    Fantástico! Thank you MAESTRO!

  • @phoenixsandy74
    @phoenixsandy74 4 роки тому +2

    Wow. This is so informative and useful.

  • @gpdoc4699
    @gpdoc4699 4 роки тому +1

    Very well explained. Thanks Alberto.

  • @monicaosetkowski1542
    @monicaosetkowski1542 4 роки тому +1

    Mind blown! I need to try this. Thank you

  • @wexwexexort
    @wexwexexort 3 роки тому +1

    Great explanation. You just earned a new sub sir.

  • @wasserslasken
    @wasserslasken Рік тому +1

    Thank you for a great video. I'm a newbie and am a bit confused as to how the direction of filtering goes when you apply a filter on the visual in the end of the video. It seems the cross filter direction does not affect that, since a filter on sales has an effect on product.

  • @fadwa2413
    @fadwa2413 3 роки тому +1

    I LOVE YOU Alberto !!
    YOU ARE THE LEGEND

  • @evalang4435
    @evalang4435 2 роки тому +1

    Absolutely perfect, thank you so much for this video

  • @sukoi2113
    @sukoi2113 4 роки тому +1

    Very nicely explained. Thank you so much.

  • @olgaitskova8542
    @olgaitskova8542 2 роки тому +1

    This is amazing, thank you so much for this video!

  • @madroneroc
    @madroneroc 2 роки тому +1

    Great, thanks! Would be interesting if you have a video on when is a good time to use bi-directional relationships?

    • @SQLBI
      @SQLBI  2 роки тому

      Beside limited cases (like implementing security patterns or physical implementation of M2M cardinality relationships - see sqlbits.com/Sessions/Event18/Different_types_of_many-to-many_relationships_in_Power_BI), it's almost never a good idea to enable bidirectional filters in the model, while it makes perfect sense in specific measure where you can control the side effects of it.

  • @oliveroshea5765
    @oliveroshea5765 4 роки тому +1

    Alberto is the "data monster"!

  • @goolamfareedbangie510
    @goolamfareedbangie510 Рік тому +1

    This video is great but I'm not allowed to apply the measure on a visual if the visual is a card

  • @shantanudeshmukh4390
    @shantanudeshmukh4390 3 роки тому +1

    Such a nice explanation !!

  • @smithp3302
    @smithp3302 2 роки тому +1

    Hello Alberto, thanks for putting this video together. Very helpful!
    I do have a question about the sales measure you used and the calculation it performs. Would you be able to share?

  • @DanielADamico
    @DanielADamico 4 роки тому +1

    Excellent Video as Always!!

  • @kashifhaque2085
    @kashifhaque2085 Рік тому +1

    This is very helpful, thanks!

  • @nevermore17011990
    @nevermore17011990 5 місяців тому +1

    this video islike a movie of DAX !

  • @FahimWahid-g2t
    @FahimWahid-g2t Рік тому +1

    I couldn't understand why filtering could make the data sync. Can you give me a simple example?
    By the way, Great video, thanks a lot.

  • @Zenith40450
    @Zenith40450 2 роки тому +2

    Really loved the tab you named "Welcome to Hell" 😀😀😀😀

  • @New2you09
    @New2you09 4 роки тому +1

    Your videos are amazing.

  • @muhammadraza3290
    @muhammadraza3290 3 роки тому +1

    Thanks a ton for the great explanation!! I tried it out and worked perfectly! However, if I want to influence from lets say the customer dimension, a measure in the products table, then this does not seem to work. Would you be so kind to help?

  • @rezag.7349
    @rezag.7349 2 роки тому +2

    Thank you for this useful video. Would it be fair to say that the ambiguity issue which you describe would not be an issue in a Star Schema w. one fact table (where Dimensional tables only reach to each other via the Fact table)?

    • @SQLBI
      @SQLBI  2 роки тому +2

      Yes, but it will appear the day you add another fact table, and at that point removing the bidirectional filter would break existing reports.

  • @ahamedyasar4722
    @ahamedyasar4722 3 роки тому +1

    wonderful explanation... thank you...😀

  • @OneNI83
    @OneNI83 Рік тому

    Good video.Actually what happen in the behind when you add sales measure to the filters as not blank.Can you elaborate?

  • @DanielTavares29
    @DanielTavares29 4 роки тому +2

    Ciao, friends! Enjoy DAX! Thanks for sharing

  • @inerasmodellfornyttokalkyl1201
    @inerasmodellfornyttokalkyl1201 2 роки тому +1

    Fantastic video!

  • @StephanOnisick
    @StephanOnisick 3 роки тому +1

    Excellent Example of Crossfilter

  • @kg1610
    @kg1610 4 роки тому +1

    Thanks for explaining this, much appreciated.

    • @kg1610
      @kg1610 4 роки тому

      Alberto, can you read this thread on the same topic. If you have any thoughts please comment.
      www.reddit.com/r/PowerBI/comments/kqsy0v/filter_direction/
      Thanks for all the insight you have been sharing.

    • @SQLBI
      @SQLBI  4 роки тому +1

      You should avoid bidirectional filters in the model, use them in the measures only if possible.
      Best practices, workarounds, and explanations here:
      www.sqlbi.com/articles/syncing-slicers-in-power-bi/
      www.sqlbi.com/articles/bidirectional-relationships-and-ambiguity-in-dax/

  • @mabl4367
    @mabl4367 4 роки тому +1

    I guess sales of zero amounts are uncommon but would it not be better so have a measure called "sales exists" and filter on that instead?

  • @rashmiveena315
    @rashmiveena315 3 роки тому

    thank you so much for this video. It was of great help. What if the "Color" is not in the slicer but in the visual and the user wants the visual filtered based on selection in "customer" slicer? how do i achieve that?

  • @Ronnet
    @Ronnet 9 місяців тому +2

    Would've liked to see the "welcome to hell" calculated metrics before and after removing the both directions relationship.

  • @ooooFISCHERoooo
    @ooooFISCHERoooo 4 роки тому +12

    Cool. And yet so simple.
    Love the sheet name “Welcome to hell” 😂

  • @djl8710
    @djl8710 4 роки тому +1

    Excellent Video! Thanks!

  • @ovidlwwebsco
    @ovidlwwebsco 8 місяців тому +1

    awesome explanation, thank U

  • @kennynguyennz
    @kennynguyennz 4 роки тому +1

    It's really cool. Thanks for sharing.

  • @abdulbasitbello2381
    @abdulbasitbello2381 3 роки тому

    Can someone please explain why filtering the color slicer by non-blank sales gives us a dynamic slicer? I can't seem to wrap my head around the idea.

  • @dominikpetri2120
    @dominikpetri2120 4 роки тому +1

    Excellent video Alberto! Thank you very much. I'll send this link to all participants of my workshops and trainings! One question: What tool did you use to draw on your data model?

    • @SQLBI
      @SQLBI  4 роки тому +3

      In this video am using Epic pen on the desktop, with Virtual tablet on the tablet, to use its pen. Worked ok... but not yet perfect, some lag and not as fluid as I'd like. In the next videos I stopped using Epic pen and I preferred to draw directly on the tablet, on top of screenshots. Much more fluid and much easier to use. Still searching for the perfect setup, anyway

  • @frankgovers8420
    @frankgovers8420 4 роки тому +1

    Great, thx, great explanation... there are dax teachers who tell their students to put all the crossfilter in relations in both directions. Here is the reason why you never do this. Great alberto. ( who rides in a maserati! 😄)

    • @SQLBI
      @SQLBI  4 роки тому +1

      It hurts to know that someone promotes bad practices teaching that!

  • @MohamedHassan-fo3no
    @MohamedHassan-fo3no 11 місяців тому +1

    Finally understood it right!!

  • @Mrglasshalfempty
    @Mrglasshalfempty 4 роки тому +2

    Holy crap I never would have thought of that in a million years! Thanks!!

  • @nesmeeclarensdomercant2569
    @nesmeeclarensdomercant2569 2 роки тому

    Continent is from Customer Table, it gives information about which continent the customers are from. Why would you want to filter purchase table by Continent in the Customer table? What is the relation between customer continent and purchase? Help me understand

    • @SQLBI
      @SQLBI  2 роки тому

      Indeed, that's the problem introduced by the bidirectional relationship - you don't want that to happen at all!

  • @RoORou
    @RoORou Рік тому +1

    Great video, thanks!