DAX (Data Analysis Expressions) একটি শক্তিশালী ভাষা যা Power BI, PowerPivot, এবং SQL Server Analysis Services (SSAS)-এ ব্যবহৃত হয় ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন করার জন্য। DAX ফাংশনগুলির মধ্যে data filtering একটি অত্যন্ত গুরুত্বপূর্ণ দিক। Data Filtering হল এমন একটি প্রক্রিয়া যার মাধ্যমে আপনি ডেটার মধ্যে সুনির্দিষ্ট শর্ত প্রয়োগ করে সঠিক ডেটা সিলেক্ট করতে পারেন, যা আপনার বিশ্লেষণ এবং রিপোর্ট তৈরির জন্য প্রয়োজনীয়।
DAX-এ data filtering করতে বিভিন্ন ফাংশন এবং কৌশল ব্যবহার করা হয়, যেমন FILTER, ALL, VALUES, ALLEXCEPT, CALCULATE, এবং আরও অনেক। এই ফাংশনগুলি ব্যবহার করে আপনি row context এবং filter context এ কার্যকরীভাবে কাজ করতে পারেন।
এই প্রবন্ধে, আমরা DAX-এর মাধ্যমে data filtering সম্পর্কিত ফাংশন এবং কৌশলগুলি নিয়ে আলোচনা করব।
১. FILTER ফাংশন
FILTER ফাংশনটি DAX-এ ডেটাকে শর্ত অনুযায়ী ফিল্টার করার জন্য ব্যবহৃত হয়। এটি টেবিলের একটি এক্সপ্রেশন বা রেঞ্জ নিয়ে কাজ করে এবং নির্দিষ্ট শর্ত পূর্ণ হওয়া সারিগুলি ফিরিয়ে দেয়।
Syntax:
FILTER(<table>, <condition>)
- : এটি সেই টেবিল বা এক্সপ্রেশন যা আপনি ফিল্টার করতে চান।
- : এটি শর্ত বা এক্সপ্রেশন যা টেবিলের সারিগুলিকে ফিল্টার করতে প্রয়োগ করা হয়।
ব্যবহার:
ধরা যাক, আপনার Sales টেবিল রয়েছে এবং আপনি চান শুধুমাত্র সেই রেকর্ডগুলো দেখাতে যেখানে Amount 1000 এর বেশি।
High Sales = FILTER(Sales, Sales[Amount] > 1000)
এটি Sales টেবিল থেকে শুধুমাত্র সেই সারিগুলি ফিরিয়ে দেবে, যেখানে Amount 1000 এর বেশি।
২. CALCULATE ফাংশন এবং FILTER ফাংশনের কম্বিনেশন
CALCULATE ফাংশনটি একটি এক্সপ্রেশন ক্যালকুলেট করার জন্য ব্যবহৃত হয় এবং এই ফাংশনের মাধ্যমে আপনি filter context পরিবর্তন করতে পারেন। CALCULATE ফাংশন সাধারণত FILTER ফাংশনের সাথে ব্যবহৃত হয় যাতে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার এবং ক্যালকুলেশন করা যায়।
Syntax:
CALCULATE(<expression>, <filter1>, <filter2>, ...)
ব্যবহার:
ধরা যাক, আপনি Sales টেবিলের Amount এর মোট যোগফল বের করতে চান, তবে শুধুমাত্র সেই সারিগুলির জন্য যেখানে Amount 1000 এর বেশি এবং Region "North"।
Total Sales in North = CALCULATE(SUM(Sales[Amount]), Sales[Amount] > 1000, Sales[Region] = "North")
এখানে:
- CALCULATE ফাংশনটি Sales[Amount] এর মোট যোগফল বের করবে।
- শুধুমাত্র সেই রেকর্ডগুলি গণনা হবে যেখানে Amount > 1000 এবং Region = "North"।
৩. ALL ফাংশন
ALL ফাংশনটি একটি টেবিল বা কলামের filter context সরিয়ে দেয়। এটি CALCULATE ফাংশনের সাথে ব্যবহার করা হয় যাতে আপনি unfiltered ডেটা দেখতে পারেন, যেখানে ফিল্টার প্রভাব মুছে দেওয়া হয়।
Syntax:
ALL(<table_or_column>)
ব্যবহার:
ধরা যাক, আপনি Sales টেবিলের Amount এর মোট যোগফল বের করতে চান, তবে Region এর কোনো ফিল্টারের প্রভাব রাখতে চান না:
Total Sales All Regions = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]))
এটি Sales[Amount] এর মোট যোগফল বের করবে, কিন্তু Sales[Region] কলামের কোনো ফিল্টার প্রভাব রাখবে না।
৪. ALLEXCEPT ফাংশন
ALLEXCEPT ফাংশনটি ALL ফাংশনের মতোই কাজ করে, তবে এটি শুধুমাত্র একটি বা একাধিক কলামের ফিল্টার প্রভাব রেখে দেয় এবং অন্য সকল কলামের ফিল্টার সরিয়ে দেয়।
Syntax:
ALLEXCEPT(<table>, <column1>, <column2>, ...)
ব্যবহার:
ধরা যাক, আপনি Sales টেবিলের Amount এর মোট যোগফল বের করতে চান, কিন্তু Region কলামের উপর ফিল্টার রাখবেন এবং অন্যান্য কলামের ফিল্টার মুছে ফেলবেন:
Total Sales by Region = CALCULATE(SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Region]))
এটি Sales টেবিলের Amount এর মোট যোগফল বের করবে, তবে Sales[Region] কলামের ফিল্টার প্রভাব বজায় থাকবে এবং অন্য সকল কলামের ফিল্টার মুছে যাবে।
৫. VALUES ফাংশন
VALUES ফাংশনটি একটি কলামে distinct values বের করতে ব্যবহৃত হয়। এটি ফিল্টার করা ডেটার মধ্যে ইউনিক মানগুলো প্রদান করে।
Syntax:
VALUES(<column>)
ব্যবহার:
ধরা যাক, আপনি Sales টেবিলের ProductID কলামের ইউনিক মানগুলি বের করতে চান:
Unique Products = VALUES(Sales[ProductID])
এটি Sales[ProductID] কলামের সমস্ত ইউনিক মান ফিরিয়ে দেবে।
৬. ALLSELECTED ফাংশন
ALLSELECTED ফাংশনটি ALL ফাংশনের মতোই কাজ করে, তবে এটি শুধুমাত্র user-selected filters বা সিলেকশন থেকে ডেটাকে প্রভাবিত করে। এটি interactive reports এ ব্যবহৃত হয়, যেখানে ব্যবহারকারী নির্দিষ্ট সিলেকশন বা ফিল্টার করতে পারেন।
Syntax:
ALLSELECTED(<table_or_column>)
ব্যবহার:
ধরা যাক, আপনি চান যে রিপোর্টে যেসব ফিল্টার ব্যবহারকারী সিলেক্ট করবেন, তাদের প্রভাব রেখে Sales টেবিলের Amount এর মোট যোগফল বের করতে:
Total Sales Selected = CALCULATE(SUM(Sales[Amount]), ALLSELECTED(Sales))
এটি Sales টেবিলের Amount এর মোট যোগফল বের করবে, তবে শুধুমাত্র ব্যবহারকারী যে ফিল্টার করেছেন তার প্রভাব রেখে।
সারাংশ
DAX Data Filtering ফাংশনগুলি ডেটার মধ্যে সুনির্দিষ্ট শর্ত প্রয়োগ করে সেই ডেটা ফিল্টার এবং কাস্টম ক্যালকুলেশন করতে সহায়ক। FILTER, CALCULATE, ALL, ALLEXCEPT, VALUES, ALLSELECTED ইত্যাদি ফাংশনগুলি সঠিক ডেটা নির্বাচন এবং প্রক্রিয়াকরণে গুরুত্বপূর্ণ ভূমিকা পালন করে। এই ফাংশনগুলির সঠিক ব্যবহার ডেটা বিশ্লেষণকে আরও কার্যকরী এবং দ্রুত করে তোলে এবং ডেটা মডেল তৈরির ক্ষেত্রে পারফরম্যান্স উন্নত করতে সাহায্য করে।
DAX (Data Analysis Expressions) হল একটি শক্তিশালী ভাষা যা Power BI, PowerPivot, এবং SQL Server Analysis Services (SSAS)-এ ব্যবহৃত হয়। DAX ব্যবহার করে ডেটা বিশ্লেষণ, কাস্টম ক্যালকুলেশন এবং মেট্রিক্স তৈরি করা হয়। Filter Context হল DAX-এর একটি গুরুত্বপূর্ণ ধারণা যা কাস্টম ক্যালকুলেশন এবং বিশ্লেষণ তৈরি করার সময় ডেটার কোন অংশ ব্যবহার করা হবে, তা নির্ধারণ করে।
এখানে আমরা Filter Context কী, এটি কীভাবে কাজ করে, এবং কেন এটি DAX ক্যালকুলেশন এবং বিশ্লেষণের জন্য অপরিহার্য তা বিস্তারিতভাবে আলোচনা করব।
Filter Context কী?
Filter Context হল DAX এর একটি গুরুত্বপূর্ণ ধারণা যা নির্ধারণ করে কোন ডেটা ক্যালকুলেশনের জন্য ব্যবহার হবে। এটি মূলত filters বা slicers এর মাধ্যমে ডেটার একটি অংশ নির্বাচন করে এবং সেই অংশের উপর ভিত্তি করে ক্যালকুলেশন করা হয়।
এটি প্রতিটি measure বা calculated column এর জন্য প্রযোজ্য, যেগুলি filters অথবা slicers এর মাধ্যমে কাস্টমাইজ করা হয়।
Filter Context এর উদাহরণ:
ধরা যাক, আপনার Sales টেবিল রয়েছে, যেখানে Amount, Region, এবং Product এর তথ্য রয়েছে। আপনি যদি Region অনুযায়ী Sales এর মোট পরিমাণ বের করতে চান, তবে Region একটি filter context হিসেবে কাজ করবে এবং ক্যালকুলেশন শুধুমাত্র সেই Region এর জন্য হবে।
Total Sales by Region = SUM(Sales[Amount])
এখানে:
- যদি আপনি Region সিলেক্ট করেন (যেমন "East"), তবে Sales এর ক্যালকুলেশন শুধু East Region এর জন্য হবে।
Filter Context এবং Row Context এর মধ্যে পার্থক্য
- Filter Context: এটি এমন এক ধরনের কনটেক্সট যেখানে আপনি filters বা slicers ব্যবহার করে data selection বা aggregation নিয়ন্ত্রণ করেন। CALCULATE, FILTER, এবং অন্যান্য ফাংশনগুলি filter context তৈরি করতে ব্যবহৃত হয়।
- Row Context: এটি একটি iterative context তৈরি করে, যখন আপনি row-by-row calculation করতে চান, যেমন calculated columns এর জন্য। এটি একটি row এর মানকে অন্য row এর সাথে তুলনা করতে ব্যবহৃত হয়।
Row Context Example:
Profit = Sales[Amount] - Sales[Cost]
এখানে Profit হিসাব করার জন্য DAX row-by-row calculation করে এবং row context তৈরি করে, যেখানে প্রতিটি সারির জন্য Amount এবং Cost এর পার্থক্য বের করা হয়।
Filter Context Example:
Total Sales by Region = CALCULATE(SUM(Sales[Amount]), Sales[Region] = "East")
এখানে Sales[Region] এর filter context East এর জন্য ক্যালকুলেশন করছে।
Filter Context এর প্রয়োজনে কেন গুরুত্বপূর্ণ?
Filter Context DAX এর একটি গুরুত্বপূর্ণ উপাদান কারণ এটি ডেটার নির্দিষ্ট অংশ নিয়ে ক্যালকুলেশন করার সক্ষমতা প্রদান করে। এর সাহায্যে আপনি বিভিন্ন শর্তের ভিত্তিতে ডেটাকে সিলেক্ট বা ফিল্টার করে ফলাফল পেতে পারেন, যা বিশেষত business intelligence (BI) বিশ্লেষণ, sales reports, financial reports ইত্যাদিতে অত্যন্ত গুরুত্বপূর্ণ।
Filter Context এর প্রয়োজনীয়তা:
- Dynamic Reporting: Filter Context ব্যবহার করে আপনি dynamic reports তৈরি করতে পারেন, যা বিভিন্ন filters বা slicers এর মাধ্যমে পরিবর্তিত হয়।
- Complex Calculations: এটি জটিল ক্যালকুলেশন করতে সহায়ক যেমন total sales by region, year-over-year growth, বা cumulative totals।
- Multiple Criteria: Filter Context একাধিক শর্ত প্রয়োগের জন্য সহায়ক, যেমন একাধিক filters ব্যবহার করে একটি ডেটা সেট সিলেক্ট করা।
- Improved Data Retrieval: Filter Context ডেটার সঠিক অংশ নির্বাচন করে ফলাফল প্রাপ্তিতে সহায়তা করে, যেমন শুধুমাত্র সিলেক্ট করা time period বা region এর জন্য পরিসংখ্যান বের করা।
Filter Context নিয়ন্ত্রণের জন্য DAX ফাংশন
DAX এর বিভিন্ন ফাংশন filter context নিয়ন্ত্রণ এবং কাস্টমাইজ করতে ব্যবহৃত হয়। কিছু গুরুত্বপূর্ণ ফাংশন হলো:
CALCULATE: এটি একটি এক্সপ্রেশন ক্যালকুলেট করার জন্য ব্যবহৃত হয়, যেখানে আপনি filter context পরিবর্তন করতে পারেন।
Total Sales in East = CALCULATE(SUM(Sales[Amount]), Sales[Region] = "East")FILTER: এটি একটি টেবিলের উপর condition প্রয়োগ করে ফিল্টার তৈরি করতে ব্যবহৃত হয়।
High Sales = FILTER(Sales, Sales[Amount] > 1000)ALL: এটি একটি টেবিল বা কলামের filter context সরিয়ে দেয়।
Total Sales All = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]))ALLSELECTED: এটি নির্বাচিত ফিল্টারের ভিত্তিতে একটি filter context তৈরি করে, যা slicer বা visual filter এর মধ্যে প্রভাব ফেলে।
Total Sales Selected = CALCULATE(SUM(Sales[Amount]), ALLSELECTED(Sales[Region]))ALLEXCEPT: এটি একটি টেবিলের মধ্যে শুধুমাত্র নির্দিষ্ট কলামের filter context রেখে দেয় এবং অন্য কলামের ফিল্টার মুছে দেয়।
Total Sales by Region = CALCULATE(SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Region]))
Filter Context এর Practical Application
- Sales Reporting: Filter context ব্যবহার করে আপনি বিভিন্ন region, product, বা time period অনুযায়ী বিক্রয় বিশ্লেষণ করতে পারেন। উদাহরণস্বরূপ, Region বা Time Period ভিত্তিক কাস্টম রিপোর্ট তৈরি করতে Filter Context অত্যন্ত কার্যকর।
- Financial Analysis: Filter context ব্যবহার করে আপনি budget এবং actual পরিমাণের পার্থক্য, বা profit margins বিশ্লেষণ করতে পারেন।
- Customer Insights: আপনি customer segments, purchase behaviors, বা repeat customers অনুযায়ী বিশ্লেষণ করতে পারবেন, যা ব্যবসায়িক কৌশল তৈরি করতে সহায়ক।
সারাংশ
Filter Context DAX-এর একটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন তৈরিতে সহায়ক। এটি ডেটার নির্দিষ্ট অংশ নির্বাচন করে এবং সেগুলির উপর ভিত্তি করে ক্যালকুলেশন বা পরিমাপ করা হয়। DAX-এ CALCULATE, FILTER, ALL, ALLSELECTED ফাংশনগুলি filter context নিয়ন্ত্রণ করতে ব্যবহৃত হয় এবং এই কৌশলগুলি business intelligence রিপোর্টিং এবং ডেটা বিশ্লেষণের জন্য অত্যন্ত গুরুত্বপূর্ণ। Filter Context DAX-এ ডেটার উপর আরও গভীর বিশ্লেষণ, কাস্টম ক্যালকুলেশন এবং ব্যবসায়িক সিদ্ধান্ত গ্রহণকে সহজ করে তোলে।
DAX (Data Analysis Expressions)-এ CALCULATE ফাংশনটি একটি অত্যন্ত গুরুত্বপূর্ণ এবং শক্তিশালী টুল যা filter context এবং calculation context পরিবর্তন করতে ব্যবহৃত হয়। এটি ডেটার উপর বিভিন্ন ধরনের filter manipulation করতে সক্ষম, যেমন ফিল্টার যোগ করা, ফিল্টার সরানো বা কাস্টম ফিল্টার তৈরি করা। CALCULATE ফাংশনের মাধ্যমে আপনি ডেটার বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন করতে পারেন, যা বিশেষভাবে business intelligence রিপোর্টিং এবং financial analysis এর জন্য উপকারী।
এই প্রবন্ধে, আমরা CALCULATE ফাংশন ব্যবহার করে filter manipulation কিভাবে করা যায়, তা বিস্তারিতভাবে আলোচনা করব।
১. CALCULATE ফাংশনের সেন্ট্যাক্স
CALCULATE ফাংশনের সেন্ট্যাক্স নিম্নরূপ:
CALCULATE(<expression>, <filter1>, <filter2>, ...)
- : এটি সেই এক্সপ্রেশন বা গণনা যা আপনি করতে চান।
- , , ...: এক বা একাধিক ফিল্টার শর্ত যা আপনি প্রয়োগ করতে চান। ফিল্টারগুলির মধ্যে logical expressions বা table filters থাকতে পারে।
CALCULATE ফাংশনটি একটি এক্সপ্রেশন তৈরি করে এবং সেই এক্সপ্রেশনের উপর নির্দিষ্ট ফিল্টার প্রয়োগ করে ফলাফল পরিবর্তন করে।
২. Filter Manipulation with CALCULATE
CALCULATE ফাংশনটি filter context পরিবর্তন করার জন্য ব্যবহৃত হয়। Filter context হল ডেটা সেটের উপর প্রযোজ্য ফিল্টারগুলির সেট, যা CALCULATE ফাংশনটি ডেটা ক্যালকুলেশন করার সময় পরিবর্তন করতে পারে।
Use Case 1: Basic Filter Manipulation
ধরা যাক, আপনি Sales টেবিলের মোট বিক্রয় পরিমাণ বের করতে চান, কিন্তু Region ফিল্টার "East" রাখবেন। আপনি CALCULATE ফাংশন ব্যবহার করতে পারেন:
Total Sales in East = CALCULATE(SUM(Sales[Amount]), Sales[Region] = "East")
এখানে:
- SUM(Sales[Amount]) হল এক্সপ্রেশন যা Sales[Amount] এর মোট যোগফল বের করে।
- Sales[Region] = "East" হল ফিল্টার শর্ত যা শুধুমাত্র "East" অঞ্চলের বিক্রয় পরিমাণ গণনা করতে সহায়ক।
এটি Sales[Amount] এর মোট যোগফল প্রদান করবে, কিন্তু শুধুমাত্র "East" অঞ্চলের বিক্রয় হিসাব করা হবে।
Use Case 2: Removing Filters
ধরা যাক, আপনি চান যে Region কলামের ফিল্টার মুছে ফেলা হোক, তবে অন্যান্য সব ফিল্টার থাকে। আপনি ALL ফাংশন ব্যবহার করে এটি করতে পারেন:
Total Sales All Regions = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]))
এখানে:
- ALL(Sales[Region]) ফিল্টারটি Sales[Region] কলামের সকল ফিল্টার মুছে ফেলবে এবং Sales[Amount] এর মোট যোগফল বের করবে সমস্ত অঞ্চলের জন্য।
এটি Sales[Amount] এর মোট যোগফল বের করবে, তবে Region কলামের ফিল্টার প্রভাব মুক্ত থাকবে।
Use Case 3: Adding Multiple Filters
CALCULATE ফাংশনটির মাধ্যমে একাধিক ফিল্টার প্রয়োগ করা যায়। ধরুন, আপনি চান যে Sales টেবিলের Amount এর মোট যোগফল বের করা হোক, যেখানে Region "East" এবং ProductCategory "Electronics" হবে:
Sales in East Electronics = CALCULATE(
SUM(Sales[Amount]),
Sales[Region] = "East",
Sales[ProductCategory] = "Electronics"
)
এখানে:
- Sales[Region] = "East" এবং Sales[ProductCategory] = "Electronics" ফিল্টার দুটি একযোগে প্রয়োগ করা হয়েছে, যার মাধ্যমে শুধুমাত্র East অঞ্চলের এবং Electronics পণ্যের বিক্রয় পরিমাণ বের করা হবে।
Use Case 4: Using Advanced Filters with Functions
CALCULATE ফাংশনটির সাথে আপনি জটিল ফিল্টার শর্তও প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনি চান যে Sales টেবিল থেকে Amount এর যোগফল বের করা হোক, কিন্তু শুধুমাত্র সেই বিক্রয়গুলোকে অন্তর্ভুক্ত করা হবে যেখানে Amount 1000 এর বেশি এবং Discount 5% এর বেশি হবে:
Sales Above 1000 with Discount = CALCULATE(
SUM(Sales[Amount]),
Sales[Amount] > 1000,
Sales[Discount] > 0.05
)
এখানে:
- Sales[Amount] > 1000 এবং Sales[Discount] > 0.05 ফিল্টার দুটি শর্ত হিসেবে প্রয়োগ করা হয়েছে, যার মাধ্যমে শুধুমাত্র সেই বিক্রয় পরিমাণের যোগফল বের করা হবে যেখানে Amount 1000 এর বেশি এবং Discount 5% এর বেশি।
৩. CALCULATE with Time Intelligence
Time Intelligence ফাংশনগুলি CALCULATE ফাংশনের সাথে ব্যবহার করা হয় যখন আপনি time-based filtering করতে চান, যেমন YTD (Year to Date), QTD (Quarter to Date), MTD (Month to Date) ইত্যাদি।
Use Case: YTD Sales Calculation
ধরা যাক, আপনি Sales টেবিল থেকে Year-to-Date (YTD) বিক্রয় পরিমাণ বের করতে চান, যেখানে Sales[Date] কলামটি তারিখের তথ্য ধারণ করছে:
YTD Sales = CALCULATE(
SUM(Sales[Amount]),
DATESYTD(Sales[Date])
)
এখানে:
- DATESYTD(Sales[Date]) ফাংশনটি Sales[Date] কলামের মাধ্যমে বছরের প্রথম দিন থেকে বর্তমান তারিখ পর্যন্ত সমস্ত বিক্রয় পরিমাণকে অন্তর্ভুক্ত করবে।
এটি Sales টেবিল থেকে বছরের শুরু থেকে বর্তমান তারিখ পর্যন্ত মোট বিক্রয় পরিমাণ বের করবে।
৪. CALCULATE with USERELATIONSHIP
USERELATIONSHIP ফাংশনটি ব্যবহৃত হয় যখন আপনি ডিফল্ট সম্পর্কটি ব্যবহার না করে অন্য একটি সম্পর্ক ব্যবহার করতে চান। এটি inactive relationships সক্রিয় করার জন্য সহায়ক।
Use Case: Using Inactive Relationship
ধরা যাক, আপনার Sales এবং Date টেবিলের মধ্যে দুটি সম্পর্ক রয়েছে, কিন্তু একটি সম্পর্ক inactive (অকার্যকর) অবস্থায় আছে। আপনি যদি সক্রিয় সম্পর্কটি ব্যবহার করতে চান, তবে USERELATIONSHIP ব্যবহার করতে পারেন:
Total Sales Last Year = CALCULATE(
SUM(Sales[Amount]),
USERELATIONSHIP(Sales[OrderDate], Date[Date])
)
এখানে:
- USERELATIONSHIP(Sales[OrderDate], Date[Date]) ফাংশনটি Sales[OrderDate] এবং Date[Date] এর মধ্যে inactive relationship সক্রিয় করবে এবং তারপরে Sales[Amount] এর মোট যোগফল বের করবে।
৫. Performance Considerations
CALCULATE ফাংশন ব্যবহার করার সময় কিছু পারফরম্যান্স সতর্কতা অবলম্বন করা প্রয়োজন:
- Filter context পরিবর্তন করার ফলে ডেটার বিশ্লেষণ প্রক্রিয়া ধীর হতে পারে। অতএব, ফিল্টারগুলির সংখ্যা সীমিত রাখুন এবং এক্সপ্রেশনগুলি দ্রুত তৈরি করুন।
- CALCULATE ফাংশনের মধ্যে FILTER ব্যবহার করলে rows সিলেকশন করা হয়, যা অধিক ডেটা নিয়ে কাজ করার সময় পারফরম্যান্সে প্রভাব ফেলতে পারে।
সারাংশ
CALCULATE ফাংশনটি DAX-এ filter manipulation এবং context transition করতে ব্যবহৃত হয়। এটি ব্যবহার করে আপনি ডেটার উপর বিভিন্ন ফিল্টার প্রয়োগ করতে, এক্সপ্রেশন পরিবর্তন করতে এবং কাস্টম ক্যালকুলেশন তৈরি করতে পারেন। CALCULATE ফাংশনের মাধ্যমে আপনি time intelligence, inactive relationships, এবং complex filters প্রয়োগ করতে সক্ষম হন, যা Power BI এবং Excel-এ শক্তিশালী বিশ্লেষণ এবং রিপোর্ট তৈরি করতে সাহায্য করে।
DAX (Data Analysis Expressions) একটি শক্তিশালী ভাষা যা Power BI, Excel PowerPivot, এবং SQL Server Analysis Services (SSAS)-এ ব্যবহৃত হয় ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন তৈরি করতে। DAX ফাংশনগুলির মধ্যে ALL এবং FILTER ফাংশন দুটি অত্যন্ত গুরুত্বপূর্ণ টুল, যা data filtering এর জন্য ব্যবহৃত হয়। এই ফাংশনগুলি ব্যবহার করে আপনি ডেটার নির্দিষ্ট অংশ ফিল্টার করতে পারেন এবং কাস্টম বিশ্লেষণ তৈরি করতে পারেন।
এই প্রবন্ধে, আমরা ALL এবং FILTER ফাংশন ব্যবহার করে কিভাবে ডেটা ফিল্টার করা যায় এবং কোন পরিস্থিতিতে এগুলি কার্যকরী হতে পারে তা আলোচনা করব।
১. ALL ফাংশন
ALL ফাংশনটি ব্যবহার করা হয় যখন আপনি একটি টেবিল বা কলামের উপর থেকে filter context সরিয়ে দিতে চান, অর্থাৎ আপনি টেবিলের সকল ডেটাকে unfiltered অবস্থায় ফেরত পেতে চান। এটি সাধারণত CALCULATE ফাংশনের সাথে ব্যবহার করা হয়, যাতে কোনো নির্দিষ্ট কলামের ফিল্টার প্রভাব মুছে ফেলা যায়।
Syntax:
ALL(<table_or_column>)
- <table_or_column>: এটি সেই টেবিল বা কলাম, যার ফিল্টার মুছে ফেলা হবে।
ব্যবহার:
ধরা যাক, আপনি Sales টেবিলের Region কলামের উপর সমস্ত ফিল্টার মুছে দিয়ে Amount এর মোট যোগফল বের করতে চান:
Total Sales All Regions = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]))
এখানে:
- ALL(Sales[Region]) ফাংশনটি Sales টেবিলের Region কলামের সমস্ত ফিল্টার সরিয়ে দেবে।
- এরপর, SUM(Sales[Amount]) ফাংশনটি সমস্ত Sales[Amount] কলামের যোগফল বের করবে।
এটি সমস্ত Region এর জন্য Amount এর মোট যোগফল বের করবে, যেখানে কোনো ফিল্টার প্রভাবিত হবে না।
আরেকটি উদাহরণ:
যদি আপনি Sales টেবিলের Amount এর মোট যোগফল বের করতে চান, তবে Region এবং Product কলামের ফিল্টার মুছে দিতে চান, তাহলে:
Total Sales All Filters = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]), ALL(Sales[Product]))
এটি Sales[Amount] এর মোট যোগফল বের করবে, এবং Region এবং Product কলামের ফিল্টার প্রভাবটি মুছে ফেলবে।
২. FILTER ফাংশন
FILTER ফাংশনটি একটি টেবিল বা কলামের উপর শর্ত প্রয়োগ করে এবং condition পূর্ণ করা সারিগুলি ফেরত দেয়। এটি ব্যবহার করে আপনি কাস্টম শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারেন। সাধারণত FILTER ফাংশনটি CALCULATE ফাংশনের সাথে ব্যবহার করা হয়।
Syntax:
FILTER(<table>, <condition>)
- : এটি সেই টেবিল বা এক্সপ্রেশন, যার উপর ফিল্টার প্রয়োগ করা হবে।
- : শর্ত বা এক্সপ্রেশন যা নির্দিষ্ট করবে যে কোন সারিগুলি filter করা হবে।
ব্যবহার:
ধরা যাক, আপনি Sales টেবিল থেকে শুধুমাত্র সেই সারিগুলি বের করতে চান, যেখানে Amount 1000 এর বেশি:
High Sales = FILTER(Sales, Sales[Amount] > 1000)
এটি Sales টেবিল থেকে শুধুমাত্র সেই সারিগুলি ফিরিয়ে দেবে, যেখানে Amount 1000 এর বেশি।
আরেকটি উদাহরণ:
আপনি যদি Sales টেবিল থেকে Region "North" এবং Amount 500 এর বেশি ফিল্টার করতে চান, তবে:
High Sales North = FILTER(Sales, Sales[Amount] > 500 && Sales[Region] = "North")
এটি Sales টেবিল থেকে Amount 500 এর বেশি এবং Region "North" এর জন্য সমস্ত সারি ফিরিয়ে দেবে।
৩. ALL এবং FILTER ফাংশন একসাথে ব্যবহার
ALL এবং FILTER ফাংশন একসাথে ব্যবহার করা হলে, আপনি filter context এবং কাস্টম শর্ত উভয়কেই নিয়ন্ত্রণ করতে পারেন। ALL ফাংশনটি filter context সরিয়ে দেয়, এবং FILTER ফাংশনটি কাস্টম শর্ত প্রয়োগ করতে সহায়ক।
Example:
ধরা যাক, আপনি Sales টেবিল থেকে Amount এর মোট যোগফল বের করতে চান, তবে Region ফিল্টার মুছে দিয়ে Amount 1000 এর বেশি শর্ত দিয়ে ফিল্টার করতে চান:
High Sales All Regions = CALCULATE(SUM(Sales[Amount]), ALL(Sales[Region]), Sales[Amount] > 1000)
এখানে:
- ALL(Sales[Region]) ফাংশনটি Region কলামের উপর সকল ফিল্টার সরিয়ে দেবে।
- Sales[Amount] > 1000 ফিল্টারটি কেবল সেই রেকর্ডগুলিকে নির্বাচন করবে যেখানে Amount 1000 এর বেশি।
এটি Sales টেবিলের Amount এর মোট যোগফল বের করবে, তবে Region কলামের ফিল্টার প্রভাব থাকবে না এবং Amount 1000 এর বেশি থাকা শর্তটি প্রয়োগ করবে।
৪. FILTER এবং CALCULATE এর সাথে ব্যবহার
CALCULATE ফাংশনের মাধ্যমে আপনি একটি filter context পরিবর্তন করতে পারেন এবং FILTER ফাংশন ব্যবহার করে কাস্টম শর্ত প্রয়োগ করতে পারেন।
Example:
ধরা যাক, আপনি Sales টেবিল থেকে Amount এর মোট যোগফল বের করতে চান, কিন্তু শুধুমাত্র Region "North" এবং Product "A" এর জন্য:
Total Sales North Product A = CALCULATE(SUM(Sales[Amount]), FILTER(Sales, Sales[Region] = "North" && Sales[Product] = "A"))
এখানে:
- CALCULATE ফাংশনটি Sales[Amount] এর যোগফল নির্ধারণ করবে।
- FILTER ফাংশনটি কেবল Region "North" এবং Product "A" এর জন্য ডেটা ফিল্টার করবে।
সারাংশ
ALL এবং FILTER ফাংশন দুটি DAX-এর শক্তিশালী টুল, যা data filtering এবং conditional aggregation করার জন্য ব্যবহৃত হয়। ALL ফাংশনটি filter context সরিয়ে দিয়ে ডেটাকে unfiltered অবস্থায় রেখে ক্যালকুলেশন করতে সহায়ক, এবং FILTER ফাংশনটি নির্দিষ্ট শর্তের উপর ভিত্তি করে ডেটা ফিল্টার করতে ব্যবহৃত হয়। এই ফাংশনগুলির সঠিক ব্যবহার ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন করার জন্য অত্যন্ত গুরুত্বপূর্ণ, যা Power BI এবং Excel-এ রিপোর্টিং এবং ড্যাশবোর্ড তৈরির কার্যক্ষমতা উন্নত করে।
DAX (Data Analysis Expressions) হলো একটি শক্তিশালী এক্সপ্রেশন ভাষা যা Power BI, PowerPivot, এবং SQL Server Analysis Services (SSAS)-এ ব্যবহৃত হয় ডেটা বিশ্লেষণ এবং কাস্টম ক্যালকুলেশন তৈরির জন্য। RELATED এবং RELATEDTABLE ফাংশনগুলি relationship navigation করতে ব্যবহৃত হয়, যার মাধ্যমে আপনি একটি টেবিলের মধ্যে সম্পর্কিত অন্য টেবিলের ডেটা অ্যাক্সেস করতে পারেন। এই ফাংশনগুলো one-to-many সম্পর্কের মধ্যে খুবই কার্যকরী, যেখানে একটি টেবিলের একাধিক সারি অন্য টেবিলের এক বা একাধিক সারির সাথে সম্পর্কিত।
এই প্রবন্ধে, আমরা RELATED এবং RELATEDTABLE ফাংশনগুলির মাধ্যমে কিভাবে ডেটা সম্পর্কিত টেবিলগুলির মধ্যে নেভিগেট করা যায় এবং এগুলির ব্যবহার ও কার্যকারিতা কী, তা বিস্তারিতভাবে আলোচনা করব।
১. RELATED ফাংশন
RELATED ফাংশনটি ব্যবহৃত হয় যখন আপনি একটি one-to-many relationship এর মাধ্যমে একটি টেবিলের কলামের মান অন্য একটি সম্পর্কিত টেবিল থেকে আনতে চান। এটি many side থেকে one side টেবিলের ডেটা অ্যাক্সেস করতে সাহায্য করে। এই ফাংশনটি সাধারণত calculated columns এবং measures তৈরি করার সময় ব্যবহৃত হয়।
Syntax:
RELATED(<column>)
- : সম্পর্কিত টেবিলের কলাম যেটি আপনি অ্যাক্সেস করতে চান।
ব্যবহার:
ধরা যাক, আপনার দুটি টেবিল রয়েছে:
- Sales (যেখানে ProductID এবং Amount আছে)
- Products (যেখানে ProductID এবং ProductName আছে)
আপনি যদি Sales টেবিল থেকে ProductName আনতে চান, যা Products টেবিলের সাথে সম্পর্কিত, তাহলে RELATED ফাংশন ব্যবহার করতে পারেন:
Product Name = RELATED(Products[ProductName])
এখানে:
- RELATED ফাংশনটি Sales টেবিলের প্রতিটি সারির জন্য Products টেবিলের সম্পর্কিত ProductName কলামের মান ফিরিয়ে দেবে।
Real-World Application:
RELATED ফাংশনটি ব্যবহারকারীদের সম্পর্কিত টেবিলের ডেটা সহজেই অ্যাক্সেস করতে সহায়ক, বিশেষ করে যখন আপনি দুটি টেবিলের মধ্যে সম্পর্কযুক্ত ডেটা একসাথে বিশ্লেষণ করতে চান, যেমন Sales এবং Products টেবিলের মধ্যে।
২. RELATEDTABLE ফাংশন
RELATEDTABLE ফাংশনটি একে অপরের সাথে সম্পর্কিত টেবিলের সমস্ত সারি ফেরত দেয়। এটি সাধারণত one-to-many সম্পর্কের ক্ষেত্রে ব্যবহৃত হয়, যেখানে আপনি many side থেকে one side টেবিলের সমস্ত সম্পর্কিত সারি অ্যাক্সেস করতে চান।
Syntax:
RELATEDTABLE(<table>)
- : সম্পর্কিত টেবিলটি যেটির সারি আপনি ফেরত পেতে চান।
ব্যবহার:
ধরা যাক, আপনার Sales এবং Products টেবিলের মধ্যে সম্পর্ক রয়েছে। আপনি যদি Products টেবিলের প্রতি পণ্যের জন্য সমস্ত Sales রেকর্ড দেখতে চান, তাহলে RELATEDTABLE ফাংশন ব্যবহার করতে পারেন:
Sales for Product = RELATEDTABLE(Sales)
এখানে:
- RELATEDTABLE(Sales) ফাংশনটি Products টেবিলের প্রতিটি পণ্যের জন্য সম্পর্কিত সমস্ত Sales টেবিলের সারি ফেরত দেবে।
Real-World Application:
এটি ব্যবহৃত হতে পারে যেখানে আপনি একটি পণ্যের বিক্রয় পরিমাণ এবং তার সাথে সম্পর্কিত সমস্ত Sales রেকর্ড দেখতে চান, বিশেষত যখন Sales টেবিলের একটি পণ্য অনুযায়ী একাধিক বিক্রয় রেকর্ড থাকে।
৩. RELATED এবং RELATEDTABLE এর মধ্যে পার্থক্য
| Feature | RELATED | RELATEDTABLE |
|---|---|---|
| Functionality | একক সারি থেকে সম্পর্কিত কলামের মান ফিরিয়ে নেয়। | একাধিক সারি (relationship) থেকে সম্পর্কিত টেবিলের সমস্ত সারি ফেরত দেয়। |
| Context | One-to-Many (Many side থেকে One side-এর ডেটা অ্যাক্সেস করতে) | One-to-Many (One side থেকে Many side-এর সমস্ত ডেটা অ্যাক্সেস করতে) |
| Return Type | একক মান (single value) | টেবিল (table of values) |
| Common Use | অন্য টেবিলের একক কলামের মান গ্রহণ করতে। | একাধিক সম্পর্কিত রেকর্ড বা সারি অ্যাক্সেস করতে। |
| Example | RELATED(Products[ProductName]) | RELATEDTABLE(Sales) |
৪. RELATED এবং RELATEDTABLE এর ব্যবহার
RELATED এবং RELATEDTABLE ফাংশনগুলি একে অপরের সাথে সম্পর্কযুক্ত টেবিলের ডেটা একত্রিত করার জন্য ব্যবহৃত হয়। এই দুটি ফাংশন একই সম্পর্কিত ডেটা অ্যাক্সেস করার জন্য ব্যবহৃত হলেও, তাদের উদ্দেশ্য এবং ফলাফল ভিন্ন। RELATED ব্যবহার করে আপনি একক মান ফিরিয়ে আনতে পারেন, যেখানে RELATEDTABLE ব্যবহার করে আপনি একাধিক সম্পর্কিত রেকর্ড বা সারি ফিরিয়ে আনতে পারেন।
Example 1: Calculate Total Sales for a Product
ধরা যাক, আপনার Products টেবিলের মধ্যে পণ্য এবং Sales টেবিলের মধ্যে বিক্রয়ের তথ্য রয়েছে। আপনি যদি Products টেবিলের প্রতিটি পণ্যের জন্য মোট বিক্রয় পরিমাণ বের করতে চান, তবে আপনি RELATEDTABLE এবং SUMX ব্যবহার করতে পারেন:
Total Sales = SUMX(RELATEDTABLE(Sales), Sales[Amount])
এখানে:
- RELATEDTABLE(Sales) ফাংশনটি Products টেবিলের প্রতিটি পণ্যের জন্য সমস্ত সম্পর্কিত Sales রেকর্ড ফিরিয়ে দেবে।
- SUMX ফাংশনটি সম্পর্কিত Sales রেকর্ডগুলির উপর Amount এর যোগফল বের করবে।
Example 2: Product Name with Sales Information
ধরা যাক, আপনি যদি Sales টেবিল থেকে একটি পণ্যের ProductName বের করতে চান, তাহলে আপনি RELATED ফাংশন ব্যবহার করতে পারেন:
Product Name = RELATED(Products[ProductName])
এটি Sales টেবিলের প্রতিটি রেকর্ডের জন্য Products টেবিলের সম্পর্কিত ProductName কলামের মান ফিরিয়ে দেবে।
৫. RELATED এবং RELATEDTABLE ব্যবহার করার জন্য কিছু টিপস
- One-to-Many Relationship: এই দুটি ফাংশন শুধুমাত্র one-to-many সম্পর্কের ক্ষেত্রে কার্যকর। যদি আপনার সম্পর্ক many-to-many হয়, তবে এই ফাংশনগুলি ব্যবহারের আগে আপনাকে সম্পর্কের মডেল সঠিকভাবে তৈরি করতে হবে।
- Performance: RELATED এবং RELATEDTABLE ফাংশনগুলি ব্যবহৃত হলে ডেটার সাইজ এবং সম্পর্কের জটিলতার উপর ভিত্তি করে পারফরম্যান্স প্রভাবিত হতে পারে। সেক্ষেত্রে filtering এবং context management গুরুত্বপূর্ন ভূমিকা পালন করে।
- Context Awareness: এই ফাংশনগুলির ব্যবহার filter context এবং row context উপর নির্ভর করে, তাই সঠিক কনটেক্সট ব্যবহারের মাধ্যমে আপনি আরো কার্যকর ফলাফল পেতে পারেন।
সারাংশ
RELATED এবং RELATEDTABLE ফাংশনগুলি DAX-এ সম্পর্কিত টেবিলগুলির ডেটা অ্যাক্সেস করার জন্য অত্যন্ত গুরুত্বপূর্ণ। RELATED ফাংশনটি একটি টেবিলের মধ্যে সম্পর্কিত কলামটির মান আনতে ব্যবহৃত হয়, এবং RELATEDTABLE ফাংশনটি সম্পর্কিত টেবিলের সমস্ত সারি ফেরত দেয়। এগুলি ডেটার মধ্যে সম্পর্ক তৈরি করার সময় অত্যন্ত কার্যকরী এবং কাস্টম ক্যালকুলেশন তৈরির জন্য সহায়ক। DAX ব্যবহার করে আপনি relationship navigation এর মাধ্যমে ডেটাকে আরও ভালভাবে বিশ্লেষণ করতে এবং রিপোর্টে উপস্থাপন করতে সক্ষম হবেন।
Read more