<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by ENTANGO on Medium]]></title>
        <description><![CDATA[Stories by ENTANGO on Medium]]></description>
        <link>https://medium.com/@entango?source=rss-486a4f96e33f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*0Q8vUXycAtpE-pJwkyedvg.png</url>
            <title>Stories by ENTANGO on Medium</title>
            <link>https://medium.com/@entango?source=rss-486a4f96e33f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 22 May 2026 13:31:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@entango/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[OpenAi prompt optmizer]]></title>
            <link>https://medium.com/@entango/openai-prompt-optmizer-d730d19bf55e?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d730d19bf55e</guid>
            <category><![CDATA[ai-tools]]></category>
            <category><![CDATA[openai]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Sun, 24 Aug 2025 13:35:43 GMT</pubDate>
            <atom:updated>2025-08-24T14:06:40.836Z</atom:updated>
            <content:encoded><![CDATA[<p>OpenAI has made available a useful tool for optimizing prompts.</p><p>link: <a href="https://platform.openai.com/chat/edit?optimize=true">https://platform.openai.com/chat/edit?optimize=true</a></p><p>Prompt optmizer uses the guidelines proposed by OpenAI itself for the gpt 5 model.</p><p>link: <a href="https://cookbook.openai.com/examples/gpt-5/gpt-5_prompting_guide">https://cookbook.openai.com/examples/gpt-5/gpt-5_prompting_guide</a></p><p>💡 <strong>How does it work?</strong><br>1. Choose the model for which you want to optimize the prompt</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n9XDcHCqM-vGfc_DPETPfg.png" /></figure><p>2. Paste your original prompt</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zApiAN67Lo3Q4dS0cWch_g.png" /></figure><p>3. Click “Optimize”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YTP_VTd88Z6nsTtBs7Hk0Q.png" /></figure><p>4. The tool rewrites it, applying the official prompting guidelines for the various models (those published by OpenAI itself)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pxdWhO-WvUFYClvEUc36wg.png" /></figure><p>5. Use the new optimized prompt</p><p>🎯 <strong>Result:</strong><br>- Highlights the steps to follow<br>- Eliminates ambiguity<br>- Clearly defines inputs and outputs<br>- Ability to save “optimized” versions and reuse them</p><p><strong>Conclusion:</strong></p><p>This tool is really very useful to make prompts complete and effective</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d730d19bf55e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Data products: what they are and what they are not]]></title>
            <link>https://medium.com/@entango/data-products-what-they-are-and-what-they-are-not-ff011205cd11?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/ff011205cd11</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-driven]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Mon, 30 Dec 2024 09:42:22 GMT</pubDate>
            <atom:updated>2024-12-30T09:46:57.075Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Data Products: An Overview</strong></h3><p><strong>Definition:</strong><br>Data products are foundational components in a modern data ecosystem, particularly within a <strong>data mesh</strong> architecture. They are designed to serve <strong>analytical data</strong> effectively, applying the principles and practices of software product development to the data domain. By doing so, data products ensure data is accessible, understandable, trustworthy, and valuable to its users.</p><h3>Key Characteristics of Data Products</h3><p>The following attributes define an effective data product:</p><p><strong>1. Discoverable</strong><br>Users should easily locate and understand the data products available to them. This involves robust metadata, intuitive search, and clear documentation.</p><p><strong>2. Addressable</strong><br>Each data product must have a unique identifier (e.g., a URI or URL), ensuring consistent and reliable access programmatically or manually.</p><p><strong>3. Understandable (Self-Describable)</strong><br>Comprehensive documentation is critical. This includes the data product’s purpose, structure, field-level descriptions, usage instructions, and sample data for easy evaluation.</p><p><strong>4. Trustworthy</strong><br>Trust is built through transparency about the product’s quality, performance, and reliability. This includes publishing Service Level Objectives (SLOs) and adhering to measurable Service Level Indicators (SLIs).</p><p><strong>5. Natively Accessible</strong><br>Data products should be tailored for various consumer needs:</p><ul><li>Managers might need prebuilt reports.</li><li>Data scientists could require SQL-based access.</li><li>Engineers might prefer API-based programmatic access.</li></ul><p><strong>6. Interoperable (Composable)</strong><br>To enable seamless integration with other data products, interoperability is key. This includes supporting standard business keys and common access patterns for joining, filtering, and aggregating data.</p><p><strong>7. Valuable on Its Own</strong><br>A data product must deliver independent value, representing a cohesive concept within its domain without requiring additional context or joins to be useful.</p><p><strong>8. Secure</strong><br>Strong access controls, encryption, and compliance with domain-specific regulations ensure the data product is protected against unauthorized use.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/541/1*wub7PmHl2rOItoIaXDr6JA.png" /></figure><p>Note: to learn more about the topic see Zhamak Dehghani’s book “<em>Data Mesh: Delivering Data-Driven Value at Scale”</em></p><h3>Functional Perspective</h3><p>A data product is not merely a dataset; it is a <strong>packaged, self-contained entity</strong> that:</p><ul><li>Provides <strong>structured</strong>, <strong>semi-structured</strong>, or <strong>unstructured analytical data</strong>.</li><li>Caters to specific user groups and their <strong>data consumption patterns</strong>.</li><li>Embeds necessary <strong>automation and infrastructure</strong> to efficiently achieve its purpose.</li></ul><h3>Business Value of Data Products</h3><p>By aligning with the principles of <strong>modern software development</strong>, data products:</p><ul><li>Decompose large, monolithic data systems into manageable, reusable components.</li><li>Encourage scalability, discoverability, and maintainability.</li><li>Support consistent delivery of meaningful <strong>business insights</strong> and value.</li></ul><p>Data products are the smallest valuable unit of analytical data within a data mesh, facilitating <strong>data-driven decision-making</strong> while prioritizing usability and reliability for diverse user personas.</p><h3>What Data Products Are Not</h3><p>A robust definition of data products requires not only specifying what they are but also clarifying what they aren’t. By doing so, organizations can avoid common pitfalls, ensure focus, and streamline the creation and management of effective data products.</p><h3>Why Clarity Matters</h3><ul><li>A narrower, well-defined scope prevents confusion across teams.</li><li>It enables the development of <strong>reusable blueprints</strong> and “paved paths” that simplify building and managing data products.</li><li>It maintains focus on solving problems specific to analytical data rather than trying to address all data-related challenges simultaneously.</li></ul><h3>Common Misrepresentations and Missing Characteristics</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/730/1*IxDo9Dr0oi2LpKvqgqQf0A.png" /></figure><h3>Key Differentiators</h3><ul><li><strong>Data Products vs. Data-Driven Applications:</strong></li><li><strong>Data Products</strong> are designed for <strong>programmatic access</strong> and <strong>composability</strong>, making them building blocks in a data mesh.</li><li><strong>Data-Driven Applications</strong> are intended for <strong>human interaction</strong> and lack inherent composability.</li><li><strong>Focus on Analytical Data:</strong><br>Data products apply software engineering principles to analytical data to address ownership and quality issues, but they are not the catch-all solution for broader enterprise data challenges.</li></ul><h3>Why Misunderstandings Happen</h3><ul><li><strong>Conflation of Concepts:</strong> Teams sometimes mix up data products with other data artifacts or tools due to the overlap in terminology or functionality.</li><li><strong>Diluted Language and Focus:</strong> Attempting to solve all ownership and quality issues under the banner of data mesh risks diluting the transformative impact of focused data product design.</li></ul><h3>Conclusion</h3><p>By clearly distinguishing what data products are and aren’t, teams can maintain focus, improve clarity, and build scalable, reusable solutions that align with the principles of a data mesh. This ensures data products deliver on their promise of creating composable, high-quality analytical data units that drive business value.</p><p>Credits: <a href="https://martinfowler.com/articles/designing-data-products.html">https://martinfowler.com/articles/designing-data-products.html</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ff011205cd11" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[POWERBI Pills n.5 — How to get the first & last value in a date range]]></title>
            <link>https://medium.com/@entango/powerbi-pills-n-5-how-to-get-the-first-last-value-in-a-date-range-43a1166768d2?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/43a1166768d2</guid>
            <category><![CDATA[business-intelligence]]></category>
            <category><![CDATA[dax]]></category>
            <category><![CDATA[power-bi]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Tue, 24 Dec 2024 09:50:29 GMT</pubDate>
            <atom:updated>2024-12-24T09:50:29.547Z</atom:updated>
            <content:encoded><![CDATA[<h3>POWERBI Pills n.5 — How to get the first &amp; last value in a date range</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*MsrdmsnayEMciqfh.jpeg" /></figure><p>In this short DAX pill we see how to find the first and the last value of a given column within a selected time range.</p><p>the context is that of the analysis of the trend of a cryptocurrency (e.g. BITCOIN) in a predefined time frame (e.g. quarter)</p><p>Let’s create the following calculated measurs:</p><ol><li>“<strong>FirstAdjClose</strong>”</li><li>“<strong>LastAdjClose</strong>”</li></ol><p>where:</p><p><strong>CryptoHistorical </strong>is the table where we have the historical data of a cryptocurrency</p><p><strong>FIRSTDATE </strong>is the function that returns the first date in the current context for the specified date column.</p><p><strong>LASTDATE </strong>is the function that returns the last date in the current context for the specified date column.</p><p>see the link:</p><p><a href="https://learn.microsoft.com/it-it/dax/firstdate-function-dax">https://learn.microsoft.com/it-it/dax/firstdate-function-dax</a></p><p><a href="https://learn.microsoft.com/it-it/dax/lastdate-function-dax">https://learn.microsoft.com/it-it/dax/lastdate-function-dax</a></p><p>the DAX sintax is the following:</p><p><em>FirstAdjClose =</em></p><p><em>VAR FirstDateValue = FIRSTDATE(CryptoHistorical[historical.date])</em></p><p><em>VAR result = CALCULATE(MAX(CryptoHistorical[historical.adjClose]), FILTER(CryptoHistorical, CryptoHistorical[historical.date]=FirstDateValue))</em></p><p><em>RETURN result</em></p><p>**********************************************************************</p><p><em>LastAdjClose =</em></p><p><em>VAR LastDateValue = LASTDATE(CryptoHistorical[historical.date])</em></p><p><em>VAR result = CALCULATE(MAX(CryptoHistorical[historical.adjClose]), FILTER(CryptoHistorical, CryptoHistorical[historical.date]=LastDateValue))</em></p><p><em>RETURN result</em></p><p>**********************************************************************</p><p>Note that the date (first or last) is stored in a variable and then passed as a filter to the CALCULATE function</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZTp1Vtp_M42JODD9cw01mA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=43a1166768d2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[API economy : pills n.1 — A very useful collection of weather API]]></title>
            <link>https://blog.devgenius.io/api-economy-pills-n-1-a-very-useful-collection-of-weather-api-819c3999555a?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/819c3999555a</guid>
            <category><![CDATA[api-development]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[open-data]]></category>
            <category><![CDATA[api]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Thu, 21 Sep 2023 09:58:54 GMT</pubDate>
            <atom:updated>2023-09-27T12:35:46.284Z</atom:updated>
            <content:encoded><![CDATA[<p>With this post I will start a new series of pills that will concern the world of APIs.</p><p>Reference to my previous post about Api economy:</p><p>https://blog.devgenius.io/the-apis-economy-c3ecd72061cd</p><p>I will talk about APIs available online and usable for real purposes and applications, I will talk about tools for API development, I will also talk about products (e.g. API marketplace) dedicated to the world of APIs.</p><p>In this first pill we will see a very useful list of APIs and resources (work in progress) relating to the world of weather (current, forecast), air-quality and other data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*l-92pnhn0eB0_ldc" /></figure><h3>AccuWeather:</h3><p>Weather and forecast data.</p><p>Access takes place via an ApiKey in HTTP mode and there are various free and paid plans for using the APIs</p><p><a href="https://developer.accuweather.com/apis">API Reference</a></p><h3>Weatherstack:</h3><p>Real-Time &amp; Historical World Weather Data API.</p><p>Access takes place via an ApiKey in HTTPS mode and there are various free and paid plans for using the APIs</p><p><a href="https://weatherstack.com/documentation">Weatherstack - Real-Time World Weather REST API</a></p><h3>OpenWeatherMap:</h3><p>Weather forecasts, nowcasts and history data.</p><p>Access takes place via an ApiKey in HTTPS mode and there are various free and paid plans for using the APIs</p><p><a href="https://openweathermap.org/api">Weather API</a></p><h3>WeatherApi:</h3><p>JSON and XML Weather API and Geolocation API</p><p>Access takes place via an ApiKey in HTTP or HTTPS mode and there are various free and paid plans for using the APIs. Support for CORS is present.</p><p><a href="https://www.weatherapi.com/docs/">Weather and Geolocation API - Weather and Geolocation API JSON and XML - WeatherAPI.com</a></p><h3>US Weather API:</h3><p>Data from US National Weather Service.</p><p>All of the information presented via the API is intended to be open data, free to use for any purpose. Access takes place in HTTPS mode.</p><p><a href="https://www.weather.gov/documentation/services-web-api">API Web Service</a></p><h3>WeatherBit:</h3><p>Current, forecasts and alert weather data. Air quality data.</p><p>Access takes place via an ApiKey in HTTP or HTTPS mode and there are various free and paid plans for using the APIs.</p><p><a href="https://www.weatherbit.io/api">API Documentation</a></p><h3>Tomorrow.io:</h3><p>Enterprise-grade Weather API (current, real-time, forecast)</p><p>Access takes place via an ApiKey in HTTPS mode and there are various free and paid plans for using the APIs.</p><p><a href="https://docs.tomorrow.io/reference/welcome">Tomorrow.io APIs</a></p><h3>Stormglass.io:</h3><p>Weather forecasts &amp; historical data from the world’s most trusted meteorological institutions. Include marine weather (wave and wind).</p><p>Access takes place via an ApiKey in HTTPS mode and there are various free and paid plans for using the APIs.</p><p><a href="https://stormglass.io/">stormglass.io Weather API</a></p><h3>M3O Weather:</h3><p>Real time weather forecast.</p><p>Access takes place via an ApiKey in HTTPS mode and there are various free and paid plans for using the APIs.</p><p><a href="https://m3o.com/weather/api">Weather API - Real time weather forecast</a></p><h3>OpenSenseMap:</h3><p>OpenSenseMap is an open sensor data platform that anyone can participate in. Data comes from Personal Weather Stations called “SenseBoxes”. Air-quality, temperature and humidity data are available.</p><p>Access requires token authentication only for some APIs. Access in HTTP mode.</p><p><a href="https://opensensemap.org/">openSenseMap.org</a></p><h3>INGV Earthquake events:</h3><p>Italian open data on earthquakes.</p><p>All of the information presented via the API is intended to be open data, access is free and does not require ApiKey. Access in HTTP mode.</p><p><a href="https://developers.italia.it/it/api/terremoti-opendata.html">INGV Earthquake event</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=819c3999555a" width="1" height="1" alt=""><hr><p><a href="https://blog.devgenius.io/api-economy-pills-n-1-a-very-useful-collection-of-weather-api-819c3999555a">API economy : pills n.1 — A very useful collection of weather API</a> was originally published in <a href="https://blog.devgenius.io">Dev Genius</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The APIs economy]]></title>
            <link>https://blog.devgenius.io/the-apis-economy-c3ecd72061cd?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/c3ecd72061cd</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[data-driven]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Mon, 18 Sep 2023 11:44:35 GMT</pubDate>
            <atom:updated>2023-09-19T11:42:32.617Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*GMaCeB8VdxhrRaj9.png" /></figure><h3>What is an API:</h3><p>An API (Application Programming Interface) is a tool that allows companies to make the data and functionality of their applications available to external developers, business partners and internal departments of the company itself. This allows different services and products to communicate with each other and leverage each other’s information and functionality via a well-documented interface. Developers don’t need to know the technical details of how the API was created; they simply use the interface to interact with other products and services. The use of APIs has grown significantly over the last decade, so much so that many of the most popular web applications today could not exist without the use of APIs.</p><h3>How the API works:</h3><p>An API (Application Programming Interface) is a set of clearly defined rules that dictate how computers or applications should communicate with each other. APIs serve as an intermediary layer situated between an application and a web server, facilitating the processing of data exchange between different systems.</p><p>Here’s how an API works:</p><p>1. A client application initiates an API call, often referred to as a request, to obtain specific information. This request is transmitted from the client application to the web server using the API’s Uniform Resource Identifier (URI). It typically includes a request verb, headers, and sometimes a request body.</p><p>2. Once a valid request is received, the API acts as an intermediary and makes a call to the external program or web server that holds the requested data or functionality.</p><p>3. The server processes the request and sends a response back to the API, containing the requested information.</p><p>4. The API then passes this data back to the initial requesting client application.</p><p>This request and response process takes place entirely through the API. While user interfaces are designed for human interaction, APIs are specifically designed for computer or application-to-application communication.</p><p>APIs are designed with security in mind. Their intermediate position helps simplify the abstraction of functionality between two systems, with the API endpoint acting as a separation layer between the requesting application and the underlying infrastructure providing the service. Here are some key aspects of API security:</p><p>1. <strong>Authorization Credentials</strong>: API calls typically include authorization credentials, such as API keys or tokens. These credentials help verify the identity of the requesting application and reduce the risk of unauthorized access to the server.</p><p>2. <strong>API Gateway</strong>: An API gateway can be used to manage and secure API access. It serves as a central entry point for API requests and can enforce security policies, throttle requests, and provide logging and monitoring to minimize security threats.</p><p>3. <strong>HTTP Headers, Cookies, and Query Parameters</strong>: During the data exchange between the client and server via the API, HTTP headers, cookies, and query string parameters can be used to add additional layers of security. For example, secure cookies can help maintain session state, and headers can be used to specify content types and enforce security policies.</p><p>4. <strong>Rate Limiting</strong>: API security often includes rate limiting to prevent abuse. By restricting the number of requests a client can make within a specific time frame, it helps protect the server from potential denial-of-service attacks.</p><p>5. <strong>Encryption</strong>: To secure data in transit, APIs commonly use encryption protocols such as HTTPS (HTTP Secure) to encrypt the communication between the client and server, ensuring that data remains confidential and cannot be easily intercepted.</p><p>6. <strong>Authentication</strong>: APIs can implement various authentication methods, such as OAuth, API keys, or token-based authentication, to verify the identity of clients and grant access only to authorized users or applications.</p><p>7. <strong>Access Control</strong>: Access control mechanisms within APIs ensure that users or applications can only access the data and functionality they are authorized to use. This helps prevent unauthorized access to sensitive information.</p><p>In summary, APIs incorporate multiple layers of security measures, including authentication, authorization, encryption, and access control, to protect both the API provider’s data and the users of the API. These security features are essential for ensuring the integrity and confidentiality of data exchanged through APIs.</p><p>For instance, let’s take the case of an API provided by a payment processing service. In an e-commerce store application, customers input their card details into the frontend. Instead of needing access to the user’s bank account directly, the payment processor’s API generates a unique token for that specific transaction and includes it in the API request sent to the server. This approach enhances security by reducing the risk of potential hacking threats because the actual card details are not exposed during the transaction.</p><h3>Why we need APIs:</h3><p>Using APIs offers numerous advantages for both managing existing tools and designing new ones. Some of the key benefits of APIs include:</p><p>1. <strong>Improving Collaboration</strong>: Many companies use a wide range of cloud applications, often not integrated with each other. APIs enable integration, allowing these platforms to communicate seamlessly. This integration automates workflows and improves workplace collaboration. Without APIs, companies would be forced to use siled data, compromising productivity and performance.</p><p>2. <strong>Simple Innovation</strong>: APIs offer flexibility, allowing companies to establish connections with new business partners, offer new services to their existing market and enter new markets. For example, Stripe started as an API with a few lines of code and has grown into a billion-dollar company through partnerships with large companies and diversification of services.</p><p>3. <strong>Data Monetization</strong>: Many companies start by offering APIs for free to build a developer base and establish relationships with potential partners. However, if the API offers access to valuable data, you can monetize it by selling access. AccuWeather, for example, has attracted thousands of developers and created a growing community by selling API keys.</p><p>4. <strong>Added Security</strong>: APIs add an extra layer of security between the data and the server. Developers can further enhance API security using tokens, digital signatures, and Transport Layer Security (TLS) encryption. Using API gateways to manage and authenticate traffic helps further protect resources. Additionally, effective API management is critical to ensuring secure operations.</p><p>In summary, APIs are essential tools that facilitate collaboration, foster innovation, enable data monetization, and strengthen the security of business applications and services. They are a key element in digital transformation and the creation of new business opportunities.</p><h3>Types of API protocols:</h3><p>As the use of Web APIs has increased, various protocols have been developed to provide users with a set of well-defined rules that specify the commands and data types accepted. These API protocols simplify the standardized exchange of information. Here are some of them:</p><p>1. <strong>SOAP (Simple Object Access Protocol)</strong>: This is an XML-based API protocol that allows users to send and receive data via protocols such as SMTP and HTTP. SOAP APIs make it easy to exchange information between applications or software components running in different environments or written in different programming languages. It is known for its robustness and support for complex operations.</p><p>2. <strong>XML-RPC</strong>: This protocol uses the XML format for data transfer, but unlike SOAP, it uses a simpler XML format. XML-RPC is older than SOAP but is known for its lightweight and minimal bandwidth usage.</p><p>3. <strong>JSON-RPC</strong>: Similar to XML-RPC, but uses JSON (JavaScript Object Notation) format for data transfer. Both protocols are known for their simplicity and support remote procedure calls (RPCs) with parameters and results.</p><p>4. <strong>REST (Representational State Transfer)</strong>: This is a principle-based Web API architecture rather than a specific protocol. REST APIs (known as RESTful APIs) must respect certain architectural constraints, such as the use of URIs (Uniform Resource Identifier) ​​to identify resources and the use of HTTP methods (GET, POST, PUT, DELETE) to interact with them . There is no official standard for RESTful APIs, but they follow a set of key API design principles.</p><p>It’s important to note that while it’s possible to build RESTful APIs using protocols like SOAP, the two approaches are often thought of as competing specifications and follow different design philosophies. The choice of protocol often depends on the specific needs of the project and the preferences of the development team.</p><h3><strong>Common API examples:</strong></h3><p>APIs have become a valuable asset in the modern business world as they allow companies to offer access to their resources while maintaining security and control. Below are some popular examples of APIs you may encounter:</p><p>1. <strong>Universal Logins</strong>: Many platforms allow users to log in to websites using the login details of their accounts on services such as Facebook, Twitter or Google. This is made possible through APIs, which allow websites to use the authentication credentials of these services to simplify the login process. This saves users the hassle of having to create new accounts for every web service they use.</p><p>2. <strong>Third Party Payment Processing</strong>: Services like “Pay with PayPal” on e-commerce websites use APIs to allow users to make payments securely without having to share sensitive financial information with the website. Payment APIs enable secure and convenient transactions.</p><p>3. <strong>Travel Booking Comparisons</strong>: Travel booking websites aggregate information on flights, hotels and other travel options from multiple sources. This is possible thanks to APIs that provide application users access to a wide range of data updated in real time. Users can easily compare travel options without having to manually consult different sources.</p><p>4. <strong>Google Maps</strong>: Google Maps offers a set of APIs that allow developers to integrate interactive maps and geolocation services into their applications. These APIs allow users to view maps, get directions, find places of interest, and much more. Google Maps APIs are widely used in web and mobile applications.</p><p>5. <strong>Twitter</strong>: Twitter offers an API that allows developers to access tweet data and interact with the platform. This allows developers to create applications and services that use public tweets and replies. For example, social media management applications use the Twitter API to publish tweets and analyze social media activity.</p><p>In summary, APIs are critical to building modern services and applications that rely on data and functionality provided by third parties. They enable integration, security and simplified access to a wide range of digital assets, improving the user experience and expanding business opportunities.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c3ecd72061cd" width="1" height="1" alt=""><hr><p><a href="https://blog.devgenius.io/the-apis-economy-c3ecd72061cd">The APIs economy</a> was originally published in <a href="https://blog.devgenius.io">Dev Genius</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[POWERBI Pills n.4 — How to use FILTER function]]></title>
            <link>https://medium.com/@entango/powerbi-pills-n-4-how-to-use-filter-function-ff67dbe1cf2d?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/ff67dbe1cf2d</guid>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[business-intelligence]]></category>
            <category><![CDATA[power-bi]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Sat, 19 Aug 2023 09:39:42 GMT</pubDate>
            <atom:updated>2023-08-19T09:41:46.515Z</atom:updated>
            <content:encoded><![CDATA[<h3>POWERBI Pills n.4 — How to use FILTER function</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d0-7dTZ6hJ5EeVaaQ9mZ3w.jpeg" /></figure><p><strong>DAX FILTER Function</strong></p><p>The FILTER function in DAX allows you to specify a filter criterion on the data.</p><p>The FILTER function return a filtered table.</p><p>The FILTER function has 2 parameters:</p><ul><li><strong>Table</strong>: Iterator, is the table to be filtered</li><li><strong>FilterExpression</strong>: RowContext, is a boolean (True/False) expression that is to be evaluated for each row of the table</li></ul><p>Syntax:</p><p>FILTER( &lt;Table&gt; , &lt;FilterExpression&gt; )</p><p><strong>What are DAX Filter Function Used For?</strong></p><p>You can use filter DAX Power BI functions in a variety of scenarios, like when you want to:</p><ul><li>Reduce the number of rows in a table</li><li>Hide irrelevant columns or rows</li><li>Perform arithmetic operations on predefined fields</li><li>Calculate new parameters or new measures</li><li>Create dynamic calculations</li><li>Manipulate data context</li></ul><p><strong>DAX FILTER Function in action</strong></p><p>Now let’s see some practical examples of using the FILTER function. We will use as an example the dataset “Employee hiring and history sample” which you can find at the following link</p><p><a href="https://github.com/microsoft/powerbi-desktop-samples/tree/main/powerbi-service-samples">powerbi-desktop-samples/powerbi-service-samples at main · microsoft/powerbi-desktop-samples</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4rG9J7IR13qT1xirbdT8Kg.png" /><figcaption>sample</figcaption></figure><p>in this dataset:</p><p>Employee = fact table of employee data</p><p>TermDate = date of termination of employment</p><p>if we use the function:</p><blockquote><em>FILTER(Employee, ISBLANK(Employee[TermDate]))</em></blockquote><p>we get all the employees (of the “Employee” table) whose “TermDate” is empty and therefore are active.</p><p>Note that the ISBLANK function only returns records that have the “TermDate” field equal to “blank”</p><p>if we create the measure:</p><blockquote><em>Actives =<br>CALCULATE ( [EmpCount], FILTER ( Employee, ISBLANK ( Employee[TermDate] ) ) )</em></blockquote><p>we get the count of Actives employee</p><p>Now we want to create a measure that filters the data in the “Employee” table based on a related dimension. For example the region “North” in the BU dimension</p><blockquote>EmpRegionNorth =<br>CALCULATE (<br> [EmpCount],<br> FILTER ( Employee, RELATED ( ‘BU’[Region] ) = “North” )<br>)</blockquote><p>in this case we get the count of Employees that belong to the North region</p><p>Note that the RELATED function allows us to use a filter criterion that is on the “BU” dimension of our data model.</p><p><strong>Other FILTER functions</strong></p><p>The filter and value functions in DAX are some of the most complex and powerful, and differ greatly from Excel functions. The lookup functions work by using tables and relationships, like a database. The filtering functions let you manipulate data context to create dynamic calculations.</p><p>At the following link the Microsoft page that the list of filter functions.</p><p><a href="https://learn.microsoft.com/en-us/dax/filter-functions-dax">https://learn.microsoft.com/en-us/dax/filter-functions-dax</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ff67dbe1cf2d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[An example of DATA ANALYTICS solution for construction industry]]></title>
            <link>https://medium.com/@entango/an-example-odata-analytics-solution-for-construction-industry-9e6b165aa2a8?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/9e6b165aa2a8</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data-visualization]]></category>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[business-intelligence]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Sun, 25 Jun 2023 08:29:50 GMT</pubDate>
            <atom:updated>2023-06-26T15:44:18.584Z</atom:updated>
            <content:encoded><![CDATA[<p>In my work I deal with data analytics solutions for the energy, engineering, construction and industrial production sectors.</p><p>in these sectors, as in others, the data sources can be heterogeneous both in terms of format and the technology with which the data is made available. Furthermore, it is often necessary to interface with third-party software (such as SAP, Oracle or Microsoft) to have certain information available.</p><p>The project that I will talk about in this post concerns a DATA ANALYTICS solution for the construction sector.</p><p>The project is based on the Microsoft technology stack (Azure Data Lake, Azure Synapse Pipelines, Azure Synapse Analytics, PowerBI) and can be schematized in the figure below to get a general picture of the information and the components and technologies used.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dMgh_E8Xhnhj1YXSiL1bWQ.png" /><figcaption>Architecture schema</figcaption></figure><h3>DATA SOURCES</h3><p>Data sources can be heterogeneous</p><p><strong>Relational databases (on-premises</strong>): to get data from ERP software (ex. SAP) , cost estimation software (ex. TeamSystem Construction) or other operational software</p><p><strong>API</strong>: to get data from cloud apps or services (ex. IoT sensor or equipment management platforms)</p><p><strong>Files</strong>: to get data from user input or other application that dont have services or API</p><h3>ORCHESTRATION</h3><p><strong>Azure Data Lake (Gen2)</strong>: to store the data</p><p>Through a procedure implemented by my development team (in c# or python), or with the help of Azure Synapse Pipelines (or Azure Data Factory), we are going to save the information coming from the data sources in a datalake on Azure.</p><p>The data is saved in “parquet” type files inside the datalake.</p><p><strong>Azure Synapse Analytics</strong>: to manage and monitor the data in the data lake</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RLkVkLky0eAKbcCp" /><figcaption>Azure Synapse Analytics</figcaption></figure><h3>ANALYSIS &amp; VISUALIZATION</h3><p><strong>Power BI</strong>: to model and analyze the data</p><p>the data model on which to build the analyzes and visualizations to be made available to users</p><p>Built with a star schema to optimize performance and ease analysis definition</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G2M-VInMJ4-DPr6Abnaciw.png" /><figcaption>Star schema</figcaption></figure><p><strong>Power BI</strong>: to visualize the data</p><p>above the data model we built visualizations to extract the maximum value for the end user.</p><p>The visualizations are designed according to the typologies and expectations of the end users</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x2sHLOv78pKLs5rlbWDTZg.png" /><figcaption>Control panel</figcaption></figure><h3>REPORTS, ANALYTICS &amp; APPLICATIONS</h3><p><strong>Reports</strong>: To guide the user in data navigation</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BDTRpthT1NA5ZJFit5siCg.png" /></figure><p><strong>Analytics</strong>: To offer the user specific “insights” about the data</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-nqpMpjhQSN2Pu1Oxpnaog.png" /></figure><p><strong>Applications</strong>: to publish the data</p><p>through the publication of data on the PowerBI service, users can share information (for those who have permission)</p><p>by creating a PowerBI app we can give access to it from other applications (embeddings) cloud or desktop</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3Cib19473iI6n46iZ3rZRQ.png" /><figcaption>embeddings in a desktop application</figcaption></figure><h3>Conclusions:</h3><p>There are many tools available and sometimes identifying the most useful ones for the result may not be simple, however the correct definition/collection of the end user’s needs and expectations guides us in designing the most effective solution.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9e6b165aa2a8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[POWERBI Pills n.3 — How to calculate running total]]></title>
            <link>https://medium.com/@entango/powerbi-pills-n-3-how-to-calculate-running-total-16b7653acdb8?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/16b7653acdb8</guid>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[data-visualization]]></category>
            <category><![CDATA[power-bi]]></category>
            <category><![CDATA[business-intelligence]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Wed, 03 May 2023 21:16:35 GMT</pubDate>
            <atom:updated>2023-05-03T21:28:35.188Z</atom:updated>
            <content:encoded><![CDATA[<h3>POWERBI Pills n.3 — How to calculate running total</h3><p>In representations involving the time dimension, there is often the need to display data, such as amounts, in progressive rather than absolute terms.</p><p>the running total is a value that increases (or decreases) over time always taking into account the values ​​previously achieved.</p><h3>Dataset and data model</h3><p>Let’s imagine to have a data model like the following and we focus on the SalesAmount (Fact) and Date (Measure) fields</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NaUgToInuLznsCD99Boa4w.png" /></figure><p>Let’s imagine we have amounts (e.g. sales) distributed over time like those shown below</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IsEn2DTVZYxo9yAS-RRnug.png" /><figcaption>Sales amount by year and month</figcaption></figure><h3>DAX formula</h3><p>Let’s imagine we want to obtain a running total over time rather than a simple subdivision over time.</p><p>To get this result, we create the following measure in DAX</p><blockquote>RunningTotalSalesAmount =</blockquote><blockquote>CALCULATE (</blockquote><blockquote>SUM ( ‘Sales’[SalesAmount] ),</blockquote><blockquote>FILTER (</blockquote><blockquote>ALL(‘Sales’),</blockquote><blockquote>‘Sales’[OrderDate] &lt;= MAX ( ‘Sales’[OrderDate] )</blockquote><blockquote>)</blockquote><blockquote>)</blockquote><p>to this measure we use the following logic:</p><ul><li>we use the CALCULATE function with the SUM of SalesAmount as expression</li><li>we use the FILTER function in the CALCULATE filter expression</li><li>in the FILTER functione we use ALL to return all the rows in the table, ignoring any filters that might have been applied.</li><li>we apply a condition to the OrderDate</li></ul><h3>Result</h3><p>As a result we get the data and their following representation:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZhbPFRia51zhcCVAoJQyOw.png" /></figure><p>the comparison with the first representation is the following:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RG_TBXydYrNWz7Bf0wyUEA.png" /></figure><h3>Buy me a coffee</h3><p>If you find my work interesting, consider buying me a coffee here:</p><p><a href="https://www.buymeacoffee.com/Entango">https://www.buymeacoffee.com/Entango</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=16b7653acdb8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Data ingestion with Python]]></title>
            <link>https://blog.devgenius.io/data-ingestion-with-python-78dcf55e712?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/78dcf55e712</guid>
            <category><![CDATA[business-intelligence]]></category>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[data-quality]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Sun, 16 Apr 2023 08:05:05 GMT</pubDate>
            <atom:updated>2023-06-27T15:01:30.110Z</atom:updated>
            <content:encoded><![CDATA[<p>This post is inspired by a real experience that I found myself managing.</p><p>For a data governance and business intelligence project that I’m following, I found myself having to populate a SQL SERVER database starting from heterogeneously structured EXCEL files</p><p>Required: Import data into SQL SERVER from EXCEL</p><p>What tools to use?!</p><p>The operational choice was to use procedures written in Python in order to have high flexibility and be able to introduce more or less articulated logics for the treatment of data present in EXCEL.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SKYCXB8XzIHEqVEVRnl3qw.png" /></figure><p>Tools used:<br>1. Excel<br>2. Visual studio Code with Python environment<br>3. SQL Server</p><p>Code structure:</p><p><strong>1.Import Python libraries:</strong></p><p>For my procedure I used Pandas (reading from Excel), Numpy (data processing), PyOdbc (connection to SQL SERVER), plus other service libraries</p><pre># import python libraries</pre><pre>import pandas as pd</pre><pre>import numpy as np</pre><pre>import pyodbc</pre><pre>import uuid</pre><pre>from datetime import datetime</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/846/1*vcubjohNj9YeDCuvHoj7EA.png" /></figure><p><strong>2.Create connection to SQLSERVER</strong></p><p>Using PyOdbc I create and open a connection to the SQL SERVER database</p><pre># setup the connection string</pre><pre>server = ‘NB001566’</pre><pre>database = ‘EntangoData’</pre><pre>username = ‘**’</pre><pre>password = ‘*******’</pre><pre>conn = pyodbc.connect(‘DRIVER={SQL Server};SERVER=’+server+’;DATABASE=’+database+’;UID=’+username+’;PWD=’+ password)</pre><pre>cursor = conn.cursor()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*PtmxLM2CA6QnpSL8qEELAQ.png" /></figure><p><strong>3.Read data from Excel</strong></p><p>With the read_excel function of the Pandas library I read the data from Excel by verifying its content</p><blockquote># read the Excel sheet</blockquote><pre>sheet = pd.read_excel(‘data/Prezzari/EmiliaRomagna/DataToImport.xlsx’, sheet_name=’Completo 2022&#39;)</pre><pre>print (sheet)</pre><pre>print (sheet.info())</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/879/1*jv_zuPJuG4o2v8zR7JbDBg.png" /></figure><p>Note: in this particular case the data to import are a set of information about construction materials</p><p><strong>4.Processing of data read from Excel</strong></p><p>Iteration on the data with the insertion of specific logics with respect to the objectives of my analysis.</p><blockquote># iteration on Excel sheet data</blockquote><pre>for index, row in sheet.iterrows():</pre><pre>Id = str(uuid.uuid4())</pre><pre>Name = sheet.iloc[index][0]</pre><pre>Description = sheet.iloc[index][1]</pre><pre>Rate = sheet.iloc[index][3]</pre><pre>ImagePath = ‘ ‘</pre><pre>BrandId = ‘a8b51d8d-78e9–4824–4f22–08db2eebed3c’</pre><pre>TenantId = ‘root’</pre><pre>CreatedBy = ‘ ‘</pre><pre>CreatedOn = ‘ ‘</pre><pre>LastModifiedBy = ‘ ‘</pre><pre>LastModifiedOn = ‘ ‘</pre><pre>DeletedOn = ‘ ‘</pre><pre>DeletedBy = ‘ ‘</pre><pre>CatalogDescription = ‘Emilia Romagna 2022’</pre><pre>CatalogId = ‘ER.2022’</pre><pre>Category = ‘Edilizia’</pre><pre>EANCode = ‘ ‘</pre><pre>EquipmentPerc = 0.0</pre><pre>ExtendedDescription = ‘ ‘</pre><pre>Geography = ‘ ‘</pre><pre>LabourPerc = 0.0</pre><pre>MaterialPerc = 0.0</pre><pre>SafetyPerc = 0.0</pre><pre>Synonims = ‘ ‘</pre><pre>UM = sheet.iloc[index][2]</pre><pre>print(“articolo: “, Id, “ — “, Name, “ — “, Rate, “ — “, UM)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/930/1*0yX_hsRuE6yEG_UHSPsUJA.png" /></figure><p>Note: Python allows me to introduce even complex logics for data processing and for their eventual enrichment with information from other sources</p><p><strong>5.Insert in SQL SERVER</strong></p><p>In the final step I proceed to the insertion in SQL SERVER going to fix the numerical conversions and the null data check. Finally I trace the successful import in a log.</p><blockquote>try:</blockquote><pre>DescriptionStr = Description</pre><pre>if pd.isnull(Description):</pre><pre>DescriptionStr = ‘’</pre><pre>RateDec = Rate</pre><pre>if np.isnan(Rate):</pre><pre>RateDec = 0.0</pre><pre>UMStr = UM</pre><pre>if pd.isnull(UM):</pre><pre>UMStr = ‘’</pre><pre>cursor.execute(“INSERT INTO [Catalog].[Products] (Id, Name, Description, Rate, BrandId, TenantId, CatalogDescription, CatalogId, Category, UM) VALUES(?,?,?,?,?,?,?,?,?,?)”, Id, Name, DescriptionStr, RateDec, BrandId, TenantId, CatalogDescription, CatalogId, Category, UMStr)</pre><pre>except Exception as e:</pre><pre>print(e.args[1])</pre><pre># INSERT Logs in a separate table</pre><pre>ID_LOG = “P”</pre><pre>DESCRIPTION_LOG = “import prezzario Emilia Romagna 2022”</pre><pre>DATA_LOG = datetime.now()</pre><pre>cursor.execute(“INSERT INTO Logs (ID, Description, ExecutionDate) values(?,?,?)”, ID_LOG, DESCRIPTION_LOG, DATA_LOG)</pre><pre>print(“Register operation”)</pre><pre>conn.commit()</pre><pre>print(“Data Successfully Inserted”)</pre><pre>cursor.close()</pre><pre>print(“Cursor closed”)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ADqOb98j098EG8watpoHmQ.png" /></figure><p><strong>CONCLUSION</strong>:</p><p>The use of Python becomes effective and decisive when there is the need to insert logic, even articulated, on the data being treated or if one wants to have flexibility regarding the result to be obtained.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=78dcf55e712" width="1" height="1" alt=""><hr><p><a href="https://blog.devgenius.io/data-ingestion-with-python-78dcf55e712">Data ingestion with Python</a> was originally published in <a href="https://blog.devgenius.io">Dev Genius</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[POWERBI Pills n.2 — How to show filters applied to data]]></title>
            <link>https://medium.com/@entango/powerbi-pills-n-2-how-to-show-filters-applied-to-data-75dad394d59c?source=rss-486a4f96e33f------2</link>
            <guid isPermaLink="false">https://medium.com/p/75dad394d59c</guid>
            <category><![CDATA[data-analysis]]></category>
            <category><![CDATA[data-visualization]]></category>
            <category><![CDATA[business-intelligence]]></category>
            <category><![CDATA[power-bi]]></category>
            <dc:creator><![CDATA[ENTANGO]]></dc:creator>
            <pubDate>Thu, 09 Mar 2023 10:26:43 GMT</pubDate>
            <atom:updated>2023-03-09T10:26:43.095Z</atom:updated>
            <content:encoded><![CDATA[<h3>POWERBI Pills n.2 — How to show filters applied to data</h3><p>There are many ways to filter data in a PowerBI report (in report/page/visual filters, in slicers, …), so if we want to better understand our data one of the most important thing we can do is to show the filters applied to data.</p><h3>“Selected filters” measure definition:</h3><p>To show the filters applied to data, first of all we have to create the following measure:</p><blockquote><em>Selected filters =</em></blockquote><blockquote><em>VAR separator = UNICHAR(10) /* linefeed and carriage return character */</em></blockquote><blockquote><em>VAR Cust = IF(ISFILTERED(‘Customer’[LastName]) ,</em></blockquote><blockquote><em>“Customer = “ &amp; CONCATENATEX(ALLSELECTED(Customer[LastName]) , Customer[LastName] , “ ; “) &amp; separator , “Customer = ALL” &amp; separator )</em></blockquote><blockquote><em>VAR Year = IF(ISFILTERED(‘Calendar’[CalendarYear]) ,</em></blockquote><blockquote><em>“Year = “ &amp; CONCATENATEX(ALLSELECTED(‘Calendar’[CalendarYear]) , ‘Calendar’[CalendarYear] , “ ; “) &amp; separator , “Year = ALL” &amp; separator )</em></blockquote><blockquote><em>VAR Prod = IF(ISFILTERED(‘Product’[EnglishProductName]) ,</em></blockquote><blockquote><em>“Product = “ &amp; CONCATENATEX(ALLSELECTED(‘Product’[EnglishProductName]) , ‘Product’[EnglishProductName] , “ ; “) , “Product = ALL”)</em></blockquote><blockquote><em>RETURN Cust &amp; Year &amp; Prod</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*K2aGEtco3uqj_XB-0RdoiA.png" /><figcaption>measure “Selected filters”</figcaption></figure><p>This measure is built on 3 specific dimensions of the model that we use in the report.</p><p>This measure use variables (Cust, Year, Prod) to temporary store the value of the single dimension filter retrieved.</p><p>This measure use 2 important DAX function to extract filters applied to data:</p><p><strong>ISFILTERED</strong>( … ): Returns TRUE when the specified table or column is being filtered directly</p><p><strong>ALLSELECTED</strong>( … ): The ALLSELECTED function gets the context that represents all rows and columns in the query, while keeping explicit filters and contexts other than row and column filters. This function can be used to obtain visual totals in queries.</p><h3>“Selected filters” measure display:</h3><p>When i use the measure in specific visual (card), the result is the following:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nuD1N8-e56aC8zC0L9Bipg.png" /></figure><p>It is also possible to insert the measurement created in a tooltip to make the visualization more effective</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fPzncgAt9hbMV0gM4PHGRg.png" /></figure><h3>Buy me a coffee</h3><p>If you find my work interesting, consider buying me a coffee here:</p><p><a href="https://www.buymeacoffee.com/Entango">https://www.buymeacoffee.com/Entango</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=75dad394d59c" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>