tmdl
21 TopicsWhat's New for TMDL
TMDL, the Tabular Model Definition Language (see https://pbi.onl/tmdl-docs), was released by Microsoft into Public Preview in Aril 2023. Since then, various incremental releases have added new features and finetuned the syntax. TMDL is now approaching GA, and is set to become the default development language for all professional Power BI data modellers. This is a good time to review what's changed for TMDL, and what's coming. The session will cover ※Brief introduction to TMDL and its purpose ※Latest changes and current status ※What's ahead ※How to get started with TMDL ※Tooling available today Speaker Bio Developer of pbi-tools, Power BI Contributor, Owner of pbi-tools Ltd Mathias is a Data Platform MVP, developer of pbi-tools and recently contributed TMDL to the Power BI product. He spent almost 20 years in technology - as a software engineer and architect, enterprise data management lead, open-source developer, speaker, and department manager. Today, as owner of pbi-tools Limited and technical contributor to Tabular Tools, Mathias focusses exclusively on the next generation of Power BI productivity tools. 𝙋𝙚𝙧𝙨𝙞𝙖𝙣 𝙋𝘽𝙄𝙐𝙂- 𝙈𝙞𝙘𝙧𝙤𝙨𝙤𝙛𝙩 𝘾𝙤𝙢𝙢𝙪𝙣𝙞𝙩𝙮: https://bit.ly/3IAg7xT 𝙇𝙞𝙣𝙠𝙚𝙙𝙄𝙣: https://bit.ly/32tGkif 𝙏𝙚𝙡𝙚𝙜𝙧𝙖𝙢 𝘾𝙝𝙖𝙣𝙣𝙚𝙡: https://t.me/PersianPBIUG 𝙔𝙤𝙪𝙏𝙪𝙗𝙚: https://bit.ly/3hk20RL Language: Persian - English117Views0likes0CommentsVisual calculations: Making DAX easier | Jeroen ter Heerdt
This is the moment that changes everything. From today, writing DAX will never be the same. Discover how in this session! The Power BI team has been hard at work on groundbreaking advancements in DAX calculations, specifically designed to simplify adding common business metrics like running totals or comparisons to the first value. Imagine this: creating complex calculations without even typing DAX! In this session, we’ll unveil this revolutionary new feature that will transform how you approach DAX, making it faster and easier than ever. Don’t miss this chance to experience the future of DAX – prepare to be amazed!5.4KViews0likes1CommentEvento Presencial Power BI
Maria José Pons realizará una exposición hablando sobre el uso de PowerBI fuera del ámbito financiero. Concretamente, su enfoque está orientado al mundo del deporte a la mejora del rendimiento de un equipo profesional de futbol. Houssein Laftouh realizará la segunda ponencia de la jornada, en este caso hablará sobre las nuevas funcionalidades Dax View y TMDL View para ayudar a la mejorar la productividad y rendimiento.2.8KViews0likes0CommentsTMDL y el Futuro del Modelado: ¿Estás Listo para el Cambio?
Descripción de la sesión: La llegada de las vistas TMDL (Tabular Model Definition Language) está marcando un antes y un después en la forma de trabajar con modelos de datos en Power BI. En esta sesión, exploraremos cómo esta nueva representación en texto del modelo tabular abre la puerta a un enfoque más ágil, escalable y colaborativo. 1. Aprenderemos a trabajar con la vista TMDL, entendiendo su estructura y su aplicación en la optimización del modelado. 2. Descubriremos sus ventajas, como el trabajo colaborativo, la automatización y la facilidad para realizar modificaciones masivas. 3. Analizaremos su integración con herramientas externas, como Visual Studio Code, Measure Killer 4. Exploraremos cómo la IA puede potenciar el uso de TMDL. Duración: 50 minutos / 1 hora Sobre mi: Ingeniero electrónico convertido en experto en datos. Con más de 7 años de experiencia, poseo diversas 𝗰𝗲𝗿𝘁𝗶𝗳𝗶𝗰𝗮𝗰𝗶𝗼𝗻𝗲𝘀 𝗱𝗲 𝗠𝗶𝗰𝗿𝗼𝘀𝗼𝗳𝘁 (PL-300, DP-500, DP-600 entre otras). MVP Data Platform y autor del blog losdatoscomoherramienta.blogspot.com.Data Connect: TMDL and DAX Query View in Power BI
Indore Data & BI Community (IDBC) presents: Data Connect Series Join us for another exciting session where we explore "TMDL and DAX Query View in Power BI" with Krishnakanth, a Data Analyst with 36K+ followers on LinkedIn and a strong presence in the data community. Date: 19th April 2025 Time: 11:00 AM IST Venue: Online What You’ll Learn? What is TMDL (Tabular Model Definition Language) in Power BI Real-world use cases and benefits of using TMDL Exploring the DAX Query View in Power BI Desktop Hands-on walkthrough and productivity tips Speaker: Krishnakanth | Data Analyst Host: Anmol Malviya | Microsoft Super User Co-Host: Inturi Suparna Babu | Microsoft Super User Who Should Attend? Power BI professionals and enthusiasts Anyone curious about TMDL and DAX debugging Data modelers looking to improve their workflow Let’s dive deeper into Power BI’s newest capabilities together! Register Now Join IDBC on Microsoft Teams: https://teams.live.com/l/community/FEAPg7Z13cnL8RrVAU Join Our WhatsApp Group for Updates: https://chat.whatsapp.com/HL6aOLHMqAGJm1JqpzhkJw259Views0likes0CommentsRefresh Date/ Time: Auto swich between BST & GMT
A table that uses DateTime.LocalNow() to dynamically change the time from BST to GMT and vice versa. createOrReplace table Refresh_DateTime column RefreshDate dataType: dateTime formatString: General Date summarizeBy: none sourceColumn: RefreshDate annotation SummarizationSetBy = Automatic column Local_Date_Time dataType: dateTime formatString: dd/mm/yy hh:nn summarizeBy: none sourceColumn: Local_Date_Time annotation SummarizationSetBy = Automatic annotation PBI_FormatHint = {"isCustom":true} partition Refresh_DateTime = m mode: import source = ``` let Source = #table(type table[RefreshDate=datetime], {{DateTime.LocalNow()}}), Test = #table(type table[RefreshDate=datetime], {{#datetime(2026,10,25,11,0,0)}}), // To test, change the "Source" reference to "Test" AddBST = Table.AddColumn(Source, "Local_Date_Time", each let dt = [RefreshDate], year = Date.Year(dt), dstStart = Date.StartOfWeek(#date(year, 3, 31), Day.Sunday), dstEnd = Date.StartOfWeek(#date(year, 10, 31), Day.Sunday), isDST = Date.From(dt) >= dstStart and Date.From(dt) < dstEnd, offset = if isDST then 1 else 0, bstTime = dt + #duration(0, offset, 0, 0) in bstTime, type datetime ) in AddBST ``` annotation PBI_NavigationStepName = Navigation annotation PBI_ResultType = Table24KViews0likes0CommentsCalendar table
PowerQuery implementation of a calendar table. createOrReplace /// Calendar table table Calendar column Day dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Day column Month dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Month column Quarter dataType: string summarizeBy: none sourceColumn: Quarter column Year dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Year column Date dataType: dateTime formatString: Long Date summarizeBy: none sourceColumn: Date annotation UnderlyingDateTimeDataType = Date column 'Month Name' dataType: string summarizeBy: none sourceColumn: Month Name sortByColumn: Month column Year-Month dataType: dateTime formatString: mmm yyyy summarizeBy: none sourceColumn: Year-Month annotation UnderlyingDateTimeDataType = Date annotation PBI_FormatHint = {"isCustom":true} column 'Week Number' dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Week Number column 'Day of Week' dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Day of Week column 'Day Name' dataType: string summarizeBy: none sourceColumn: Day Name sortByColumn: 'Day of Week' column 'Is Weekend' dataType: boolean formatString: """TRUE"";""TRUE"";""FALSE""" summarizeBy: none sourceColumn: Is Weekend column 'Fiscal Year' dataType: int64 formatString: 0 summarizeBy: none sourceColumn: Fiscal Year column 'Fiscal Quarter' dataType: string summarizeBy: none sourceColumn: Fiscal Quarter hierarchy Year-Month-Day level Year column: Year level Month column: Month level Day column: Day partition Calendar = m mode: import source = ``` let P_Today = DateTime.LocalNow(), StartDate = #date(Date.Year(DateTime.LocalNow()) - 3, 1, 1), EndDate = #date(Date.Year(DateTime.LocalNow()), 12, 31), // Generate a list of dates DateList = List.Dates(StartDate, Duration.Days(EndDate - StartDate) + 1, #duration(1, 0, 0, 0)), // Convert list to a table Calendar = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}), // Add columns for different date attributes AddYear = Table.AddColumn(Calendar, "Year", each Date.Year([Date])), AddMonth = Table.AddColumn(AddYear, "Month", each Date.Month([Date])), AddDay = Table.AddColumn(AddMonth, "Day", each Date.Day([Date])), AddMonthName = Table.AddColumn(AddDay, "Month Name", each Date.ToText([Date], "MMM")), AddYearMonth = Table.AddColumn(AddMonthName, "Year-Month", each Text.From(Date.Year([Date])) & " " & Date.ToText([Date], "MMM")), //AddYearMonthKey = Table.AddColumn(AddYearMonth, "Year-Month Key", each Date.Year([Date]) * 100 + Date.Month([Date])), AddQuarter = Table.AddColumn(AddYearMonth, "Quarter", each "Q" & Text.From(Date.QuarterOfYear([Date]))), AddWeek = Table.AddColumn(AddQuarter, "Week Number", each Date.WeekOfYear([Date])), AddDayOfWeek = Table.AddColumn(AddWeek, "Day of Week", each Date.DayOfWeek([Date]) + 1), AddDayName = Table.AddColumn(AddDayOfWeek, "Day Name", each Date.ToText([Date], "dddd")), AddIsWeekend = Table.AddColumn(AddDayName, "Is Weekend", each if Date.DayOfWeek([Date]) >= 5 then true else false), // Add fiscal year and period adjustments AddFiscalYear = Table.AddColumn(AddIsWeekend, "Fiscal Year", each if Date.Month([Date]) >= 7 then Date.Year([Date]) + 1 else Date.Year([Date])), AddFiscalQuarter = Table.AddColumn(AddFiscalYear, "Fiscal Quarter", each "FQ" & Text.From(Number.IntegerDivide((Date.Month([Date]) + 5), 3))), #"Changed Type" = Table.TransformColumnTypes(AddFiscalQuarter,{{"Date", type date}, {"Year", Int64.Type}, {"Month", Int64.Type}, {"Day", Int64.Type}, {"Month Name", type text}, {"Year-Month", type date}, {"Quarter", type text}, {"Week Number", Int64.Type}, {"Day of Week", Int64.Type}, {"Day Name", type text}, {"Is Weekend", type logical}, {"Fiscal Year", Int64.Type}, {"Fiscal Quarter", type text}}) in #"Changed Type" ```4.4KViews3likes1CommentCreate a Multi-Parameter Table for Thematic Filtering in Power BI
This script creates a ‘Multi Parameter’ table in Power BI that allows you to filter on a single parameter and return up to four associated field references (columns or measures). With this approach, you can group related fields into thematic sets, making it easy to synchronize multiple visuals on a report page to a specific topic or analytical perspective. A key consideration is that the order of the fields must be preserved, otherwise Power BI will not correctly recognize the parameter structure. This technique is ideal for creating flexible, topic-based dashboards where multiple visuals respond to a unified filter context. Learn more about adapting field parameters to your project here: https://learn.microsoft.com/en-us/power-bi/create-reports/power-bi-field-parameters createOrReplace table 'Multi Parameter' lineageTag: bcdcaa89-6654-44ce-9eb9-0679c7b99e4b column 'Parameter 4' lineageTag: f9032c01-9dfe-4e07-b83a-f531869235a4 summarizeBy: none sourceColumn: [Value8] sortByColumn: 'Parameter Order' relatedColumnDetails groupByColumn: 'Parameter Fields 4' annotation SummarizationSetBy = Automatic column 'Parameter 3' lineageTag: f9032c01-9dfe-4e07-b83a-f531869235a3 summarizeBy: none sourceColumn: [Value6] sortByColumn: 'Parameter Order' relatedColumnDetails groupByColumn: 'Parameter Fields 3' annotation SummarizationSetBy = Automatic column 'Parameter 2' lineageTag: f9032c01-9dfe-4e07-b83a-f531869235a2 summarizeBy: none sourceColumn: [Value4] sortByColumn: 'Parameter Order' relatedColumnDetails groupByColumn: 'Parameter Fields 2' annotation SummarizationSetBy = Automatic column 'Parameter 1' lineageTag: f9032c01-9dfe-4e07-b83a-f531869235a1 summarizeBy: none sourceColumn: [Value1] sortByColumn: 'Parameter Order' relatedColumnDetails groupByColumn: 'Parameter Fields 1' annotation SummarizationSetBy = Automatic column 'Parameter Fields 1' isHidden lineageTag: 61e451b3-f5d5-497e-94cd-3f763efbdd41 summarizeBy: none sourceColumn: [Value2] sortByColumn: 'Parameter Order' extendedProperty ParameterMetadata = {"version":3,"kind":2} annotation SummarizationSetBy = Automatic column 'Parameter Fields 2' isHidden lineageTag: 61e451b3-f5d5-497e-94cd-3f763efbdd42 summarizeBy: none sourceColumn: [Value5] sortByColumn: 'Parameter Order' extendedProperty ParameterMetadata = {"version":3,"kind":2} annotation SummarizationSetBy = Automatic column 'Parameter Fields 3' isHidden lineageTag: 61e451b3-f5d5-497e-94cd-3f763efbdd43 summarizeBy: none sourceColumn: [Value7] sortByColumn: 'Parameter Order' extendedProperty ParameterMetadata = {"version":3,"kind":2} annotation SummarizationSetBy = Automatic column 'Parameter Fields 4' isHidden lineageTag: 61e451b3-f5d5-497e-94cd-3f763efbdd44 summarizeBy: none sourceColumn: [Value9] sortByColumn: 'Parameter Order' extendedProperty ParameterMetadata = {"version":3,"kind":2} annotation SummarizationSetBy = Automatic column 'Parameter Order' isHidden formatString: 0 lineageTag: 8425d3f0-fb91-458d-97c8-b0e3c3acce97 summarizeBy: sum sourceColumn: [Value3] annotation SummarizationSetBy = Automatic column 'Parameter Filter' lineageTag: f9032c01-9dfe-4e07-b83a-f53186923566 summarizeBy: none sourceColumn: [Value10] sortByColumn: 'Parameter Order' annotation SummarizationSetBy = Automatic partition Parameter = calculated mode: import source = { ("Customer", NAMEOF('Customer'[Customer]), 0, "Company", NAMEOF('Customer'[Company]), "Country Name", NAMEOF('Customer'[Country Name]), "Occupation", NAMEOF('Customer'[Occupation]), "Customer"), ("Product", NAMEOF('Product'[Product]), 1, "Category Name", NAMEOF('Product'[Category Name]), "Manufacturer", NAMEOF('Product'[Manufacturer]), "Brand", NAMEOF('Product'[Brand]), "Product") } annotation PBI_Id = 327d5af8295f4794bec0a018ecba78f01.8KViews0likes0Comments3 "Measure Tables" With Icons
createOrReplace table '🎯Measures | 1.📈KPIs' lineageTag: 5b77fb14-15e7-485f-b4f2-04d64e555d3f column Value isHidden lineageTag: 7e2e1395-3081-47f7-8aad-43ead4d97bc6 isNameInferred sourceColumn: [Value] partition '🎯Measures | 1.📈KPIs' = calculated mode: import source = {0} table '🎯Measures | 2. #⃣ Variables' lineageTag: 136bb655-ea44-4e2c-8e2c-4b1a937d631a column Value isHidden lineageTag: 5394559c-99f0-484f-8e48-e5940b23d215 isNameInferred sourceColumn: [Value] partition '🎯Measures | 2. #⃣ Variables' = calculated mode: import source = {0} table '🎯Measures | 3.📋Titles and Labels' lineageTag: 5d7d76d1-ef56-4229-abe9-7f370a65585b column Value isHidden lineageTag: 453c18cd-ffa2-49be-b59b-d60ace1d4ab4 isNameInferred sourceColumn: [Value] partition '🎯Measures | 3.📋Titles and Labels' = calculated mode: import source = {0}3KViews0likes1CommentPQ Function - Calendar Table by Lars Schreiber
This German Power Query Function will create a CalendarTable with a fixed start and end range. Because of characterlimit here is the TMDL script: PBI-Tools/TMDL Repo/PQ Function - Calendar by Lars Schreiber.txt at main · KornAlexander/PBI-Tools See more info from Lars about the topic in his blog here: Meine projekterprobte Kalendertabelle für Power BI und Power Pivot | THE SELF-SERVICE-BI BLOG3KViews1like0Comments