Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

Benchmark dinámico basado en filtro

Hola a todos,

Soy nuevo en Power Bi, puede que publique alguna pregunta y explicación estúpida, pero por favor tenga paciencia conmigo. ¡Estoy aprendiendo poco a poco!

Estoy trabajando en la creación de un panel de comparación de pruebas comparativas en Power BI, utilizando la conexión Direct Lake. Mi objetivo es crear un gráfico de barras en el que calcule las diferencias entre la puntuación de mi hotel y la puntuación de otros hoteles (en función de la segmentación seleccionada). Vi un video en Youtube Power BI – Dynamic Benchmarking e Implementing dynamic benchmarking in Power BI que ilustran mi intención. Sin embargo, me obligan a crear una tabla de datos específica para el benchmark, como HotelScore y HotelScore Benchmark. Direct Lake no me permite crear una tabla tan fácil como otros modos. Mi única solución ahora es replicar la tabla de evaluación comparativa en SQL y empujarla a Lakehouse.

MinCK_1-1744767578254.png

La captura de pantalla muestra lo que estoy tratando de hacer, mostrando el nombre de todos los hoteles y, en función del hotel que seleccioné, calculando las diferencias de la puntuación del hotel. Seguramente el nombre del hotel se puede mostrar como un grupo, región, etc. Hice esto en Tableau anteriormente e intenté pasar a Power BI.

Entonces, mi pregunta es ¿tenemos alguna otra forma más fácil (código DAX, otra configuración) que me permita obtener el mismo resultado sin crear la tabla de evaluación comparativa como se sugiere en Youtube?

¡Gracias por sus comentarios de antemano!

Mejor

Min Chakranont

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

Hola @MinCK ,

Si su visualización de datos debe mostrar todos los hoteles, necesita la tabla adicional porque, de lo contrario, solo aparecerá la tabla seleccionada.

Es importante comprender que DAX no permite mostrar u ocultar valores categóricos (como hoteles) dentro de una visualización, aunque a veces parezca posible. Cuando se habla de medidas, es posible manipular el contexto de filtro actual que se aplica antes de que se evalúe la expresión numérica (en mi ejemplo simple a continuación, es el promedio de SalesAmount). Por este motivo, hay dos líneas en el gráfico de líneas, incluso si solo se selecciona el color:

image.png

El DAX de la medida "":

SalesAmount (ms) - Comparison = 

var tableOfAllColorsExceptSelected = 
    EXCEPT( 
        CALCULATETABLE( VALUES( 'DimProduct'[ColorName] ), REMOVEFILTERS('DimProduct'[ColorName] ) ) , 
        VALUES( 'DimProduct'[ColorName] )  
    ))
return

AVERAGEX(
    tableOfAllColorsExceptSelected,
    [SalesAmount (ms)] 
)

La parte importante es el EXCEPT( ... ) porque devuelve todos los colores que no están seleccionados, lo que me permite calcular el valor promedio.

Si necesita mostrar todos los colores en el objeto visual (independientemente de si estamos hablando de un gráfico de líneas o de un objeto visual de tabla) pero necesita seleccionar un color/hotel, entonces necesita la tabla adicional.

Con respecto al modo de conexión Direct Lake, tenga en cuenta que al agregar una tabla al modelo semántico, la creación de una vista en el lakehouse obliga al modelo semántico a volver al modo de consulta directa. Esto significa que la casa del lago necesita una mesa adicional.

Con suerte, esto agrega algunas ideas nuevas.

Saludos

Tom

Helpful resources

Announcements
March PBI video - carousel

Power BI Monthly Update - March 2025

Check out the March 2025 Power BI update to learn about new features.

March2025 Carousel

Fabric Community Update - March 2025

Find out what's new and trending in the Fabric community.

"); $(".slidesjs-pagination" ).prependTo(".pagination_sec"); $(".slidesjs-pagination" ).append("
"); $(".slidesjs-play.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-stop.slidesjs-navigation").appendTo(".playpause_sec"); $(".slidesjs-pagination" ).append(""); $(".slidesjs-pagination" ).append(""); } catch(e){ } /* End: This code is added by iTalent as part of iTrack COMPL-455 */ $(".slidesjs-previous.slidesjs-navigation").attr('tabindex', '0'); $(".slidesjs-next.slidesjs-navigation").attr('tabindex', '0'); /* start: This code is added by iTalent as part of iTrack 1859082 */ $('.slidesjs-play.slidesjs-navigation').attr('id','playtitle'); $('.slidesjs-stop.slidesjs-navigation').attr('id','stoptitle'); $('.slidesjs-play.slidesjs-navigation').attr('role','tab'); $('.slidesjs-stop.slidesjs-navigation').attr('role','tab'); $('.slidesjs-play.slidesjs-navigation').attr('aria-describedby','tip1'); $('.slidesjs-stop.slidesjs-navigation').attr('aria-describedby','tip2'); /* End: This code is added by iTalent as part of iTrack 1859082 */ }); $(document).ready(function() { if($("#slides .item").length < 2 ) { /* Fixing Single Slide click issue (commented following code)*/ // $(".item").css("left","0px"); $(".item.slidesjs-slide").attr('style', 'left:0px !important'); $(".slidesjs-stop.slidesjs-navigation").trigger('click'); $(".slidesjs-previous").css("display", "none"); $(".slidesjs-next").css("display", "none"); } var items_length = $(".item.slidesjs-slide").length; $(".slidesjs-pagination-item > button").attr("aria-setsize",items_length); $(".slidesjs-next, .slidesjs-pagination-item button").attr("tabindex","-1"); $(".slidesjs-pagination-item button").attr("role", "tab"); $(".slidesjs-previous").attr("tabindex","-1"); $(".slidesjs-next").attr("aria-hidden","true"); $(".slidesjs-previous").attr("aria-hidden","true"); $(".slidesjs-next").attr("aria-label","Next"); $(".slidesjs-previous").attr("aria-label","Previous"); //$(".slidesjs-stop.slidesjs-navigation").attr("role","button"); //$(".slidesjs-play.slidesjs-navigation").attr("role","button"); $(".slidesjs-pagination").attr("role","tablist").attr("aria-busy","true"); $("li.slidesjs-pagination-item").attr("role","list"); $(".item.slidesjs-slide").attr("tabindex","-1"); $(".item.slidesjs-slide").attr("aria-label","item"); /*$(".slidesjs-stop.slidesjs-navigation").on('click', function() { var itemNumber = parseInt($('.slidesjs-pagination-item > a.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); });*/ $(".slidesjs-stop.slidesjs-navigation, .slidesjs-pagination-item > button").on('click keydown', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); var itemNumber = parseInt($('.slidesjs-pagination-item > button.active').attr('data-slidesjs-item')); $($('.item.slidesjs-slide')[itemNumber]).find('.c-call-to-action').attr('tabindex', '0'); }); $(".slidesjs-play.slidesjs-navigation").on('click', function() { $.each($('.item.slidesjs-slide'),function(i,el){ $(el).find('.c-call-to-action').attr('tabindex', '-1'); }); }); $(".slidesjs-pagination-item button").keyup(function(e){ var keyCode = e.keyCode || e.which; if (keyCode == 9) { e.preventDefault(); $(".slidesjs-stop.slidesjs-navigation").trigger('click').blur(); $("button.active").focus(); } }); $(".slidesjs-play").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-stop").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-play")) { $(".slidesjs-stop").focus(); } } }); $(".slidesjs-stop").on("click",function (event) { if (event.handleObj.type === "click") { $(".slidesjs-play").focus(); } else if(event.handleObj.type === "keydown"){ if (event.which === 13 && $(event.target).hasClass("slidesjs-stop")) { $(".slidesjs-play").focus(); } } }); $(".slidesjs-pagination-item").keydown(function(e){ switch (e.which){ case 37: //left arrow key $(".slidesjs-previous.slidesjs-navigation").trigger('click'); e.preventDefault(); break; case 39: //right arrow key $(".slidesjs-next.slidesjs-navigation").trigger('click'); e.preventDefault(); break; default: return; } $(".slidesjs-pagination-item button.active").focus(); }); }); // Start This code is added by iTalent as part of iTrack 1859082 $(document).ready(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); $("#tip2").attr("aria-hidden","true").addClass("hidden"); $(".slidesjs-stop.slidesjs-navigation, .slidesjs-play.slidesjs-navigation").attr('title', ''); $("a#playtitle").focus(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").mouseover(function(){ $("#tip1").attr("aria-hidden","false").removeClass("hidden"); }); $("a#playtitle").blur(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#playtitle").mouseleave(function(){ $("#tip1").attr("aria-hidden","true").addClass("hidden"); }); $("a#play").keydown(function(ev){ if (ev.which ==27) { $("#tip1").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); $("a#stoptitle").focus(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").mouseover(function(){ $("#tip2").attr("aria-hidden","false").removeClass("hidden"); }); $("a#stoptitle").blur(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").mouseleave(function(){ $("#tip2").attr("aria-hidden","true").addClass("hidden"); }); $("a#stoptitle").keydown(function(ev){ if (ev.which ==27) { $("#tip2").attr("aria-hidden","true").addClass("hidden"); ev.preventDefault(); return false; } }); }); // End This code is added by iTalent as part of iTrack 1859082
Top Kudoed Authors